VBA Excel - Imprimindo planilhas selecionadas ou não.


excel-header.jpg

Olá pessoal!

Nossas planilhas, e neste caso refiro-me as inúmeras 'sheets' ou pastas dentro de uma única planilha (workbook). Com o passar do tempo, se não tomarmos cuidado, acabam sendo compostas por diversas interfaces diferentes. Algumas com visões consolidadas e outras detalhadas (drilldown).

Independentemente de quão amplo sejam os nossos workbooks, invariavelmente precisaremos imprimir o seu conteúdo, geralmente representados por Dashboards & Scorecards, ou Cockpits

Os três exemplos abaixo visam permitir que possa dar diversas opções de impressão aos seus usuários, e obviamente a você mesmo.

1º EXEMPLO

Este código imprime as todas as planilhas selecionadas, veja o código do procedimento inPrintSelectedsSheets mostrado abaixo.



Sub inPrintSelectedSheets (Preview As Boolean)
    Dim N As Long
    Dim M As Long
    Dim Arr() As String
    
    With ActiveWindow.SelectedSheets
        ReDim Arr(1 To .Count)

        For N = 1 To .Count
            Let Arr(N) = .Item(N).Name
        Next N

    End With

    Sheets(Arr).PrintOut Preview:=True
End Sub

2º EXEMPLO
Já este código a seguir imprime apenas as planilhas não selecionadas através do procedimento inPrintUnSelectedSheets:


Sub inPrintUnselectedSheets (Preview As Boolean)

    Dim WS As Object

    Dim N As Long

    Dim Arr() As String

    Dim K As Long

    Dim B As Boolean

    

    ReDim Arr(1 To ActiveWorkbook.Sheets.Count)


    For Each WS In ActiveWorkbook.Sheets

        Let B = True


        With ActiveWindow.SelectedSheets


        For N = 1 To .Count

            Let B = True


            If StrComp(WS.Name, .Item(N).Name, vbTextCompare) = 0 Then

                Let B = False


                Exit For

            End If


        Next N


        If B = True Then

            Let K = K + 1

            Let Arr(K) = WS.Name

        End If


        End With

    Next WS


    If K > 0 Then

        ReDim Preserve Arr(1 To K)

        ActiveWorkbook.Sheets(Arr).PrintOut Preview:=Preview

    End If

End Sub


3º EXEMPLO
O código a seguir exclue as planilhas informadas na seleção, imprimindo todas as demais com o procedimento inPrintSheetsExclude. Use assim: inPrintSheetsExclude false, "Sheet2", "Sheet4", "Sheet6". Perceba que todas as sheets serão impressas, excetuando-se as sheets: Sheet2, Sheet4, e Sheet6, veja o código:



Sub inPrintSheetsExclude (Preview As Boolean, ParamArray Excludes() As Variant)


    Dim Arr() As String

    Dim B As Boolean

    Dim N As Long

    Dim M As Long

    Dim K As Long

    

    ReDim Arr(1 To Sheets.Count)


    For N = 1 To Sheets.Count

        Let B = True


        For M = LBound(Excludes) To UBound(Excludes)


            If StrComp(Sheets(N).Name, Excludes(M), vbTextCompare) = 0 Then

                Let B = False


                Exit For

            End If


        Next M


        If B = True Then

            Let K = K + 1

            Let Arr(K) = Sheets(N).Name

        End If


    Next N


    If K > 0 Then

        ReDim Preserve Arr(1 To K)


        Sheets(Arr).PrintOut Preview:=Preview

    End If


End Sub


Fonte: C Person




Tags: Bernardes, Microsoft, MOS, MS, Office, Office 2007, Office 2010, automation, automação, print, various print, simultaneously print, multi print


André Luiz Bernardes
A&A® - Work smart, not hard.

Nenhum comentário:

Postar um comentário

diHITT - Notícias