错误运行时错误“1004”文档未保存。

Posted

技术标签:

【中文标题】错误运行时错误“1004”文档未保存。【英文标题】:Error Run-Time Error '1004' Document not saved. 【发布时间】:2016-09-19 00:39:32 【问题描述】:

我已经成功运行了一个宏,它将我的 Excel 工作表保存为 PDF 并通过电子邮件发送给我的执行团队。

我重新设计了它,创建了一个新工作表,并相应地更新了代码。

Sub NewDashboardPDF()

' New Executive Daily Dashboard Macro
'
' Create and email the Executive TEAM the Daily Dashboard.
    Dim strPath As String, strFName As String
    Dim OutApp As Object, OutMail As Object

' Create and email the Daily Report to Mitch/Dave/John/Jason ALL PAGES.
    Sheets("Executive Dashboard").Select
    strPath = Environ$("temp") & "\" 'Or any other path, but include trailing "\"
    strFName = Worksheets("Executive Dashboard").Range("V2").Value & " " & Format(Date, "yyyymmdd") & ".pdf"

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

     'Set up outlook
    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)
     'Create message
    On Error Resume Next
    With OutMail
        .to = xxx@testemail.com
        .CC = "steve@testemail.com"
        .BCC = ""
        .Subject = "Daily Dashboard"
        .Body = "All, " & vbNewLine & vbNewLine & _
                        "Please see the attached daily dashboard." & vbNewLine & _
                        "If you have any questions or concerns, please do not hesitate to contact me." & vbNewLine & _
                        "Steve"
        .Attachments.Add strPath & strFName
        .Display
        .Send
    End With
     'Delete any temp files created
    Kill strPath & strFName
    On Error GoTo 0

End Sub

我收到的错误消息是运行时错误“1004”文档未保存。文档可能已打开或遇到错误。

当我调试时,下面的部分用最后一行的箭头突出显示。

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

所有对旧工作表的引用都已更新为新工作表,所以我认为这不是问题。

另外,我很想知道如何使用我的默认电子邮件签名创建此电子邮件。目前它只是格式化为纯文本电子邮件。

【问题讨论】:

我看不出代码有什么问题,你换过 Excel Office 了吗? 崩溃时strPathstrFName 的值是多少?他们是你所期待的吗? 在这种情况下,即使是非常基本的源代码控制也会对您有所帮助。如果你记录了你的代码在什么时候工作和什么时候不工作,你可以确切地看到有什么不同,而不是猜测。如果你的机器上没有 scc,你可以使用 github 在线或 gist 给你一个变化的差异。 【参考方案1】:

Document not saved 错误消息是 PDF 文件不可写的线索,可能是因为它在您的 PDF 阅读器中打开。如果我在尝试从 VBA 保存文档时打开了 PDF 文档,我会重复该错误。

如果您没有打开该文档,Windows 可能会无意中锁定该文件。您可能需要重新启动 PC 才能清除锁定。

如果该文件尚不存在,那么您需要确认您实际上可以在目录位置创建文件。

如果V2 中的值包含最终使文件名无效的字符,您将遇到类似的错误,例如\/:*?"<>|

【讨论】:

ThunderFrame - 你明白了,我无意中选择了 V2,其中有一个日期,而我应该选择 V1。 / 是罪魁祸首。感谢大家的帮助!【参考方案2】:

我认为您的代码没有任何问题,您使用的是哪个 Excel Office?

要添加您的默认签名,请尝试以下操作:

Dim Signature As String

With OutMail
    .Display
End With

Signature = OutMail.htmlBody

'Create message
On Error Resume Next
With OutMail
    .To = "xxx@testemail.com"
    .CC = "steve@testemail.com"
    .BCC = ""
    .Subject = "Daily Dashboard"
    .HTMLBody = "All, " & vbNewLine & vbNewLine & _
                    "Please see the attached daily dashboard." & vbNewLine & _
                    "If you have any questions or concerns, please do not hesitate to contact me." & vbNewLine & _
                    "Steve" & vbNewLine & Signature
    .Attachments.Add strPath & strFName
    .Display
'        .Send
End With

也不要使用 vbNewLine 试试 & "<br>" &

【讨论】:

【参考方案3】:

确保您已创建将保存文件的文件夹结构。您可以对解决方案进行编码以检查文件夹是否已创建,如果没有,则可以创建它们。我以前也遇到过类似的问题。检查以下代码中使用的文件夹路径是否存在:

strPath = Environ$("temp") & "\"

如果它不存在,请创建它并重试。您可能会发现它可以正常工作。

【讨论】:

【参考方案4】:

检查你的路径,把它拿出来,看看它做了什么或玩弄它。我将电子表格放在新机器上,但尝试将其放入 user\documents 文件夹时失败

【讨论】:

以上是关于错误运行时错误“1004”文档未保存。的主要内容,如果未能解决你的问题,请参考以下文章

Excel 2007 VBA ActiveWorkbook SaveAs 未保存...运行时错误 1004

运行时错误“1004”未找到单元格错误

使用 VBA 密码保护进行保存时出现错误消息“运行时错误‘1004’:对象‘_Workbook’的方法‘SaveAs’失败”

VBA ActiveWorkbook.Saveas 运行时错误 1004

运行时错误“1004”:对象“_Workbook”的方法“SaveAs”失败

VBA 另存为运行时错误 1004