【发布时间】:2019-07-01 21:25:40
【问题描述】:
我在这里使用提示创建了我的宏,但它不起作用。在我的设置页面上有一个工作表列表,我只需要遍历此处列出的那些工作表。如果我通过其名称声明工作表,则它可以工作。问题是当我尝试使用范围时。
我无法激活列表。在 VBA 中,我可以通过鼠标指针 (99) 查看它的值,但它不起作用。我的姓是 VBA 中的 List2 (99); 99 对用户可见。 (我用的是捷克语的excel 365)
Dim List As Range
Dim Listy As Range
Set Listy = Sheets("Setting").Range("A2:A3")
For Each List In Listy
Sheets("99").Activate ' this is working
Sheets(List).Activate 'this is not working
Sheets(List.Value).Activate 'this is not working
Sheets(List.Name).Activate 'this is not working
'... rest of my code
next list
我希望我可以使用 Listy 范围而不是其名称来激活 Sheet 99。
【问题讨论】:
-
Sheets(List.Value).Activate这应该可以工作,除非该单元格中的名称不是工作表名称。 -
看看为什么我们不应该在 VBA 中使用
Activate和/或Select之类的东西。只需设置您的工作表/单元格引用。您无需激活或选择其中任何一个 -
@Mikku,@Zac,问题不在于
Activate。List.Value是一个整数,因此工作表将其解释为索引,而不是名称。所以我们必须先将其转换为字符串。我能够重现该问题并在下面给出了答案。 -
@AAA:您的答案可能有效,但这并不意味着这是一种好习惯。通常,使用 VBA 时无需激活或选择工作表。我敢肯定这里有“需要”的情况,但这肯定不像。我只是想向 OP 指出,不需要此操作,也不是最佳实践
-
@Zac,这不能解决 OP 的问题。即使 OP 使用 Sheet 引用,他们仍然会收到错误。您首先解决问题,然后指出最佳实践。这是一个骨架代码,所以你不知道 OP 为什么要使用 Activate。正如我在回答中解释的那样,他们遇到的问题是引用工作表。