VBA代码引用工作表的方法探讨
在VBA代码中引用工作表时,可以考虑三种方式:
(1)使用工作表在工作簿中的位置,即索引值。在工作簿的底部,从左到右顺序编号。如果在工作簿使用过程中,移动工作表的位置,则其索引值也会相应改变。
(2)使用工作表名称,即工作表标签。在工作簿使用过程中,用户可能随时改变其名称。
(3)使用工作表“真正的”名称,即代码名称。当创建工作表时,Excel会自动赋给该工作表代码名称,缺省情况下为Sheet后接数字,除非您在VBE中为其重命名。
在VBE中的工程窗口中,通常您可以看到:Sheet1(Sheet1),其中左侧为该工作表的代码名称,右侧括号内的为工作表标签名称(即用户为该工作表起的名字),您也可以为该工作表起别的名字如“汇总”。
下图指出了VBE中工作表代码名称和工作表名称,以及修改方法。
探讨
(1)编写VBA代码时,如果使用工作表索引值或工作表名称,有可能在代码运行时,用户会改变工作表的位置或工作表名称,从而会导致代码运行错误。
(2)这三种方式中,唯一不变的是工作表代码名称,除非最终用户删除了工作表或者在VBE窗口中对其重命名。这样,在用户移动工作表或者改变工作表标签时,代码仍会正常运行。因此,这种方式相对来说,应该是最安全的。
您可以在VBE中将工作表的代码名称改为有意义的名称。
(3)例如,要激活上图中的第一个工作表,则相对应的引用工作表的三种方式是:
- 通过索引值:Sheets(1).Activate
- 通过工作表名称:Sheets(“汇总”).Activate
- 通过代码名称:Sheet1.Activate
(4)再举一个例子,要将上图中“汇总”工作表上A1:C10中的数据复制到“上半年”工作表中的A1:C10中,相应的也有三种方式:
- 通过索引值:Sheets(1).[A1:C10].Copy Sheets(2).[A1]
- 通过工作表名称:[汇总!A1:C10].Copy [上半年!A1]
- 通过代码名称:Sheet1.[A1:C10].Copy [Sheet3.A1]
(5)不可以跨工作簿使用工作表代码名称,即不能在一个工作簿中使用另一个工作簿中的工作表代码名称。

发表评论