Views

Histats

Vitrine

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: André Luiz 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.

LinkWithinBrazilVBAExcelSpecialist

Related Posts Plugin for WordPress, Blogger...