Notifications
Clear all

Macro para ajustar área de impressão

16 Posts
1 Usuários
0 Reactions
5,205 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Prezados, boa noite.

Gostaria de saber se alguém pode me ajudar (mais uma vez). Criei uma planilha e apliquei a Estrutura de Tópicos. No normal cada item inclui 5 linhas e aplicando a estrutura ela oculta 3 das 5, ou seja, ficam apenas 2 para cada item. Daí tive a fabulosa ideia de gravar a macro pra facilitar a coisa - funcionou. O problema é que a planilha contempla 97 itens e, geralmente, não utilizarei os 97 itens. Traduzindo: se, por exemplo, eu excluir 10 itens (50 linhas) a macro retornará erro.

Basicamente, o que preciso é algum código de variável que, se a macro não encontrar as determinadas ranges prossiga para o próximo passo, até concluir.

Na realidade criei outra macro, que faz com que a estrutura de tópico volte ao normal (5 linhas por item).

Abaixo seguem as duas macros:

Sub Ocultar()
'
' Ocultar Macro
'
' Atalho do teclado: Ctrl+Shift+O
'
    ActiveSheet.Outline.ShowLevels RowLevels:=1
    ActiveWindow.View = xlPageBreakPreview
    ActiveWindow.SmallScroll Down:=18
    Set ActiveSheet.HPageBreaks(1).Location = Range("A59")
    ActiveWindow.SmallScroll Down:=21
    Set ActiveSheet.HPageBreaks(2).Location = Range("A122")
    ActiveWindow.SmallScroll Down:=18
    Set ActiveSheet.HPageBreaks(3).Location = Range("A182")
    ActiveWindow.SmallScroll Down:=27
    Set ActiveSheet.HPageBreaks(4).Location = Range("A239")
    ActiveWindow.SmallScroll Down:=12
    Set ActiveSheet.HPageBreaks(5).Location = Range("A299")
    ActiveWindow.SmallScroll Down:=21
    Set ActiveSheet.HPageBreaks(6).Location = Range("A362")
    ActiveWindow.SmallScroll Down:=24
    Set ActiveSheet.HPageBreaks(7).Location = Range("A422")
    ActiveWindow.SmallScroll Down:=9
    Set ActiveSheet.HPageBreaks(8).Location = Range("A482")
    ActiveWindow.SmallScroll Down:=18
    ActiveSheet.HPageBreaks(9).DragOff Direction:=xlDown, RegionIndex:=1
    With ActiveSheet.PageSetup
        .Zoom = 70
    End With
    With ActiveSheet
    ViewMode = ActiveWindow.View
    ActiveWindow.View = xlNormalView
    End With
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowFormattingRows:=True
End Sub
Sub Exibir()
'
' Exibir Macro
'
' Atalho do teclado: Ctrl+Shift+I
'
    ActiveSheet.Outline.ShowLevels RowLevels:=2
    ActiveWindow.View = xlPageBreakPreview
    ActiveWindow.SmallScroll Down:=45
    Set ActiveSheet.HPageBreaks(2).Location = Range("A77")
    ActiveWindow.SmallScroll Down:=33
    Set ActiveSheet.HPageBreaks(3).Location = Range("A112")
    ActiveWindow.SmallScroll Down:=15
    Set ActiveSheet.HPageBreaks(4).Location = Range("A147")
    ActiveWindow.SmallScroll Down:=66
    Set ActiveSheet.HPageBreaks(6).Location = Range("A217")
    ActiveWindow.SmallScroll Down:=27
    Set ActiveSheet.HPageBreaks(7).Location = Range("A252")
    ActiveWindow.SmallScroll Down:=36
    Set ActiveSheet.HPageBreaks(8).Location = Range("A287")
    ActiveWindow.SmallScroll Down:=15
    Set ActiveSheet.HPageBreaks(9).Location = Range("A322")
    ActiveWindow.SmallScroll Down:=42
    Set ActiveSheet.HPageBreaks(10).Location = Range("A357")
    ActiveWindow.SmallScroll Down:=12
    Set ActiveSheet.HPageBreaks(11).Location = Range("A392")
    ActiveWindow.SmallScroll Down:=33
    Set ActiveSheet.HPageBreaks(12).Location = Range("A427")
    ActiveWindow.SmallScroll Down:=36
    Set ActiveSheet.HPageBreaks(13).Location = Range("A462")
    ActiveWindow.SmallScroll Down:=24
    Set ActiveSheet.HPageBreaks(14).Location = Range("A497")
    ActiveWindow.SmallScroll Down:=12
    With ActiveSheet.PageSetup
        .Zoom = 70
       End With
    With ActiveSheet
    ViewMode = ActiveWindow.View
    ActiveWindow.View = xlNormalView
    End With
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowFormattingRows:=True
End Sub

Mais uma coisa: preciso que o zoom fique em 70%, por isso incluí na macro. Conto mais uma vez com a ajuda e apoio de vocês.

Grato,

 
Postado : 02/02/2012 4:09 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Bom dia, Mauro.

Na realidade a PlanB serve apenas como um relatório resumido; PlanA é onde se inserem os dados; PlanC seria o resultado final, a proposta em si, que depende quase que exclusivamente de PlanA. A rotina que exclui as linhas inutilizadas em PlanA precisa fazer o mesmo em PlanB de forma automática, bem como em PlanC.

Quando identifiquei o problema de "#REF!" em PlanC nos casos em que se pula uma linha em PlanA notei que em PlanB isso não ocorre.

Também identifiquei o problema no caso de haver apenas dois itens, onde PlanC fica desconfigurado (diferente se for apenas 1 item, 3 ou mais).

Quando você diz que a macro aparenta estar poluída devo concordar com você, já que estou dando os primeiros passos no VBA e muito do que tem aí é fruto da colaboração de várias pessoas ou do que consegui descobrir fussando apostilas e fóruns, mas agradeço se puder ajudar com as questões acima (ou outro membro).

 
Postado : 29/02/2012 6:16 am
Página 2 / 2