我以前用过下面的代码,并按预期工作了几次。4小时后,它没有工作。我添加了**MsgBox“文件:“**并确认文件名路径无错误。
Option Explicit
Sub ExportAsPDF()
Dim Folder_Path As String
Dim NameOfWorkbook
NameOfWorkbook = Left(ActiveWorkbook.Name, (InStrRev(ActiveWorkbook.Name, ".", -1, vbTextCompare) - 1))
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Select Folder path"
If .Show = -1 Then Folder_Path = .SelectedItems(1)
End With
If Folder_Path = "" Then Exit Sub
Dim sh As Worksheet
Dim fn As String
For Each sh In ActiveWorkbook.Worksheets
fn = Folder_Path & Application.PathSeparator & NameOfWorkbook & "_" & sh.Name & ".pdf"
MsgBox "File: " & fn
sh.PageSetup.PaperSize = xlPaperA4
sh.PageSetup.LeftMargin = Application.InchesToPoints(0.5)
sh.PageSetup.RightMargin = Application.InchesToPoints(0.5)
sh.PageSetup.TopMargin = Application.InchesToPoints(0.5)
sh.PageSetup.BottomMargin = Application.InchesToPoints(0.5)
sh.PageSetup.HeaderMargin = Application.InchesToPoints(0.5)
sh.PageSetup.FooterMargin = Application.InchesToPoints(0.5)
sh.PageSetup.Orientation = xlPortrait
sh.PageSetup.CenterHorizontally = True
sh.PageSetup.CenterVertically = False
sh.PageSetup.FitToPagesTall = 1
sh.PageSetup.FitToPagesWide = 1
sh.PageSetup.Zoom = False
sh.ExportAsFixedFormat Type:=xlTypePDF, Filename:=fn, Quality:=xlQualityStandard, OpenAfterPublish:=True
Next
MsgBox "Done"
End Sub
有什么我错过了吗?
- 适用于Microsoft 365 MSO的Microsoft® Excel®(版本2211内部版本号16.0.15831.20220)64位 *
2条答案
按热度按时间pcrecxhr1#
如果ActiveWorkbook是新的,并且从未存储过,则工作簿名称是 * 不带 * 任何扩展名的通用名称,例如
Book1
。在这种情况下,InStrRev(ActiveWorkbook.Name, ".", -1, vbTextCompare)
将返回0。因为您嵌套了两个命令,所以此0将作为参数传递给Left
函数,并且Left(Name, 0)
将引发运行时错误5。解决方法:将
InstrRev
的结果写入中间变量并检查它。我的建议是避免嵌套命令,因为如果因为0是无效参数而出现错误,则很难检查到底是什么失败了。获取不带扩展名的文件名的另一种方法是使用
FileSystemObject
-方法GetBaseName
(在Mac上不起作用)ogsagwnx2#
将工作表导出到单个PDF