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 eu chego a Z, então as folhas começam como AA, BB, CC ... XX, YY, ZZ, então AAA, BBB, CCC ... XXX, YYY, ZZZ e isto repete todo o caminho até ZZZZZ. Portanto, há 130 folhas nas quais preciso executar a macro. Eu nem tenho certeza de por onde começar isso.

Eu tentei inventar 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.


Bem vindo ao Super Usuário. Nós não somos um serviço de escrita de scripts. Esperamos que os usuários nos digam o que tentaram até agora (incluindo os scripts que estão usando) e onde estão presos, para que possamos ajudar com problemas específicos. As perguntas que apenas solicitam scripts são muito amplas e provavelmente serão colocadas em espera ou fechadas . Por favor, leia Como faço uma boa pergunta? .
DavidPostill

Respostas:


1

Eu acredito que a resposta simples é colocar sua macro em seu MANUAL DE TRABALHO DE MACRO PESSOAL quando você o criar. Dessa forma, ele está disponível não apenas para a pasta de trabalho atual, mas para todas as novas que você criar, não importa quantas planilhas estejam nela.


0

Podemos usar um UDF () para gerar os nomes das folhas 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


obrigado aluno do gary. no "sNewBaseDigits" como faço para percorrer as planilhas. meus lençóis vão de A..BCXYZ, depois AA, ZZ, depois AAA, ZZZ até AAAAA ... ZZZZZ. deixa pra lá, eu vejo agora o que você está fazendo. mas onde eu coloco na minha macro, isso é no sub principal?
DanM

@ DanM Ter minha macro principal chamar sua macro.
Gary's Student
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.