对帖子中的任何格式错误表示歉意,但这是我第一次使用该网站,而且我不太了解fquestion格式说明。
我在电路板上看到了这个问题,但它并没有完全回答我的问题,但对于那些希望提供帮助的人来说这可能很有用 - excel vba not exporting pagesetup to pdf correctly
我在使用代码创建.pdf输出时,没有导出每个工作表中指定范围的完全相同的问题。导出的内容是每个工作表上的所有内容,因此每个工作表分布在2个或更多页面上。设置每张纸的打印范围以将指定区域打印到1张纸上。
我尝试在上面的链接中调整代码,但它似乎不适用于多张表。
我试图以其未适应形式使用的代码位于
之下Sub ClientPDFOutput()
If Sheets("File Data").Range("FD_FileName") = "" Then
' MsgBox ("Save the file before exporting to a .pdf fomrat"), vbInformation, "Save File"
' Exit Sub
Else
End If
ActiveSheet.Unprotect Password:=strPassword
Range("UI_Status") = "Creating client PDF output - Please wait"
SelectSheets
Application.ScreenUpdating = False
Sheets(arrSheets).Select
strFilename = "Test"
Selection.ExportAsFixedFormat _
Type:=xlTypePDF, _
filename:=ActiveWorkbook.Path & "\" & strFilename & ".pdf", _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=True, _
OpenAfterPublish:=False
Sheets("User Input").Select
Range("UI_Status") = "Client .pdf output created and saved"
ActiveSheet.Protect Password:=strPassword
Application.ScreenUpdating = True
MsgBox ("The client output in .pdf format has been created and saved"), vbInformation, ".pdf Created"
End Sub
和
Sub SelectSheets()
Dim rngSheets As Range
Set rngSheets = Sheets("File Data").Range("D_OutputSheets")
If rngSheets.Count = 1 Then
arrSheets = rngSheets.Value2
Else
arrSheets = Application.Transpose(rngSheets.Value2)
End If
End Sub
TIA
经过一些实验后,我确定每个页面上的打印范围都已关闭,因此请更正。
我还添加了一些代码来选择每张纸的打印范围,然后将它们全部选为纸张阵列的一部分,但是阵列的第一张纸中的打印范围正在所有纸张上重复...所以如果纸张1中的范围是B4:P61,而纸张2的打印范围是B4:M48,则在选择纸张数组时,纸张2选择了B4:P61。
然后打印出选定的范围,这些范围对于纸张1是正确的,但对于其余纸张则是错误的。
当我通过选择所有工作表手动执行此操作时,文件,导出然后导出所有工作表打印范围,以便为什么在记录这些工作表并将其放入例程时会被忽略?
由于
答案 0 :(得分:0)
请尝试更改IgnorePrintAreas
属性。
Selection.ExportAsFixedFormat _
Type:=xlTypePDF, _
filename:=ActiveWorkbook.Path & "\" & strFilename & ".pdf", _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False
答案 1 :(得分:0)
我建议您使用以下内容确保您的页面设置将其修复为单页:
With ActiveSheet.PageSetup
.FitToPagesWide = 1
.FitToPagesTall = 1
End With
删除with语句中的第一行或第二行以符合您的偏好,或同时保留两者。
此外,我发现你有selection.ExportAsFixedFormat
。确保所选区域正确或使用固定范围。您可能还想动态确定最远的行/列,并将其添加到变量PrintRange
。 Getting the actual usedrange。
设置IgnorePrintAreas:=False
Dim PrintRange As Range
Set PrintRange = Range("A1:XX100")
PrintRange.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=Filename, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False
答案 2 :(得分:0)
尝试添加"对于活动工作簿中的每个工作表" (它对我有用):
Sub Extract_pdfs()
Dim wb As Workbook
Dim sh As Worksheet
Set wb = ThisWorkbook
For Each sh In wb.Worksheets
sh.Select
pdf_name = sh.Name & ".pdf"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=ActiveWorkbook.Path & pdf_name, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=True
Next
End Sub
答案 3 :(得分:0)
如果您试图将多张纸上的多个范围打印到一个pdf中,则可以尝试使用并集函数将它们组合在一起,但是我对使用并集没有任何运气,因此我做了更长的方法那。本质上,我创建了一个新页面并将其范围复制到该页面(采用我想要的格式),因此请确保稍后删除该页面,因为这使再次运行宏变得更加容易。
t= 1
ThisWorkbook.Sheets.Add.Name = "Print"
set rowcount = range(tocopy).row.count
Range(tocopy).SpecialCells(xlCellTypeVisible).Copy
With Sheets("Print").Cells(t, 1)
.PasteSpecial xlPasteColumnWidths
.PasteSpecial xlPasteFormats
.PasteSpecial xlPasteValuesAndNumberFormats
End With
t = t + rowcount
'keep doing for all ranges
Sheets("Print").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"Name.pdf", Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True
,然后继续执行此操作,直到页面上具有所有范围,然后将页面导出为pdf。然后删除工作表“打印”。
但是,如果您只是想将它们打印在单独的页面上,则可以尝试
dim printing() as string
printing(1) = "Range1"
printing(2) = "Range2"
for each section in printing
Range(section).ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"Name.pdf", Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True
next section
正如我上面提到的,您可以尝试为其设置一个联合函数(如果您的运气比我好)
dim printing as range
printing = union(range1,range2,range3)
printing.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"Name.pdf", Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True
祝你好运!希望这对您有所帮助,也请注意,由于未经测试,代码可能并不完全正确!