Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
  • Avatar do usuário
#47605
Bom dia,

Como faço para identificar o nome de uma planilha e executar a rotina em toda planilha que tiver esse nome? E se no caso a planilha tiver o nome de numero, eu precisar que ela faça uma sequencia exata..

Exemplo: planilha de 1 a 15 executar rotina X.. Planilha 17 a 25 executar rotina Y... não nessa ordem mas a ideia é essa.. selecionar as planilhas com os nomes de 1 a 15 ou 17 a 25 e fazer a rotina.
#47610
Olá rit,

Em linhas gerais, você usa rotina abaixo para percorrer as planilhas e obter seus nomes. Depois, usa instruções VB pra ver se naquela planilha o procedimento será ou não executado, e abre a pasta de trabalho, executa, salva e fecha, se for o caso.

Se mandar a pasta de trabalho, o procedimento e o critério de seleção das planilhas, posso desenvolver um pouco mais.
Código: Selecionar todos
For Each plan In ThisWorkbook.Sheets
    MsgBox plan.Name
Next
Jimmy San Juan
#47613
Preciso que ele faça a rotina na aba 1,2,3,4 menos na original, se fosse para fazer em todas seria mais facil mas fizeram a planilha dessa forma.. então preciso que seja executada apenas nas abas que tem numeração.
Você não está autorizado a ver ou baixar esse anexo.
#47614
Veja se ajuda
Código: Selecionar todos
Dim vrtPlanGrupo1 as Variant, vrtPlanGrupo2 as Variant
Dim bytNumPlan  as Byte
Dim wshPlan as Worksheet

vrtPlanGrupo1 = Array(1,5,7,8)
vrtPlanGrupo2 = Array(2,3,4,6)

for each wshPlan in ThisWorkBook.Worksheets
      for bytNumPLan = 0 to ubound(vrtPlanGrupo1)
            if wshPlan.Name = vrtPlanGrupo1(bytNumPLan) then RotinaX
       next bytNumPlan

      for bytNumPLan = 0 to ubound(vrtPlanGrupo2)
            if wshPlan.Name = vrtPlanGrupo2(bytNumPLan) then RotinaY
       next bytNumPlan
next wshPlan
#47615
Funcionou obrigado! tipo quando é uma quantidade alta de palnilhas, sabe como eu faço pra ficar mais rapido?
demora em torno de 10 minutos para rodar em todas as planilhas.

Eu havia feito para selecionar todas as abas e fazer a rotina mas dessa forma não tinha funcionado... ali no array tem como eu selecionar varias de uma vez como se eu tivesse apertado o ctrl ? e assim fazer a rotina em uma planilha e o excel entender que estou fazendo em todas as outras?
#47617
Veja se melhora um pouco.
Código: Selecionar todos
Dim vrtPlanGrupo1 As Variant, vrtPlanGrupo2 As Variant
Dim bytNumPlan  As Byte, bytCon1 As Byte, bytCont2 As Byte
Dim wshPlan As Worksheet

vrtPlanGrupo1 = Array(1, 5, 7, 8)
vrtPlanGrupo2 = Array(2, 3, 4, 6)

For Each wshPlan In ThisWorkbook.Worksheets
    For bytNumPlan = 0 To UBound(vrtPlanGrupo1)
        If wshPlan.Name = vrtPlanGrupo1(bytNumPlan) And bytCont1 < (UBound(vrtPlanGrupo1)+1) Then
            RotinaX
            bytCont1 = bytCont1 + 1
        End If
    Next bytNumPlan

    For bytNumPlan = 0 To UBound(vrtPlanGrupo2)
        If wshPlan.Name = vrtPlanGrupo2(bytNumPlan) And bytCont2 < (UBound(vrtPlanGrupo2)+1) Then
            RotinaY
            bytCont2 = bytCont2 + 1
        End If
    Next bytNumPlan
Next wshPlan
#47618
Corrigindo
Código: Selecionar todos
Dim vrtPlanGrupo1 As Variant, vrtPlanGrupo2 As Variant
Dim bytNumPlan  As Byte, bytCon1 As Byte, bytCont2 As Byte
Dim wshPlan As Worksheet

vrtPlanGrupo1 = Array(1, 5, 7, 8)
vrtPlanGrupo2 = Array(2, 3, 4, 6)

For Each wshPlan In ThisWorkbook.Worksheets
    If bytCont1 < (UBound(vrtPlanGrupo1) + 1) Then
        For bytNumPlan = 0 To UBound(vrtPlanGrupo1)
            If wshPlan.Name = vrtPlanGrupo1(bytNumPlan) Then
                RotinaX
                bytCont1 = bytCont1 + 1
            End If
        Next bytNumPlan
    End If
    If bytCont2 < (UBound(vrtPlanGrupo2) + 1) Then
        For bytNumPlan = 0 To UBound(vrtPlanGrupo2)
            If wshPlan.Name = vrtPlanGrupo2(bytNumPlan) Then
                RotinaY
                bytCont2 = bytCont2 + 1
            End If
        Next bytNumPlan
    End If
Next wshPlan
#47621
O que as rotinas X e Y fazem? Qto tempo demora uma execução delas? Será que não daria para otimizá-las?
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord