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"
这对我来说效果很好,尽管我确信还有更优雅的解决方案:)
再次感谢!
我是 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"
这对我来说效果很好,尽管我确信还有更优雅的解决方案:)
再次感谢!