一夜没睡没搞定Excel VBA遍历工作表的问题,求指导
excel吧
全部回复
仅看楼主
level 1
Growthist📈 楼主
这么说吧,最近在做一个Excel表格,工程浩大。此工作簿包含30个工作表,每个工作表里都有很多表单对象,比如单选按钮和复选按钮,为了使单选按钮只对特定单元格生效,随即加入分组框(Groupbox)。
但是问题来了,分组框是有边框的,影响视觉观感。于是想办法将其隐藏,由于工作簿里有巨量的对象,分组框也很多,使用“查找和选择”里的手动隐藏对象方法太麻烦、太不现实,能累死人,而且以后想启用时又得重来一遍。
故而决定采用VBA代码解决,在网络上搜索下资料,我倒腾出了如下代码:
--------------------------------------------
Sub 遍历工作簿隐藏分组框线()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
Dim sh As Shape
For Each sh In ActiveSheet.Shapes
If sh.Type = msoFormControl Then
If sh.FormControlType = xlGroupBox Then
sh.Visible = False
End If
End If
Next sh
Next ws
End Sub
----------------------------------------------
但是这串代码却只对单个活动工作表有效,并不能遍历整个工作簿,我也找不出原因。
请大神们指教
2017年11月05日 04点11分 1
level 12
你这个就没有在循环每个工作表啊,你只做循环了一个工作表里面的对象
2017年11月05日 04点11分 2
代码是抄的,没对工作簿循环[汗],看来我还是没懂,着急
2017年11月05日 05点11分
level 12
for each sht in worksheets
2017年11月05日 05点11分 3
这个试过了,跟错误的例子结果是一样的。不过我现在解决了,就是在第二行下面加一行ws.Activate激活遍历到的工作表即可,同样感谢你的热心解答。
2017年11月05日 05点11分
回复 常公千古🌳 :不好意思,看错了,你这个上面有遍历工作表,一般这个只需要排除当前工作表就行了
2017年11月05日 08点11分
level 12
Sub 遍历工作簿隐藏分组框线()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
Dim sh As Shape
For Each sh In ws.Shapes
If sh.Type = msoFormControl AND sh.FormControlType = xlGroupBox Then sh.Visible = False
Next sh
Next ws
End Sub
2017年11月05日 16点11分 4
可能要加一句 on error resume next
2017年11月05日 16点11分
你这个更好,不用激活工作表就可以处理对象,不过在Next sh这句前得加个End If是不是?
2017年11月06日 02点11分
回复 常公千古🌳 :加了就是画蛇添足了. 建议认真看下if语句的帮助.
2017年11月06日 02点11分
@zipall 看了下语法,单行模式(Then后的内容不另起一行)不需要End If,块模式是需要的。感谢提供思路
2017年11月06日 03点11分
level 2
楼上的是对的,你的循环是:For Each sh In ActiveSheet.Shapes
用你的也可以,但是工作表循环中需要激活每个工作表:ws..Select
2017年11月06日 01点11分 5
谢谢点播,刚刚明白
2017年11月06日 02点11分
1