运行时错误 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

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

VBA 另存为运行时错误 1004

使用 Range 类在 VBA 中创建宏时出现运行时错误 1004

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

错误处理中的 Excel VBA 运行时错误 1004