运行时错误 1004 文档未使用 Vba Excel 2016 保存
Posted
技术标签:
【中文标题】运行时错误 1004 文档未使用 Vba Excel 2016 保存【英文标题】:Runtime error 1004 document not saved with Vba Excel 2016 【发布时间】:2016-11-30 08:31:56 【问题描述】:当我想在桌面上的文件夹中保存 Excel 工作簿时,我使用 vba 获得了 Runtime error 1004 document not saved
。以下是我的代码的详细信息:
Private Sub Save_Click()
'Popup the Window "Save As"
Application.DisplayAlerts = False
MsgBox "Do not change the default file name proposed on the next step please !"
Dim fName As Variant
Dim DName As String ' Variable storing name of excel workbook which has to be saved
DName = UserForm.CustomerApplication.Value & " - " & UserForm.L2GType.Value
& " - " & UserForm.Title.Value & " - " & UserForm.Country.Value & "(" &
Year(Date) & ")"
fName = Application.GetSaveAsFilename(InitialFileName:=DName, _
FileFilter:="Excel Files (*.XLSX), *.XLSX", Title:="Save As")
If fName = False Then
Exit Sub
ActiveWorkbook.SaveAs filename:=fName, FileFormat:=51
ActiveWorkbook.Close
End Sub
【问题讨论】:
你们能帮我吗,因为我在这部分代码中遇到了错误 ActiveWorkbook.SaveAs 文件名:=fName,文件格式:=51 您是否测试过以下提供的任何解决方案?任何反馈都会很好...... 【参考方案1】:我认为您的代码底部缺少“End If”。 'If fName = False Then...' 部分。试试下面的
Private Sub Save_Click()
'Popup the Window "Save As"
Application.DisplayAlerts = False
MsgBox "Do not change the default file name proposed on the next step please !"
Dim fName As Variant
Dim DName As String ' Variable storing name of excel workbook which has to be saved
DName = UserForm.CustomerApplication.Value & " - " & UserForm.L2GType.Value
& " - " & UserForm.Title.Value & " - " & UserForm.Country.Value & "(" &
Year(Date) & ")"
fName = Application.GetSaveAsFilename(InitialFileName:=DName, _
FileFilter:="Excel Files (*.XLSX), *.XLSX", Title:="Save As")
If fName = False Then
Exit Sub
End If
ActiveWorkbook.SaveAs filename:=fName, FileFormat:=51
ActiveWorkbook.Close
End Sub
【讨论】:
wilson88 你能解释一下为什么 End if 应该在代码末尾吗? 它是 VBA 中 If 语句的多行语法规则(适用于此处,因为您的“退出子”语句位于另一行)。如果它在一行上,则不需要(但无论如何我总是使用它,因为我更喜欢在块中编写 if 语句,因为它更容易理解)。更多信息链接:) msdn.microsoft.com/en-us/library/752y8abs.aspx 我认为您的文档没有保存,因为它认为 ActiveWorkbook.SaveAs filename:=fName, FileFormat:=51 语句是 If 块的一部分。因此,它会在保存文档之前退出 sub...【参考方案2】:fName
是一个String
,因此您不能将它与False
进行比较,而是与"False"
进行比较。
尝试将代码的最后一部分替换为以下行:
fName = Application.GetSaveAsFilename(InitialFileName:=DName, _
fileFilter:="Excel Files (*.XLSX), *.XLSX", Title:="Save As")
If fName <> "False" Then
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=fName, FileFormat:=51
Else
MsgBox "No File was selected !"
Exit Sub
End If
Application.DisplayAlerts = True
注意:使用FileFormat:=51
,表示xlOpenXMLWorkbook
,一种.xlsx 格式(没有宏)。
然而因为你想使用SaveAs
命令和包含此代码的ThisWorkbook
,你会得到一个提示屏幕,询问你是否要将其保存为.xslx
,这意味着您的所有代码都将丢失。
您可以选择FileFormat:=52
,表示xlOpenXMLWorkbookMacroEnabled
,一种.xlsm 格式(带有宏)。
【讨论】:
Shai Rado 我改变了我的代码,就像你说的那样,但仍然没有工作,给出了同样的错误。我需要在未启用宏的情况下保存 Excel 工作簿 Shai Rado 我使用的是 excel 2016,所以文件格式有问题吗? Shai Rado ActiveWorkbook.SaveAs 文件名:=fName, FileFormat:=51 在线出错:ActiveWorkbook.SaveAs filename:=fName, FileFormat:=51以上是关于运行时错误 1004 文档未使用 Vba Excel 2016 保存的主要内容,如果未能解决你的问题,请参考以下文章
VBA ActiveWorkbook.Saveas 运行时错误 1004
使用 Range 类在 VBA 中创建宏时出现运行时错误 1004
使用 VBA 密码保护进行保存时出现错误消息“运行时错误‘1004’:对象‘_Workbook’的方法‘SaveAs’失败”