VBA 尝试另存为 .XLSX 时脚本失败
VBA Script fails when trying to save as .XLSX
已编写以下脚本来打开文件夹中的所有 .xlsm 文件类型,并将它们另存为新目录中的 .xlsx 类型,但在尝试另存为 .xlsx 时脚本总是失败。
返回的错误消息是 运行 次错误“1004”
所有补救措施均告失败,非常感谢您的帮助,在此先感谢您。
Set fso = CreateObject("scripting.filesystemobject")
Set fils = fso.GetFolder("FILE LOCATION").Files
FldrPicker = "FILE LOCATION"
With FldrPicker
myPath = FldrPicker
End With
myExtension = "*.xlsm"
myfile = Dir(myPath & myExtension)
filepath = "NEW FILE LOCATION"
Do While myfile <> ""
Set wb = workbooks.Open(Filename:=myPath & myfile)
Application.DisplayAlerts = False
wb.SaveAs = myfile & ".xlsx"
wb.Close Savechanges:=True
Application.DisplayAlerts = True
Loop
因为SaveAs
是Workbook
对象的一个Method
,不能给它赋值,所以不能有如下形式的语句:
wb.SaveAs = .....
MSDN documentation for SaveAs表明它可以通过位置或名称传递许多参数:
expression .SaveAs(FileName, FileFormat, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup, AccessMode, ConflictResolution, AddToMru, TextCodepage, TextVisualLayout, Local)
expression A variable that represents a Workbook object.
您所写内容的有效语法之一是:
wb.SaveAs myfile & ".xlsx"
但是,如果您从 "C:\Temp1\Temp2" 目录打开了一个名为 "abc.xlsm" 的文件,您将在当前目录中创建一个名为 "abc.xlsm.xlsx" 的文件,这可能是Excel 应用程序已存储 - 所以您可能真的想要
wb.SaveAs FileName:=myPath & Left(myfile, Len(myfile) - 5) & ".xlsx"
或者可能
wb.SaveAs FileName:=myPath & Left(myfile, Len(myfile) - 5) & ".xlsx", _
FileFormat:=xlOpenXMLWorkbook
强制保存为非启用宏的格式。
但要记住的要点是……您不能为 Method
赋值。
已编写以下脚本来打开文件夹中的所有 .xlsm 文件类型,并将它们另存为新目录中的 .xlsx 类型,但在尝试另存为 .xlsx 时脚本总是失败。
返回的错误消息是 运行 次错误“1004”
所有补救措施均告失败,非常感谢您的帮助,在此先感谢您。
Set fso = CreateObject("scripting.filesystemobject")
Set fils = fso.GetFolder("FILE LOCATION").Files
FldrPicker = "FILE LOCATION"
With FldrPicker
myPath = FldrPicker
End With
myExtension = "*.xlsm"
myfile = Dir(myPath & myExtension)
filepath = "NEW FILE LOCATION"
Do While myfile <> ""
Set wb = workbooks.Open(Filename:=myPath & myfile)
Application.DisplayAlerts = False
wb.SaveAs = myfile & ".xlsx"
wb.Close Savechanges:=True
Application.DisplayAlerts = True
Loop
因为SaveAs
是Workbook
对象的一个Method
,不能给它赋值,所以不能有如下形式的语句:
wb.SaveAs = .....
MSDN documentation for SaveAs表明它可以通过位置或名称传递许多参数:
expression .SaveAs(FileName, FileFormat, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup, AccessMode, ConflictResolution, AddToMru, TextCodepage, TextVisualLayout, Local)
expression A variable that represents a Workbook object.
您所写内容的有效语法之一是:
wb.SaveAs myfile & ".xlsx"
但是,如果您从 "C:\Temp1\Temp2" 目录打开了一个名为 "abc.xlsm" 的文件,您将在当前目录中创建一个名为 "abc.xlsm.xlsx" 的文件,这可能是Excel 应用程序已存储 - 所以您可能真的想要
wb.SaveAs FileName:=myPath & Left(myfile, Len(myfile) - 5) & ".xlsx"
或者可能
wb.SaveAs FileName:=myPath & Left(myfile, Len(myfile) - 5) & ".xlsx", _
FileFormat:=xlOpenXMLWorkbook
强制保存为非启用宏的格式。
但要记住的要点是……您不能为 Method
赋值。