Como executar uma macro em várias planilhas?

0

Eu quero executar uma macro em várias planilhas. As folhas são nomeadas A, B, C ... X, Y, Z. quando chego a Z, entao as folhas começam como AA, BB, CC ... XX, AA, ZZ, entao AAA, BBB, CCC ... XXX, YYY, ZZZ e isto repete todo o caminho ate ZZZZZ. Portanto, há 130 folhas nas quais preciso executar a macro. Eu nem tenho certeza de por onde começar isso.

Eu tentei criar algo para começar, mas eu sou novo no VBE e nem sequer tenho um plano de jogo sobre isso. Os nomes da planilha estão em uma tabela de pesquisa chamada "lookupABC123". A macro que executa basicamente copia de "A" um intervalo e, em seguida, faz algumas edições e movendo linhas para uma planilha mestre. Eu tenho a macro para executar em 7 folhas, mas no futuro, poderia ir para 130 folhas.

    
por DanM 23.11.2015 / 14:09

2 respostas

1

Acredito que a resposta simples é colocar sua macro no seu MANUAL DE TRABALHO DE MACRO PESSOAL quando você a criar. Dessa forma, ele está disponível não apenas para a pasta de trabalho atual, mas para qualquer nova que você crie, não importa quantas planilhas estejam nela.

    
por 01.08.2016 / 18:06
0

Podemos usar um UDF () para gerar os nomes das planilhas e fazer um loop sobre as planilhas necessárias:

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

A propósito, se você tivesse 1.000.000 de planilhas, só conseguiria:

AWUTA

    
por 23.11.2015 / 15:04