我正在尝试使用宏来执行'全部刷新'(如下图所示):
以下是宏(在Module1中编写):
Sub Workbook_RefreshAll()
ActiveWorkbook.RefreshAll
End Sub
然后我按如下方式编写VBScript:
'Code should be placed in a .vbs file
Set objExcel = CreateObject("Excel.Application")
Set book = objExcel.Workbooks.Open("excel.xlsm", , True)
WScript.Echo "Executing RefreshAll"
objExcel.Application.Run "'excel.xlsm'!Module1.Workbook_RefreshAll"
WScript.Echo "Executing Mailing"
objExcel.Application.Run "'excel.xlsm'!ThisWorkbook.Mail"
objExcel.DisplayAlerts = False
objExcel.Application.Quit
Set objExcel = Nothing
但它并没有让工作簿更新。
答案 0 :(得分:0)
您的对象和运行参数存在一些不匹配。
您应该使用您创建的objExcel.Application.Run "'excel.xlsm'!Module1.Workbook_RefreshAll"
对象而不是book
,而不是在run参数中,您不需要再次调用工作簿名称。 I.E. book.Application.Run "Module1.Workbook_RefreshAll"
此外,您可能希望了解如何创建book
对象。如果vbs文件和xlsm文件位于 工作的文件夹中,则可以推测。但它并不总是如此。
您可以考虑将其添加到脚本的开头
Set fso = CreateObject("Scripting.FileSystemObject")
curDir = fso.GetAbsolutePathName(".")
然后将脚本修改为
Set book = objExcel.Workbooks.Open( curDir & "\excel.xlsm" )