1

我处于一个非常奇怪的情况。我创建了一个可以打开我的 excel 文件的 vbs 脚本。我在 WorkBook_open 方法中定义了 vba 代码。我认为创建一个 vbs 脚本来打开我的 excel 会调用我的 workBook_open 方法并执行其中的 vba 代码。但是我错了。下面是我的vbs代码。

filePath = "E:\data_extracts\mydata.xlsm"
Set oExcel = CreateObject("Excel.Application")
oExcel.Workbooks.Open(filepath)
oExcel.Visible = True
oExcel.Run "RefreshDataFromIQY"
oExcel.ActiveWorkbook.Save
oExcel.ActiveWorkbook.Close
oExcel.Quit
Set oExcel = Nothing

在调试时,它在 oExcel.Run "RefreshDataFromIQY" 处失败,说明宏不可用或已禁用。因此,代码只是成功打开了 excel 应用程序,仅此而已。我在模块 1、模块 2 中有宏代码。我如何/在哪里编写以在下面的 vbs 脚本中执行我的宏。我的宏/模块必须按顺序执行,我的一些宏是录制的宏。任何帮助深表感谢。谢谢。

感谢您的意见斯科特。这是我对代码所做的更改

Dim oExcelApp
Dim oExcelWkb

set oExcelApp = createobject("Excel.Application")
set oExcelWkb = oExcelApp.Workbooks.Open("\\myserver\data_extracts\TestTOPTMay307.xlsm")
oExcelWkb.Close True
oExcelApp.Quit

但是,在从命令行运行它时,它给了我运行时错误 Object required: 'Close'。知道为什么吗?为什么无法关闭?我究竟做错了什么?谢谢。

4

1 回答 1

1

我刚刚针对我制作的虚拟文件测试了您的代码。当我将代码放在模块中并将其保留为公开时,它就起作用了。但是,当我放入一个私有模块 - > 像工作表级别模块时,我得到了你得到的错误。

但是,当我引用私有对象时,代码运行通过。所以我对你的回答是替换

oExcel.Run "RefreshDataFromIQY"

oExcel.Run "[yourClassName].RefreshDataFromIQY"

此外,我还在我的文件中放置了一个 workbook_event。该事件在打开时成功触发,所以如果你的有问题,它很可能在事件内部的代码中。

于 2012-05-22T18:46:35.393 回答