【问题标题】:Apply VBA to Multiple Sheets?将 VBA 应用于多个工作表?
【发布时间】:2021-10-31 03:27:28
【问题描述】:

我正在尝试将以下代码应用于总共 35 张纸中的 26 张。我似乎无法弄清楚。目前,宏设置为应用于所有工作表,但我需要编辑它以排除它不会应用的八个选项卡,或者编辑它以应用到 26 个工作表本身。我确实计划隐藏 26 个选项卡,因为它们会输入摘要表,所以这会影响公式吗?

对于上下文,在每个需要排序的工作表中,B 到 Q 列都有数据,我在 C 列中按股票代码排序(升序)。这里的任何想法将不胜感激。

谢谢!

 Sub SortAllSheets()

  Dim WS As Worksheet

  ActiveSheet.Range("B1:Q1").Select

  Selection.Copy
  On Error Resume Next

  Application.ScreenUpdating = False

  For Each WS In Worksheets

    WS.Range("B2:Q500").Sort Key1:=WS.Columns("C"), Order1:=xlAscending

  Next WS

End Sub

【问题讨论】:

  • 我可能会尝试在工作表名称上使用Select Case
  • 你为什么不分享我们如何识别床单? 9号还是26号?他们有什么共同点?例如,它们可以以子字符串开头、包含或结尾。这是link to my most recent Select Case example
  • 谢谢你。因此,每个工作表都以更广泛的投资账户标识符命名——一个 3 到 7 位的字母代码。在整个摘要表上,我使用一些间接公式来提取两张表中的一张,具体取决于从下拉列表中选择的代码。这 26 个工作表在列方面完全相同,但行数因馆藏和实际工作表标题本身而异。
  • 将 9 个工作表名称(不被处理)或它们的代码名称写入逗号分隔的列表可能是最简单的。能否分享一下列表,以便我发布示例?

标签: excel vba


【解决方案1】:

我可能会做的,尤其是在逻辑变得复杂的情况下,使用正则表达式匹配工作表名称,如果正则表达式不匹配则跳过(反之亦然,以更容易生成模式的为准) :

Set parser = CreateObject("vbscript.regexp")
parser.ignorecase = True
parser.pattern = "your pattern"

For Each WS In Worksheets

  if parser.test(WS.name) then
  
    >> YOUR CODE

  end if

Next

如果您不喜欢 IF 的额外缩进,也可以使用行标签跳过(尽管很多人讨厌 goto):

Set parser = CreateObject("vbscript.regexp")
parser.ignorecase = True
parser.pattern = "your pattern"

For Each WS In Worksheets

  if NOT parser.test(WS.name) then goto skip:
  
  >> YOUR CODE

skip:
Next

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-10
    • 1970-01-01
    • 2019-07-19
    • 2017-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多