我想在多个工作表上运行宏。工作表名为 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 张工作表,您只能获得:
阿乌塔