【问题标题】:How to set loop through sheets listed in setting?如何通过设置中列出的工作表设置循环?
【发布时间】: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,问题不在于ActivateList.Value 是一个整数,因此工作表将其解释为索引,而不是名称。所以我们必须先将其转换为字符串。我能够重现该问题并在下面给出了答案。
  • @AAA:您的答案可能有效,但这并不意味着这是一种好习惯。通常,使用 VBA 时无需激活或选择工作表。我敢肯定这里有“需要”的情况,但这肯定不像。我只是想向 OP 指出,不需要此操作,也不是最佳实践
  • @Zac,这不能解决 OP 的问题。即使 OP 使用 Sheet 引用,他们仍然会收到错误。您首先解决问题,然后指出最佳实践。这是一个骨架代码,所以你不知道 OP 为什么要使用 Activate。正如我在回答中解释的那样,他们遇到的问题是引用工作表。

标签: excel vba


【解决方案1】:

第二次迭代,当您将“.value”添加到列表时是您得到的最接近的...我建议您尝试使用 Sheets(list.value).select 而不是激活。前者从来没有问题,而后者我倾向于将它用于工作簿。

看看能不能解决问题:

将列表调暗为范围 将列表调暗为范围 Set Listy = Sheets("Setting").Range("A2:A3")

对于 Listy 中的每个列表

sheets(List.Value).select '试试这个! 下一个

【讨论】:

  • 如果格式正确,您的答案会更容易理解。
【解决方案2】:

问题是您的范围正在返回整数值。因此,Sheet(index) 调用将 index 解释为工作表的索引号。因此,您实际上是在调用 Sheet(99),而不是调用 `Sheet("99")。由于您的工作簿中没有第 99 张工作表,因此您会收到“下标超出范围”错误。我们需要做的是将您的值转换为字符串。

这是你应该做的:

Dim Listy As Range
Set Listy = Sheets("Setting").Range("A2:A3")

For Each cell In Listy
    Sheets(CStr(cell.Value)).Activate        
Next cell

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2015-10-12
  • 2019-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-22
  • 2021-08-18
  • 1970-01-01
相关资源
最近更新 更多