2016-11-30 145 views
0

我使用VBA时,我要保存Excel工作簿我的桌面文件夹中得到一个Runtime error 1004 document not saved。以下是我的代码的详细信息:运行时错误1004文档没有保存使用VBA的Excel 2016

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 
+0

你们可以请我帮忙,因为我在这部分代码中得到了错误ActiveWorkbook.SaveAs文件名:= fName,FileFormat:= 51 – Tabraiz

+0

您是否测试过下面提供的解决方案?任何反馈将是不错的... –

回答

0

我认为您在代码底部缺少'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 
+0

wilson88你可以请解释为什么结束如果应该在代码结束? – Tabraiz

+0

它是VBA中的If语句的多行语法规则(适用于您的'Exit Sub'语句位于另一行)。 如果是在同一行,你就不需要(但我总是用它作为反正我喜欢写如果块语句,因为它是更容易理解)。更多信息链接:) https://msdn.microsoft.com/en-us/library/752y8abs.aspx – 2016-11-30 10:03:06

+0

我想是因为它认为,ActiveWorkbook.SaveAs文件名文档的心不是储蓄:= FNAME,的FileFormat:= 51语句If块的一部分。所以,因此它会在保存文档之前退出sub ... – 2016-11-30 10:06:21

0

fNameString,因此你不能用它False比较,但"False"

尝试用下面几行替换代码的最后一节:

​​

注意:使用FileFormat:=51,意味着xlOpenXMLWorkbook,一个.XLSX格式(不含宏)。

但是,因为你要使用的SaveAs命令ThisWorkbook,其中包含此代码,你会得到一个提示画面,如果你想将其保存为.xslx,这意味着所有的代码都将丢失,询问。

您可以选择FileFormat:=52,意味着xlOpenXMLWorkbookMacroEnabled,一个.XLSM格式(与宏)。

+0

Shai Rado我改变了我的代码,就像你说的一样,但仍然不起作用给出同样的错误。我需要保存没有启用宏的Excel工作簿 – Tabraiz

+0

Shai Rado我正在使用Excel 2016,所以文件格式有问题吗? – Tabraiz

+0

@Tabraiz你在哪一行得到你的错误? –

相关问题