如何在工作表名称更改时使宏起作用

exc*_*lSU 2 excel vba

即使有人更改了 Sheet1、Sheet2 等的选项卡名称,我该如何制作才能使我的宏在电子表格上运行?

例如我的代码中的这个片段:

Set MyWorkbook = Workbooks.Open(DataDialog.SelectedItems(Counter))
Set MySheet = MyWorkbook.Worksheets("Sheet1")
Run Code Online (Sandbox Code Playgroud)

获取运行时错误“9”:

下标超出范围

问题是我需要这个宏能够在具有不同命名选项卡的多个不同工作簿上使用,并且在很多情况下选项卡将被隐藏,而看似 Sheet1 的实际上是 Sheet3。有没有办法让宏单独在活动工作表上工作?

Par*_*h J 5

是的,您不必对“Sheet1”进行硬编码。相反,您可以执行以下操作:

方法一:声明变量

Dim sName as string
sName = Activesheet.Name
Run Code Online (Sandbox Code Playgroud)

然后您可以在变量 sName 中使用名称,而不是对其进行硬编码。

方法2:可以使用工作表索引

sName = Sheets(1).Name
Run Code Online (Sandbox Code Playgroud)

其中 1 表示工作簿中工作表的索引号。

因此,当工作表名称发生变化时,您可以使用上述两种方法中的任何一种来获取工作表的名称。