VBA Excel多工作表批量隐藏列报错问题求助
解决VBA批量隐藏多工作表指定列的错误问题
第一个代码错误原因及修正
原代码里的For Each sh In sNames报错“Object required”,是因为sNames是字符串数组,但sh被定义为Worksheet对象类型——不能把字符串直接赋值给工作表对象变量,类型不匹配。另外还有两处笔误:Next was应该是Next sh,且Sheets(sh).BomColumns的写法不符合VBA语法,无法识别这种变量调用方式。
修正后的代码可直接遍历字符串数组,逐个操作工作表:
Dim sName As Variant Dim sNames As Variant sNames = Array("BoM North", "BoM North Extras", "BoM South") For Each sName In sNames Sheets(sName).Columns("I:J").Hidden = True Next sName
第二个代码错误原因及修正
With ws.Range(BomColumns)报错“Method 'Range of Worksheets' failed”,是因为BomColumns是你在当前活动工作表上定义的Range对象,ws.Range()方法无法接受其他工作表的Range对象作为参数。同样这里的Next was是笔误,要改成Next ws。
你可以不用提前定义Range对象,直接在循环里引用目标工作表的列:
Dim ws As Worksheet For Each ws In Sheets(Array("BoM North", "BoM North Extras", "BoM South")) ws.Columns("I:J").Hidden = True Next ws
如果需要复用列地址,可把列地址存为字符串变量,避免重复编写:
Dim ws As Worksheet Dim bomColAddr As String bomColAddr = "I:J" For Each ws In Sheets(Array("BoM North", "BoM North Extras", "BoM South")) ws.Columns(bomColAddr).Hidden = True Next ws
内容的提问来源于stack exchange,提问作者Geographos
相关产品推荐
相关产品推荐

