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

因为SaveAsWorkbook对象的一个​​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 赋值。