Technology Innovation - Blog para Programadores Esta é uma ideia que surgiu para divulgar as possíveis soluções que possam facilitar a vida aos programadores
quarta-feira, setembro 14, 2016
How to export from a Excel Sheet to a PDF file
If you are needing an way to export from a Excel Sheet to a PDF file, you just need to create a macro and assign to a button.
When you press the button you will have a popup asking for the base name of the Report and then you can select a name of sheets to print to pdf.
I use 2 especial sheets to work better the print and reduce the list
FromNowOn -> This worksheet is the markup from where I will considere the sheets to print (before this one all will be ignored in the List)
Off -> If you put "off" in the name of the sheet it will be ignored also.
Sub ExportExcelSheets()
Dim ReportName As String
Dim i As Integer
Dim TopPos As Integer
Dim SheetCount As Integer
Dim PrintDlg As DialogSheet
Dim CurrentSheet As Worksheet
Dim cb As CheckBox
Dim myReportType As Variant
Dim intPos As Integer
Dim intStartPos As Integer
Dim blnFirstAdded As Boolean
blnFirstAdded = False
Dim ReleaseName As String
ReleaseName = ThisWorkbook.Sheets("Macros").Range("C5")
Dim intIndexSheet As Integer
intIndexSheet = 0
Dim strIndexStr1 As String
Dim strIndexStr2 As String
intStartPos = -1
ReportName = "Testing Status for "
Application.ScreenUpdating = False
myReportType = InputBox("Insert Report Type", "Report Type", "Release " & ReleaseName)
' Check for protected workbook
If ActiveWorkbook.ProtectStructure Then
MsgBox "Workbook is protected.", vbCritical
Exit Sub
End If
' Add a temporary dialog sheet
Set CurrentSheet = ActiveSheet
Set PrintDlg = ActiveWorkbook.DialogSheets.Add
SheetCount = 0
' Add the checkboxes
TopPos = 40
For i = 1 To ActiveWorkbook.Worksheets.Count
Set CurrentSheet = ActiveWorkbook.Worksheets(i)
' Validate if the string "off" is present
intPos = -1
intPos = InStr(1, UCase(CurrentSheet.Name), UCase("OFF"), vbTextCompare)
' Defining the starting point
If InStr(1, UCase(CurrentSheet.Name), UCase("FromNowOn"), vbTextCompare) > 0 Then
intStartPos = CurrentSheet.Index()
End If
' Skip hidden sheets
If CurrentSheet.Visible And intPos = 0 And intStartPos > -1 Then
SheetCount = SheetCount + 1
PrintDlg.CheckBoxes.Add 78, TopPos, 150, 16.5
'PrintDlg.CheckBoxes(SheetCount).Text = CurrentSheet.Index & " - " & CurrentSheet.Name
PrintDlg.CheckBoxes(SheetCount).Text = CurrentSheet.Name
PrintDlg.CheckBoxes(SheetCount).Value = xlOn
TopPos = TopPos + 13
End If
Next i
' PPI: Put in the first sheet for export
Set CurrentSheet = ActiveWorkbook.Worksheets(intStartPos)
' Move the OK and Cancel buttons
PrintDlg.Buttons.Left = 240
' Set dialog height, width, and caption
With PrintDlg.DialogFrame
.Height = Application.Max _
(68, PrintDlg.DialogFrame.Top + TopPos - 34)
.Width = 230
.Caption = "Select sheets to print"
End With
' Change tab order of OK and Cancel buttons
' so the 1st option button will have the focus
PrintDlg.Buttons("Button 2").BringToFront
PrintDlg.Buttons("Button 3").BringToFront
' ******************************
' * Export Process
' ******************************
' Display the dialog box
CurrentSheet.Activate
Application.ScreenUpdating = True
Dim arrSheets() As String
Dim intArrPos As Integer
intArrPos = 1
ReDim arrSheets(40)
intArrPos = 0
If SheetCount <> 0 Then
' Inicia o dialog para validar as sheets a imprimir
If PrintDlg.Show Then
For Each cb In PrintDlg.CheckBoxes
If cb.Value = xlOn Then
' Array de Sheets selecionadas
arrSheets(intArrPos) = cb.Caption
intArrPos = intArrPos + 1
If (Not blnFirstAdded) Then
ThisWorkbook.Sheets(cb.Caption).Select (False)
blnFirstAdded = True
Else
ThisWorkbook.Sheets(cb.Caption).Select (False)
End If
End If
Next cb
Dim intMaxArrSheetsSelected As Integer
intMaxArrSheetsSelected = intArrPos - 1
Dim arrSheetsSelected() As String
ReDim arrSheetsSelected(intMaxArrSheetsSelected)
For intArrPos = 0 To intMaxArrSheetsSelected
arrSheetsSelected(intArrPos) = arrSheets(intArrPos)
Next intArrPos
ThisWorkbook.Worksheets(arrSheetsSelected).Select
' PPI: For export selected
With ActiveSheet
.ExportAsFixedFormat Type:=xlTypePDF, Filename:=ThisWorkbook.Path & "\" & ReportName & myReportType & " - Week (" & Format(Now(), "ww") & ") " & _
Format(Now(), "ddmmyy") & " v" & Format(Now(), "hhmmss") & ".pdf", Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, OpenAfterPublish:=True
End With
End If
Else
MsgBox "Não existe nenhuma sheet."
End If
ThisWorkbook.Sheets(2).Activate
' Delete temporary dialog sheet (without a warning)
Application.DisplayAlerts = False
PrintDlg.Delete
End Sub
Subscrever:
Enviar feedback (Atom)
Sem comentários:
Enviar um comentário