Я хочу запустить макрос на нескольких листах. Листы названы 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 листов.

2 ответа2

1

Я полагаю, что простой ответ заключается в том, чтобы поместить ваш макрос в вашу ЛИЧНУЮ РАБОТУ С МАКРОНОМ, когда вы его создадите. Таким образом, он доступен не только для текущей рабочей книги, но и для любых новых, которые вы создаете, независимо от того, сколько рабочих листов в ней.

0

Мы можем использовать 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 рабочих листов, вы могли получить только:

AWUTA

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .