VBA循环中如何同时使用工作表名称和Code Name引用工作表?
报错原因
Sheets 集合的索引仅支持两种参数类型:工作表的显示名称(字符串类型)、工作表的序号(数字类型)。你直接将作为Code Name的Sheet03传入数组,Sheet03本身是Worksheet对象,和数组中其他字符串类型的元素类型不一致,传给Sheets集合后无法识别,因此触发类型不匹配报错。
可行解决方案
- 方案1(最推荐,执行效率更高):直接构造Worksheet对象数组遍历,无需通过
Sheets集合二次查找
For Each WS In Array(Sheets("Sheet1"), Sheets("Sheet2"), Sheet03) ' 此处写你原本的工作表处理逻辑 Next
- 方案2(保留原代码结构):取Code Name对应工作表的显示名称传入,统一数组元素为字符串类型
For Each WS In Sheets(Array("Sheet1", "Sheet2", Sheet03.Name)) ' 此处写你原本的工作表处理逻辑 Next
补充说明
使用Code Name引用工作表稳定性远高于直接写显示名称:Code Name仅能在VBA编辑器的属性面板中修改,普通用户在Excel界面修改工作表显示名称不会影响Code Name的引用,代码不会因此失效。
内容的提问来源于stack exchange,提问作者Leedo
相关产品推荐
相关产品推荐

