我正在
运行时错误'1004'对象'_Workbook'的方法'SaveAs'失败。
该代码适用于excel 2010.我只在excel 2013中收到此错误消息。 尝试运行跟随行后出现错误消息。
ActiveWorkbook.SaveAs FolderPath & SaveName & NewSaveExt, 52
背景:
电子表格是.xls
使用Saveas时,我将其更改为.xlsm
我用.xls扩展名和fileformat 56尝试了它,但它仍然没有结束
我正在使用代码中列出的资源中的代码
我将文件保存到工作簿所在的同一文件夹中
原始文件名是:财务报告,月份为N.xls
新文件名为:财务报告1516,截至8.xlsm年
Sub SaveNewVersion_Excel()
'PURPOSE: Save file, if already exists add a new version indicator to filename
'SOURCE: www.TheSpreadsheetGuru.com/The-Code-Vault
Dim FolderPath As String
Dim myPath As String
Dim SaveName As String
Dim SaveExt As String
Dim NewSaveExt As String
Dim VersionExt As String
Dim Saved As Boolean
Dim x As Long
TestStr = ""
Saved = False
x = 0
NewSaveExt = ".xlsm"
'Version Indicator (change to liking)
VersionExt = "_v"
'Pull info about file
On Error GoTo NotSavedYet
myPath = ActiveWorkbook.FullName
myFileName = "Financial Report " & FileFinancialYear & " as at month " & MonthNumber
FolderPath = Left(myPath, InStrRev(myPath, "\"))
SaveExt = "." & Right(myPath, Len(myPath) - InStrRev(myPath, "."))
On Error GoTo 0
'Determine Base File Name
If InStr(1, myFileName, VersionExt) > 1 Then
myArray = Split(myFileName, VersionExt)
SaveName = myArray(0)
Else
SaveName = myFileName
End If
'Test to see if file name already exists
If FileExist(FolderPath & SaveName & SaveExt) = False Then
ActiveWorkbook.SaveAs FolderPath & SaveName & NewSaveExt, 52
Exit Sub
End If
'Need a new version made
Do While Saved = False
If FileExist(FolderPath & SaveName & VersionExt & x & SaveExt) = False Then
ActiveWorkbook.SaveAs FolderPath & SaveName & VersionExt & x & NewSaveExt, 52
Saved = True
Else
x = x + 1
End If
Loop
'New version saved
MsgBox "New file version saved (version " & x & ")"
Exit Sub
'Error Handler
NotSavedYet:
MsgBox "This file has not been initially saved. " & _
"Cannot save a new version!", vbCritical, "Not Saved To Computer"
End Sub
Function FileExist(FilePath As String) As Boolean
'PURPOSE: Test to see if a file exists or not
'RESOURCE: http://www.rondebruin.nl/win/s9/win003.htm
Dim TestStr As String
'Test File Path (ie "S:\Reports\Financial Report as at...")
On Error Resume Next
TestStr = Dir(FilePath)
On Error GoTo 0
'Determine if File exists
If TestStr = "" Then
FileExist = False
Else
FileExist = True
End If
End Function
答案 0 :(得分:0)
错误再现:尝试保存已存在FileName
的工作簿时,我能够重现错误。
这可能发生,因为代码检查是否存在以扩展名SaveExt
命名的文件(使用函数FileExist
),然后尝试将其保存为以扩展名{{命名的文件1}}。如果这些扩展名不相同,则扩展名为NewSaveExt
的文件可能已存在,提升
运行时错误'1004':对象'_Workbook'的方法'SaveAs'失败。
然而这个警告:
此文件中已存在“财务报告为月.xlsm”文件 地点。你想替换它吗?。
应该在错误NewSaveExt
不幸的是我无法测试Excel 2010中发布的代码,但我个人认为这种行为并不仅仅是Excel 2013。
解决方案:如果目标是始终将文件另存为1004
(值xlsm
),则代码应验证是否存在具有该扩展名的文件名。
有关已发布代码的其他评论:
NewSaveExt
,TestStr
,FileFinancialYear
,MonthNumber
,myFileName
myArray
; TestStr = ""
; Saved = False
x = 0
; NewSaveExt = ".xlsm"
VersionExt = "_v"
,该错误处理程序应该在(即新工作簿)之前未保存NotSavedYet
时触发在处理新工作簿(参见On Error Statement)时,ActiveWorkbook
语句之间没有任何命令生成错误。如果意图不是保存On Error
,如错误处理程序New Workbooks
所暗示的那样,那么验证NotSavedYet
的{{1}},如果工作簿没有,则它将为空之前已经保存过。Path
和ActiveWorkbook
个变量。FileFinancialYear
和MonthNumber
的特定工作簿属性,而不是Path
(请参阅Workbook Object (Excel))关于被称为Name
一个。编程:不需要FullName
语句,只需使用Determine Base File Name
函数并获取项IF
。当Split
中没有0
时,Split
函数返回“包含entire
表达式的单个元素数组”(即{{1}分别和delimiter
。
湾实用性:这篇文章似乎是多余的,因为它意味着从变量expression
中提取不包括版本和扩展名的文件名,但是变量中没有这样的信息,因为它只填充了上面的几行: / p>
VersionExt
因此myFileName
始终等于myFileName
该文件的第一个版本被编入索引为myFileName = "Financial Report " & FileFinancialYear & " as at month " & MonthNumber
而不是SaveName
。
要求:根据以上内容,编写了符合以下要求的修订代码:
myFileName
(分机0
) 1
和xlOpenXMLWorkbookMacroEnabled
是硬编码的,因为没有迹象表明它们如何填充(根据需要进行更改)。第一个版本的索引应为xlsm
(如果需要,请更改为0)。
FileFinancialYear