Vba Excel VBScript,用于在打印到另一个PDF之前关闭打开的和以前打印的PDF
我正在用一段代码将工作表打印到一个PDF文件中。打开此PDF文件后,如果我尝试从同一excel文件再次打印到PDF,我会收到一个VB错误:“文档未保存”,调试将我带到代码中:Vba Excel VBScript,用于在打印到另一个PDF之前关闭打开的和以前打印的PDF,vba,excel,pdf,vbscript,Vba,Excel,Pdf,Vbscript,我正在用一段代码将工作表打印到一个PDF文件中。打开此PDF文件后,如果我尝试从同一excel文件再次打印到PDF,我会收到一个VB错误:“文档未保存”,调试将我带到代码中: ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, filename:= _ strFilename & " " & wedate_text & " Time", Quality:=xlQualityStandard, _ Include
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, filename:= _
strFilename & " " & wedate_text & " Time", Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
True
以下是代码:
Sub PrintAnadarkoTicketsToPDF()
Worksheets("Cover").Visible = False
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
Application.EnableEvents = False
Dim strFilename As String
Dim rngRange As Range
Dim wedate As Date
Dim wedate_text As String
Set rngRange = Worksheets("Cover").Range("A5")
strFilename = rngRange.Value
wedate = Worksheets("Cover").Range("B24").Value
wedate_text = Format$(wedate, "mm.dd.yyyy")
Dim myArray() As Variant
Dim i As Integer
Dim j As Integer
j = 0
For i = 1 To Sheets.Count
If Sheets(i).Visible = True Then
ReDim Preserve myArray(j)
myArray(j) = i
j = j + 1
End If
Next i
Sheets(myArray).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, filename:= _
strFilename & " " & wedate_text & " Time", Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
True
Worksheets("Cover").Visible = True
Sheets(1).Select
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Application.DisplayStatusBar = True
Application.EnableEvents = True
End Sub
我的问题是:如何在不破坏脚本的情况下打印第二个PDF?我想关闭上一个PDF,或者用不同的文件名创建第二个PDF。谢谢你的建议。
Randy我不确定您为什么希望有一个循环来计算非隐藏图纸的数量。此外,还可以导出该循环中的图纸。这可能会解决您的问题:
For i = 1 To Sheets.Count
If Sheets(i).Visible = True Then
Sheets(i).ExportAsFixedFormat Type:=xlTypePDF, filename:= _
strFilename & Trim(Str(i)) & " " & wedate_text & " Time", Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
True
End If
Next i
还请注意在文件名中添加了工作簿编号,因为它正试图保存到同一个文件。我不确定为什么要使用循环来计算非隐藏工作表的数量。此外,还可以导出该循环中的图纸。这可能会解决您的问题:
For i = 1 To Sheets.Count
If Sheets(i).Visible = True Then
Sheets(i).ExportAsFixedFormat Type:=xlTypePDF, filename:= _
strFilename & Trim(Str(i)) & " " & wedate_text & " Time", Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
True
End If
Next i
另请注意,文件名中添加了工作簿编号,因为它正试图保存到同一文件。您尝试过解决方案吗?我猜您没有提供有效的文件名和扩展名,请提供如下“c:\path\filename.pdf”所示的有效文件名.@Kiran Maroju文件名是通过代码中的单元格引用组装的。您尝试过解决方案吗?我猜您没有提供有效的文件名和扩展名,请提供如下“c:\path\filename.pdf”这样的有效文件名。@Kiran Maroju文件名是通过代码中的单元格引用组装的。我需要将所有工作表打印到一个pdf。这会为每张纸打印单独的PDF。在这种情况下,您可能希望将所有数据放在一张纸上。甚至可以创建新图纸,将数据放入其中,并在将其作为单个文件导出后将其删除。当然,您可以在代码中完成所有这些。如果您在工作表上导出固定格式,那么您将从中获得一个文件。我需要将所有工作表打印到一个PDF。这会为每张纸打印单独的PDF。在这种情况下,您可能希望将所有数据放在一张纸上。甚至可以创建新图纸,将数据放入其中,并在将其作为单个文件导出后将其删除。当然,您可以在代码中完成所有这些。如果在工作表上导出固定格式,则从中得到一个文件。