【问题标题】:Excel macro - Export to PDFExcel 宏 - 导出为 PDF
【发布时间】:2017-12-12 04:22:19
【问题描述】:

我有一个工作簿,其中包含许多宏,可以在保存工作簿的同一位置将各种工作表导出为 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

【问题讨论】:

  • 仅供参考,pdfname(您从不使用)将为空/空白,因为您在 fileSaveName 被赋予值之前定义了它。另外,没有错误对吗?作为测试,尝试将fileSaveName 更改为"K:\Closing Statement (Purchase)"(假设K:\ 是一个网络文件夹)。您可能必须在那里传递完整路径。
  • 我试图避免这种情况,因为我打开了一个启用宏的模板,然后为我们处理的每个文件在不同位置保存为启用宏的工作簿。所以路径每次都会改变。 (很高兴见到你蝙蝠侠)
  • 是的,我知道它每次都会改变 - 这只是快速检查问题是否与文件名或其他问题有关。如果您将路径直接放在文件名中,但它仍然没有保存在您期望的位置,那么它就是另外一回事。如果它正在保存,那么只需添加一两行即可包含完整路径。
  • 我试试看!谢谢
  • 成功了,它保存在正确的位置。

标签: vba excel pdf


【解决方案1】:

您的问题是 ChDir 命令,请参阅此处了解说明:https://www.techonthenet.com/excel/formulas/chdir.php

其中重要的部分是“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

【讨论】:

  • 那行得通,解决了这个问题,消息框有点笨拙,但至少可以工作。
  • 我会尝试一下,现在我有了解决方案,我有大量的宏要处理,而且一天中没有足够的时间。谢谢大家的帮助,我会告诉你进展如何。
猜你喜欢
  • 2016-01-30
  • 2018-05-19
  • 2017-02-09
  • 2020-12-15
  • 1970-01-01
  • 2017-08-31
  • 2020-02-07
  • 2015-05-01
  • 2018-01-10
相关资源
最近更新 更多