已修复以PDF格式保存为文件名不再起作用Office 2016

时间:2016-01-21 12:24:03

标签: excel vba pdf

我最近更新到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

1 个答案:

答案 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找到类似的东西。

希望这有助于您走上成功的道路。抱歉不是一个完美的答案。只是想分享经验教训,因为它可能会减少您的解决方案时间!