2017-04-07 149 views
1

我试图做“全部刷新”(如下图所示的图像):VBA宏工作簿刷新使用宏不工作

enter image description here

以下是宏(这是写在模块1):

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

不调用宏,或者它不会刷新你想要的工作簿?将一些调试输出添加到'Workbook_RefreshAll'(例如'Debug.Print ActiveWorkbook.Name')。 –

+0

因此,即使手动运行宏,文件也不会刷新。 – Arman

+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") 
+0

但即使我运行宏进行刷新(即在模块1中),它仍然不会刷新。 – Arman

+0

它可能与连接上的后台刷新设置有关。尝试手动禁用它或修改您的刷新代码,如http://stackoverflow.com/a/18836346/3658485。看看是否有帮助 –