【问题标题】:VBA macro to refresh workbook not workingVBA宏刷新工作簿不起作用
【发布时间】:2017-09-03 08:49:27
【问题描述】:

我正在尝试使用宏执行“全部刷新”(如下图所示):

以下是宏(在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

但它不会刷新工作簿。

【问题讨论】:

  • 宏没有被调用,还是没有刷新你想要的工作簿?添加一些调试输出到Workbook_RefreshAll(例如Debug.Print ActiveWorkbook.Name)。
  • 所以,即使我手动运行宏,文件也不会刷新。
  • 你把我建议的命令放到宏里了吗?是否输出要刷新的工作簿名称?

标签: excel vba vbscript


【解决方案1】:

您的运行对象和参数有些不匹配。

您应该使用您创建的book 对象而不是objExcel.Application.Run "'excel.xlsm'!Module1.Workbook_RefreshAll",并且在运行参数中您不需要再次调用工作簿名称。 IE。 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" )

【讨论】:

  • 但即使我运行宏进行刷新(即在模块 1 中),它仍然没有刷新。
  • 这可能与连接上的后台刷新设置有关。尝试手动禁用它或像stackoverflow.com/a/18836346/3658485 那样修改您的刷新代码。看看有没有帮助
猜你喜欢
  • 1970-01-01
  • 2023-03-26
  • 2015-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-11
相关资源
最近更新 更多