Nat*_*rne 5 vbscript excel ms-office
我有以下代码,我希望它打开我保存为.xlsx的文件,然后使用相同的文件名再次保存它们,但这次是.xls文件,以便它们与Excel 2003兼容
Set app = CreateObject("Excel.Application")
Set fso = CreateObject("Scripting.FileSystemObject")
For Each f In fso.GetFolder("Y:\Billing_Common\autoemail").Files
If LCase(fso.GetExtensionName(f)) = "xlsx" Then
Set wb = app.Workbooks.Open(f.Path)
app.DisplayAlerts = False
wb.SaveAs "*.xls*"
wb.Close SaveChanges=True
app.Close
app.Quit
End if
Set f = Nothing
Set fso = Nothing
Next
Run Code Online (Sandbox Code Playgroud)
Ans*_*ers 11
正如芭丝谢芭已经指出的那样,Set fso = Nothing并且app.Quit属于剧本的末尾(在循环之外).但是还有一些错误.
wb.SaveAs "*.xls*"
您无法将工作簿保存为通配符名称.如果要以当前名称保存工作簿,只需使用wb.Save.否则你必须使用显式名称(你还应该设置文件类型):
wb.SaveAs "new.xlsx", 51
Run Code Online (Sandbox Code Playgroud)
要么
wb.SaveAs "C:\path\to\new.xls", -4143
Run Code Online (Sandbox Code Playgroud)wb.Close SaveChanges=True
VBScript不支持命名参数(请参见此处).如果要调用参数设置的Close方法,则必须这样做:SaveChangesTrue
wb.Close True
Run Code Online (Sandbox Code Playgroud)app.Close
应用程序对象没有Close方法.
不是错误,但值得改进的事情:
app.DisplayAlerts = False 应该在循环开始之前去,除非你在循环中重新启用它.
我建议app.Visible = False您在创建应用程序对象后添加一行.当您必须调试脚本时,您只需将该值更改为True在桌面上显示应用程序即可.找到错误有很大帮助.
修正脚本:
Set app = CreateObject("Excel.Application")
app.Visible = False
app.DisplayAlerts = False
Set fso = CreateObject("Scripting.FileSystemObject")
For Each f In fso.GetFolder("Y:\Billing_Common\autoemail").Files
If LCase(fso.GetExtensionName(f)) = "xlsx" Then
Set wb = app.Workbooks.Open(f.Path)
wb.Save
wb.Close True
End if
Next
app.Quit
Set app = Nothing
Set fso = Nothing
Run Code Online (Sandbox Code Playgroud)
两个严重的错误:
Set fso = Nothing不应该在你的循环中:你需要fso
在程序的持续时间.
另外,app.Quit从循环中掉落; 保持Excel开放直到
最后.
Set f = Nothing是不必要的(尽管是良性的); 让循环为你选择值.
| 归档时间: |
|
| 查看次数: |
48623 次 |
| 最近记录: |