Vba Excel宏-导出为PDF

Vba Excel宏-导出为PDF,vba,excel,pdf,Vba,Excel,Pdf,我有一本工作手册,其中有许多宏,可以在保存工作簿的同一位置将各种工作表导出为PDF 我的问题是,如果工作簿保存在桌面上的一个文件夹中,那么PDF就可以正常生成 当工作簿保存在网络位置时,PDF不会生成。下面是宏的示例: Sub PDF_CStmtP() Application.ScreenUpdating = False ThisWorkbook.Sheets(Array("C Stmt - P")).Select pdfname = fileSaveName

我有一本工作手册,其中有许多宏,可以在保存工作簿的同一位置将各种工作表导出为PDF

我的问题是,如果工作簿保存在桌面上的一个文件夹中,那么PDF就可以正常生成

当工作簿保存在网络位置时,PDF不会生成。下面是宏的示例:

Sub PDF_CStmtP()

    Application.ScreenUpdating = False

    ThisWorkbook.Sheets(Array("C Stmt - P")).Select

    pdfname = fileSaveName
    ChDir ActiveWorkbook.Path & "\"
    fileSaveName = "Closing Statement (Purchase)"

     ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        fileSaveName _
        , Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
        :=False, OpenAfterPublish:=False

    Application.ScreenUpdating = True

    ActiveWorkbook.Sheets("Main Menu").Activate

    MsgBox "File Saved " & " " & fileSaveName
End Sub

您的问题是ChDir命令,请参见此处以获取解释:

其中最重要的部分是“CHDIR语句允许您更改当前驱动器上的当前目录。如果需要更改驱动器,请先尝试使用CHDRIVE语句。”

当您试图保存到网络驱动器时,您正在将驱动器号从C:\更改为网络驱动器映射到的任何位置,在我的例子中,它是U:\

代码的简单修复方法是将路径从ChDir移动到文件名中,因此代码应该如下所示:

Sub PDF_CStmtP()

Application.ScreenUpdating = False

ThisWorkbook.Sheets(Array("C Stmt - P")).Select

pdfname = fileSaveName
'ChDir ActiveWorkbook.Path & "\"
fileSaveName = ActiveWorkbook.Path & "\" & "Closing Statement (Purchase)"

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= fileSaveName, _ 
Quality:=xlQualityStandard, IncludeDocProperties:=True, _ 
IgnorePrintAreas:=False, OpenAfterPublish:=False

Application.ScreenUpdating = True

ActiveWorkbook.Sheets("Main Menu").Activate

MsgBox "File Saved " & " " & fileSaveName
End Sub
您还可以进行一些其他编辑来清理它,但这将解决当前的问题

**根据对消息框的评论,您可以将代码更改为:

Sub PDF_CStmtP()

Application.ScreenUpdating = False

ThisWorkbook.Sheets(Array("C Stmt - P")).Select

pdfname = "Closing Statement (Purchase)"
'ChDir ActiveWorkbook.Path & "\"
fileSaveName = ActiveWorkbook.Path & "\" & pdfname

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= fileSaveName, _ 
Quality:=xlQualityStandard, IncludeDocProperties:=True, _ 
IgnorePrintAreas:=False, OpenAfterPublish:=False

Application.ScreenUpdating = True

ActiveWorkbook.Sheets("Main Menu").Activate

MsgBox "File Saved " & " " & pdfname
End Sub

仅供参考,
pdfname
(您从未使用过)将为空/空白,因为您在
fileSaveName
给定值之前定义了它。而且,没有错误,对吗?作为测试,尝试将
fileSaveName
更改为
“K:\Closing Statement(Purchase)”
(假设
K:\
是一个网络文件夹)。您可能需要在那里传递完整路径。我正试图避免这种情况,因为我打开了一个启用宏的模板,然后将其保存为启用宏的工作簿,保存在我们处理的每个文件的不同位置。因此,路径每次都会改变。(很高兴认识你蝙蝠侠)是的,我知道它每次都会改变-这只是一个快速检查,看看问题是与文件名,还是其他什么。如果您将路径直接放在文件名中,但它仍然没有保存到您期望的位置,那么它是另一种情况。如果它是节省,那么它只是一个问题,添加一行或两行,包括完整的路径。我给它一个机会!感谢它的工作,它保存在正确的位置。这工作,并解决了问题,有点笨重的消息框有整个文件路径,但至少它工作。我会尝试一下,现在我有解决方案,我有大量的宏工作,没有足够的时间在一天。谢谢你们的帮助,我会告诉你们事情的进展。