编写以下脚本是为了打开文件夹中的所有.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
答案 0 :(得分:0)
由于SaveAs
是Method
对象的Workbook
,因此无法为其分配值,因此您无法获得表单声明:
wb.SaveAs = .....
MSDN documentation for SaveAs表明它可以通过位置或名称传递许多参数:
表达式 .SaveAs( FileName,FileFormat,Password,WriteResPassword,ReadOnlyRecommended,CreateBackup,AccessMode,ConflictResolution,AddToMru,TextCodepage,TextVisualLayout,Local )
expression 表示Workbook对象的变量。
您编写的有效语法之一是:
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
分配值。