2012-05-22 28 views
1

我在一个非常奇怪的情况。我创建了一个可以打开我的excel文件的vbs脚本。我已经在WorkBook_open方法中定义了vba代码。我认为创建一个vbs脚本来打开我的excel将调用我的workBook_open方法并执行其中的vba代码。但是我错了。以下是我的vbs代码。vbScript打开excel但不加载宏/模块?

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应用程序,这就是它的全部功能。我在module1,module2中有宏代码。在下面的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 

但是,从命令行运行它时,它给我的运行时错误所需对象:'关闭'。任何想法为什么?为什么它没有关闭?我究竟做错了什么?谢谢。

+1

只是一个穿越所有t的思想 - >你有你的Excel应用程序设置为信任VBA? –

+0

2个更多的想法 - 。 1)你可以尝试“E:\ data_extracts \ mydata.xlsm!RefreshDataFromIQY”或“E:\ data_extracts \ mydata.xlsm!Module1.RefreshDataFromIQY”2)如果“RefreshDataFromIQY”是一个私人子/功能,它可能无法工作这可能不适用于你,但只是想我会添加它在 –

回答

1

我刚刚测试了您的代码与我制作的虚拟文件。当我将代码放置在模块中并将其保留为公共状态时,它起作用。但是,当我将其放入私人模块 - >像工作表级模块时,我得到了您遇到的错误。

但是,当我引用私人对象时,代码会通过。所以,我的回答对你是更换

oExcel.Run "RefreshDataFromIQY" 

随着

oExcel.Run "[yourClassName].RefreshDataFromIQY" 

此外,我放置在workbook_event在我的文件中。该事件在开放时成功触发,所以如果您遇到问题,最有可能发生在事件代码中。

+0

斯科特我编辑我的文章。请参阅上面。感谢您的指导。:0 – Nemo

+0

代码适合我工作。检查并确保您的另外,如果你有一个运行在workbook_open事件上的宏,你可能希望成为一个定时器语句到vbs代码中等待X秒,以便工作簿中的宏能够处理。 ,你的第二个问题似乎与你的第一个问题不同,最好接受问题的答案,而不是发布一个新问题,如果这是另一个单独的问题。 –

+0

感谢Scott。问题是我强迫'关闭'在我的vbscipt而获取exe的宏在Workbook_Open下自动保存并关闭。所以我只需要省略oExcelWkb.Close True并且工作。谢谢。在参考这个主题时,我将发布一个新主题(我遇到的新问题)。再次感谢。 – Nemo