I have a worksheet that has 160 pages in it. One set of data could have 3 pages followed by a horizontal page breaks. I am trying to figure out how to make a separate PDF after each horizontal page break and name it as the string in cell A (it is the same name down) of that page break.
This is where I am at with the export to pdf, missing the above.
Sub Print_PDF()
Dim Awb As Workbook
Dim Snr As Integer
Dim ws As Worksheet
Set Awb = ActiveWorkbook
For Each ws In Awb.Sheets
If ws.Visible = xlSheetVisible Then
'Sheets(ws.Name).Copy
Awb.Sheets(ws.Name).Copy
'Sheets(ws.Name).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, filename:= _
Awb.Path & "\" & Awb.Sheets(ws.Name).Name & ".pdf", _
Quality:=xlQualityStandard, IncludeDocProperties:=True, _
IgnorePrintAreas:=False, OpenAfterPublish:=False
ActiveWindow.Close False
End If
Next ws
End Sub
Are you saying you have a workbook with 160 worksheets in it? Or a workbook with 1 worksheet in it with 160 sets of data on the one sheet?
Related
Hiii
I wrote a code to export sheets from one workbook to an other workbook and then convert it in pdf, but I have a lot of blank pages (maybe because of hidden formula or I don't know.
If you have any idea for what to add to my code in order to have a decent file it would be very appreciated.
Workbooks.Open FileName:="C:\Users\User\Documents\Tests Salome\dailypdf.xlsx"
Dim wbto2 As Workbook: Set wbto2 = Workbooks("dailypdf.xlsx")
wb.Activate
For Each sht In Sheets
If sht.Name <> "USD" And sht.Name <> "Balance" Then
Else
sht.Copy Before:=wbto2.Sheets(wbto2.Sheets.Count)
Rows("140:351").EntireRow.Delete '(I tried to delete the hidden rows)
End If
Debug.Print sht.Name
Next
wbto2.Activate
Application.DisplayAlerts = False
Sheets("Sheet1").Delete
Application.DisplayAlerts = True
FileName = Create_PDF(Source:=wbto2, _
FixedFilePathName:=iFile, _
OverwriteIfFileExist:=True, _
OpenPDFAfterPublish:=False)
The code functions but the result does not satisfy me because of the blank pages..
you can try any option below
1.Delete all unwanted rows before saving as PDF.
2.Set Print area
3.try to save excel range as PDF directly
'Enter Worksheet name, range Address, PDF file path and name
Sheets("Sheet Name").Range("A1:D50").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"C:\Temp\PDF_name.pdf", Quality:= _
xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
OpenAfterPublish:=True
Have worked to copy a range of cells as picture to a seperate worksheet here. The range of cells automatically populate based on self selection on another worksheet - so this effectively builds a series of images intended to be and indicator pack.
Have now written something to export to PDF - the print area uses the offset function depending on the number of indicators selected.
But the export to PDF runs but does not pick up the pictures - can you help?
Sub printPDFSave()
Dim rng As Range
Dim fPathFile As Variant
Set rng = [Destination]
fPathFile = Application.GetSaveAsFilename(filefilter:="PDF Files (*.pdf), *.pdf")
If fPathFile <> False Then
rng.ExportAsFixedFormat Type:=xlTypePDF, Filename:=fPathFile, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
End If
End Sub
please try the below..we suppose that images are in sheet2
Option Explicit
Sub printPDFSave()
Dim rng As Range
Dim fPathFile As Variant
Dim sh As Shape
Dim ShRow As Long
For Each sh In Sheet2.Shapes
ShRow = sh.BottomRightCell.Row
Nex
Set rng = Sheet2.Range("A1:K" & ShRow)
fPathFile = Application.GetSaveAsFilename(filefilter:="PDF Files (*.pdf), *.pdf")
If fPathFile <> False Then
rng.ExportAsFixedFormat Type:=xlTypePDF, Filename:=fPathFile, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
End If
End Sub
I created a VBA macro to export specific sheets of a workbook to a PDF. Simple enough. The problem that I am experiencing is that my code only selects part of Sheet4, so in my PDF part of the sheet is missing.
Sheet4 contains data in range A1:W80. However, when running the code below only the range A1:W75 is selected for printing. I have confirmed my PrintArea contains the entire page. Everything even looks great when printing.
I have searched endlessly for a solution, with no success. Could this be a page-layout setting issue? How can I ensure I am selecting the entire sheet, instead of only part of it, when exporting to PDF?
Here is my code:
Sub SaveReportPDF()
Dim filepath As String
filepath = "ABC"
ThisWorkbook.Sheets(Array("Sheet1", "Sheet2", "Sheet3", "Sheet4")).Select
Selection.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=filepath, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False
End Sub
As good practise, you can set your used range of each sheet as the print area, and fit it to the page, using the following sub:
Sub ScaleForPrinting()
Dim sh As Worksheet
' Stop PrintCommunication for speed
Application.PrintCommunication = False
' Cycle through each sheet
For Each sh In ThisWorkbook.Sheets(Array("Sheet1", "Sheet2", "Sheet3", "Sheet4"))
' Set print area to used range of sheet
sh.PageSetup.PrintArea = sh.UsedRange
' Remove zoom, scale sheet to fit 1 page
With sh.PageSetup
.CenterHorizontally = True
.CenterVertically = True
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
End With
Next sh
' Enable PrintCommunication to apply settings
Application.PrintCommunication = True
End Sub
Then you will want to use the ActiveSheet object after selecting, rather than the Selection object. This is perhaps counter-intuitive, but you want to print the sheets not what you've selected in the sheets.
So:
ScaleForPrinting
ThisWorkbook.Sheets(Array("Sheet1", "Sheet2", "Sheet3", "Sheet4")).Select
ActiveSheet.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=filepath, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False
' Deselect sheets to avoid nasty multiple sheet accidental editing!
ThisWorkbook.Sheets("Sheet1").Select
The purpose of this macro is to select each item in a drop down data validation list, update the sheet and then save the sheet as a new workbook. I get the error "Object required" for the block of code after ws.SaveAs. Can anyone see the problem, as I cannot :/
Sub Create_excel_sheets()
Dim strValidationRange As String
Dim rngValidation As Range
Dim rngDepartment As Range
Dim ws As Worksheet
strValidationRange = Range("AD5").Validation.Formula1
Set rngValidation = Range(strValidationRange)
For Each rngDepartment In rngValidation.Cells
Range("AD5").Value = rngDepartment.Value
ActiveSheet.Calculate
Set ws = ActiveSheet
ws.SaveAs _
FileFormat:=52, _
Filename:="C:\Test\" & rngDepartment.Value.xlsx, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False
Next
End Sub
It seems that you are using the parameters for a Worksheet.ExportAsFixedFormat Method inside a Worksheet.SaveAs method.
Additionally, the filename:= string concatenation is a little wonky with & rngDepartment.Value.xlsx. Best to simply leave off the file extension and allow the FileFormat:= parameter to supply the correct one. In this case, the XlFileFormat Enumeration you chose (e.g. 52) is for xlOpenXMLWorkbookMacroEnabled but you seem to be trying to append .xlsx on the end.
ws.SaveAs FileFormat:=xlOpenXMLWorkbookMacroEnabled, _
Filename:="C:\Test\" & rngDepartment.Value '<~~no extension
I'm not sure if you were trying to go with .SaveAs or .ExportAsFixedFormat. I've chosen a simple .SaveAs for demonstration
I am looking to put together a program simply
It reads a line in excel A1:E1
If A1 has a value it moves to B1 if B1 has a value it moves to C1 etc.
Then it stops on the last cell with a value.
Then it saves the file based on the cell value.
I ended up with this code.
Sub NamePDF()
Dim fp As String
Dim wb As Workbook
fp = "C:\Users\mdowney\Desktop\TestFolder\" & Cells(1, Columns.Count).End(xlToLeft)
Set wb = ActiveWorkbook
wb.ExportAsFixedFormat Type:=xlTypePDF, Filename:=fp, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
End Sub
try something like
activeworkbook.saveas "C:\temp\" & cells(1,columns.count).end(xltoleft) & ".xlsx"
This will not save the macros with the workbook though.