我最近更新到2016年的办公室,现在我的宏用于在Excel中选择范围,然后将此范围转换为PDF并自动发送电子邮件,并不完全有效。
在我使用此宏之前,文件名自动填入SaveAs对话框,但现在它是空的。我不明白为什么。
其他人是否有这样的问题或知道如何解决?
这是我的代码:
Function Skicka_projektunderlag_PDF(Myvar As Object, FixedFilePathName As String, _
OverwriteIfFileExist As Boolean, OpenPDFAfterPublish As Boolean) As String
Dim FileFormatstr As String
Dim Fname As Variant
Dim ws As Worksheet
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Set ws = Sheets("Partner_information")
Set ws1 = Sheets("Kundinformation")
Set ws2 = Sheets("Kalkyl")
If Dir(Environ("commonprogramfiles") & "\Microsoft Shared\OFFICE" _
& Format(Val(Application.Version), "00") & "\EXP_PDF.DLL") <> "" Then
If FixedFilePathName = "" Then
FileFormatstr = "PDF Files (*.pdf), *.pdf"
Fname = Application.GetSaveAsFilename(ws.Range("B1").Value & " - Projektunderlag " & ws2.Range("BF104").Value & " " & ws1.Range("B3").Value _
, FileFilter:=FileFormatstr, Title:="Create PDF")
If Fname = False Then Exit Function
Else
Fname = FixedFilePathName
End If
If OverwriteIfFileExist = False Then
If Dir(Fname) <> "" Then Exit Function
End If
On Error Resume Next
Myvar.ExportAsFixedFormat _
Type:=xlTypePDF, _
FileName:=Fname, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=OpenPDFAfterPublish
On Error GoTo 0
If Dir(Fname) <> "" Then Skicka_projektunderlag_PDF = Fname
End If
End Function
祝你好运 AgatonSaxx
答案 0 :(得分:0)
以下答案尚未完善,但我也在Word 2016中遇到过这个问题VBA to generate a default file name when Save As is selected in Word 2016 并希望分享我迄今为止所取得的成就,因为它正在取得一些成功。
通过添加事件处理程序,我能够再次使代码半工作。 Application.DocumentBeforeSave事件 示例https://msdn.microsoft.com/en-us/library/office/ff838299.aspx 绑定到使用事件与应用程序对象 例如https://msdn.microsoft.com/en-us/library/office/ff821218.aspx
我将实际代码移到了类模块
中 Cancel=true
必须添加到代码的末尾,否则“另存为”对话框将打开两次。 这个&#34;解决方案&#34;有一些缺点,它只适用于每个文档一次。因此,如果由于某种原因,您希望多次在同一文档上使用SaveAs,则该名称将不会默认。它似乎有点笨拙/限制我的口味,但它是一个开始。
这个&#34;解决方案&#34;是基于Word的,但你应该能够为Excel找到类似的东西。
希望这有助于您走上成功的道路。抱歉不是一个完美的答案。只是想分享经验教训,因为它可能会减少您的解决方案时间!