VB 脚本 -- Excel "Activeworkbook" 变得乱七八糟。如何声明显式工作簿?

VB Script -- Excel "Activeworkbook" Getting Scrambled. How to declare explicit workbook?

我是 VBA 的新手,但我正在尝试创建一个自动化脚本来打开、刷新、保存和关闭一些 excel 报告。

我目前有一个 vbs 脚本,但我遇到了 ACTIVEWORKBOOK

的问题

我的问题:有时,vba 选择了错误的工作簿作为 activeworkbook,最终保存并关闭了错误的工作簿。

我的问题:如何显式声明 INCENTIVE REPORT 而不是使用 ActiveWorkBook

我的代码如下:

Dim objExcel

Set objExcel = CreateObject("Excel.Application")

**'THIS IS THE MASTER BOOK WHICH OPENS ALL OF THE OTHER FILES AND KEEPS TIMESTAMPS OF WHEN THEY WERE LAST SAVED**

objExcel.Workbooks.Open("S:\Analyst_Reporting\Automation\DAILY AUTOMATION BOOK.xlsm")  


objExcel.Visible = True

**'THIS OPENS AN "INCENTIVE REPORT"**

objExcel.Run "ThisWorkbook.INCENTIVE"  

 **'THIS REFRESHES THE "INCENTIVE REPORT"**

objExcel.Run "Thisworkbook.helloworld" 

***'THIS IS WHERE THE PROBLEM OCCURS.  INSTEAD OF SAVING THE INCENTIVE REPORT (WHICH SHOULD BE "ACTIVEWORKBOOK"), IT SAVES AND CLOSES THE "DAILY AUTOMATION BOOK" AND CRASHES THE REPORT***

objExcel.**ActiveWorkbook**.Save   

objExcel.ActiveWorkbook.Close(0)

objExcel.Run "Thisworkbook.INCENTIVETIMESTAMP"

objExcel.Run "Thisworkbook.SAVEtest"


objExcel.Run "ThisWorkbook.ACE"

objExcel.Run "Thisworkbook.helloworld"

objExcel.ActiveWorkbook.Save

objExcel.ActiveWorkbook.Close(0)

objExcel.Run "Thisworkbook.ACETIMESTAMP"

objExcel.Run "Thisworkbook.SAVEtest"




objExcel.Wait(Now + TimeValue("0:00:20"))

objExcel.ActiveWorkbook.Save

objExcel.ActiveWorkbook.Close(0)

objExcel.Quit

非常感谢你们的帮助,我想出了一个适合我的解决方案。

最初的问题是活动工作簿发生意外更改。为了解决这个问题,我声明了 "activeworkbook = WBK" 并使用了 WBK 变量而不是 "activeworkbook".

下面的例子:

Dim objExcel

Set objExcel = CreateObject("Excel.Application")



objExcel.Workbooks.Open("S:\Analyst_Reporting\Automation\DAILY AUTOMATION BOOK.xlsm") 


objExcel.Visible = True



objExcel.Run "ThisWorkbook.INCENTIVE"
set wbk = objExcel.ActiveWorkbook 'SETTING WBK = ACTIVEWORKBOOK HERE
objExcel.Run "ThisWorkbook.helloworld"
wbk.save                          'CALLING WBK INSTEAD OF "ACTIVEWORKBOOK.SAVE"
wbk.close(0)                      'CALLING WBK INSTEAD OF "ACTIVEWORKBOOK.CLOSE"
objExcel.Run "Thisworkbook.INCENTIVETIMESTAMP"
objExcel.Run "Thisworkbook.SAVEtest"


objExcel.Run "ThisWorkbook.ACE"
set wbk = objExcel.ActiveWorkbook
objExcel.Run "Thisworkbook.helloworld"
wbk.save
wbk.close(0)
objExcel.Run "Thisworkbook.ACETIMESTAMP"
objExcel.Run "Thisworkbook.SAVEtest"

objExcel.Run "ThisWorkbook.CLOSINGRATIO"
set wbk = objExcel.ActiveWorkbook
objExcel.Run "Thisworkbook.helloworld"
wbk.save
wbk.close(0)
objExcel.Run "Thisworkbook.CLOSINGRATIOTIMESTAMP"
objExcel.Run "Thisworkbook.SAVEtest"

这对我来说效果很好,尽管我确信还有更优雅的解决方案:)

再次感谢!