错误运行时错误“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 了吗? 崩溃时strPath
和strFName
的值是多少?他们是你所期待的吗?
在这种情况下,即使是非常基本的源代码控制也会对您有所帮助。如果你记录了你的代码在什么时候工作和什么时候不工作,你可以确切地看到有什么不同,而不是猜测。如果你的机器上没有 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
使用 VBA 密码保护进行保存时出现错误消息“运行时错误‘1004’:对象‘_Workbook’的方法‘SaveAs’失败”
VBA ActiveWorkbook.Saveas 运行时错误 1004