如何在多个工作表上运行宏?

如何在多个工作表上运行宏?

我想在多个工作表上运行宏。工作表名为 A、B、C...X、Y、Z。当我到达 Z 时,工作表以 AA、BB、CC...XX、YY、ZZ 开始,然后是 AAA、BBB、CCC...XXX、YYY、ZZZ,一直重复到 ZZZZZ。所以我需要在 130 个工作表上运行宏。我甚至不知道从哪里开始。

我曾尝试想出一些入门方法,但我对 VBE 还不熟悉,甚至没有这方面的计划。工作表名称位于名为“lookupABC123”的查找表中。运行的宏基本上是从“A”复制一个范围,然后进行一些编辑并将行移动到主表。我让宏在 7 张工作表上运行,但将来可能会扩展到 130 张工作表。

答案1

我认为简单的答案就是在创建宏时将其放入个人宏工作簿中。这样,它不仅适用于当前工作簿,还适用于您创建的任何新工作簿,无论其中有多少工作表。

答案2

我们可以使用UDF()生成工作表名称并循环遍历所需的工作表:

Public Function ConvertBase10(ByVal d As Double) As String
'
'  http://www.freevbcode.com/ShowCode.asp?ID=6604
'
    Dim S As String, tmp As Double, i As Integer, lastI As Integer
    Dim BaseSize As Integer
    Dim sNewBaseDigits As String
    sNewBaseDigits = " ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    BaseSize = Len(sNewBaseDigits)
    Do While Val(d) <> 0
        tmp = d
        i = 0
        Do While tmp >= BaseSize
            i = i + 1
            tmp = tmp / BaseSize
        Loop
        If i <> lastI - 1 And lastI <> 0 Then S = S & String(lastI - i - 1, Left(sNewBaseDigits, 1)) 'get the zero digits inside the number
        tmp = Int(tmp) 'truncate decimals
        S = S + Mid(sNewBaseDigits, tmp + 1, 1)
        d = d - tmp * (BaseSize ^ i)
        lastI = i
    Loop
    S = S & String(i, Left(sNewBaseDigits, 1)) 'get the zero digits at the end of the number
    ConvertBase10 = S
End Function


Sub MAIN()
   Dim SheetName As String

   For i = 1 To 130
      SheetName = ConvertBase10(i)
      MsgBox SheetName
      Sheets(SheetName).Activate
      '
      'process
      '
   Next i
End Sub

顺便说一句,如果您有 1,000,000 张工作表,您只能获得:

阿乌塔

相关内容