Notifications
Clear all

Macro para imprimir várias abas com diferentes intervalos

5 Posts
2 Usuários
0 Reactions
955 Visualizações
(@gilbertob)
Posts: 40
Eminent Member
Topic starter
 

Boa tarde,

Depois de muita pesquisa na internet, consegui adaptar um modelo de macro para o meu caso particular:

A macro é a seguinte:

Sub ImprimirVarTH()
        Application.ScreenUpdating = False
        Application.DisplayAlerts = False
        
 Dim ws As Worksheet
 
     For Each ws In ActiveWorkbook.Worksheets
           
            If Trim(ws.Name) <> Trim("Empregador") And _
                Trim(ws.Name) <> Trim("Empregados") And _
                Trim(ws.Name) <> Trim("Verbas") And _
                Trim(ws.Name) <> Trim("TRCT") Then
                PlanName = ws.Name
 
        
            ws.Range("A1:AA53,A103:AA158").PrintOut Copies:=1, Collate:=True
        End If
        
    Next ws
    
    Set ws = Nothing
        Application.ScreenUpdating = True
        Application.DisplayAlerts = True
        MsgBox "Processamento concluído com sucesso.", , "Pronto!"
End Sub

Outra macro semelhante imprime o intervalo: "A1:AA53,A55:AA102".

Teria como, ao invés destas duas macros, deixar apenas uma que imprimisse o intervalo "A1:AA53,A55:AA102", caso o valor da célula Z2 fosse menor que 365, ou que imprimisse o intervalo "A1:AA53,A103:AA158", se o valor fosse maior do que 365.

Tentei colocar mais uma condição If, mas como meu conhecimento de vba é muito limitado, está dando um erro, que falta um for para o next.

Atenciosamente,

Gilberto

 
Postado : 02/01/2017 2:44 pm
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

Gilbertob,

Boa tarde!

Não testei mas... veja se é assim.

Sub ImprimirVarTH()
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    
    Dim ws As Worksheet
    
    For Each ws In ActiveWorkbook.Worksheets
    
        If Trim(ws.Name) <> Trim("Empregador") And _
        Trim(ws.Name) <> Trim("Empregados") And _
        Trim(ws.Name) <> Trim("Verbas") And _
        Trim(ws.Name) <> Trim("TRCT") Then
        PlanName = ws.Name
        
            If Val(ws.Range("Z2").Value) > 365 Then
                 ws.Range("A1:AA53,A103:AA158").PrintOut Copies:=1, Collate:=True
            Else
                 ws.Range("A1:AA53,A55:AA102").PrintOut Copies:=1, Collate:=True
            End If
        End If
    
    Next ws
    
    Set ws = Nothing
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
    MsgBox "Processamento concluído com sucesso.", , "Pronto!"
End Sub

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 02/01/2017 3:03 pm
(@gilbertob)
Posts: 40
Eminent Member
Topic starter
 

Obrigado Wagner, funcionou perfeitamente.

O meu conhecimento de vba é muito reduzido. Me limito a pesquisar na internet para tentar achar algo similar ao que preciso e comparando uma solução com outra vou fazendo as adaptações. A título de aprendizado, no código que postei tem alguma coisa que é desnecessária, que pode ser suprimida?

Att.

Gilberto

 
Postado : 02/01/2017 6:18 pm
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

Gilberto,

Boa tarde!

Bom... seu código está muito bom. Em programação, se pararmos para analisar detalhadamente, sempre há uma maneira de fazer diferente. Todavia, necessariamente, não significa melhoria de ganho de performance. O que quero dizer é que várias formas de fazer a mesma coisa. A priori, não vislumbro problema de performance no seu código.

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 03/01/2017 12:25 pm
(@gilbertob)
Posts: 40
Eminent Member
Topic starter
 

Obrigado Wag

Um grande abraço,

Gilberto

 
Postado : 03/01/2017 3:39 pm