【发布时间】:2020-04-14 23:46:30
【问题描述】:
我是 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
【问题讨论】:
-
大概应该重写
ThisWorkbook.Incentive以返回一个工作簿对象。Workbooks.Open返回您需要捕获的工作簿引用。 -
我是个大菜鸟。请原谅。我从我在记事本中制作的 .vbs 脚本运行它。我无法使用“workbooks.open”,因为 excel 文件受密码保护(我遇到了麻烦)。所以相反,我在主簿中运行“激励”宏来打开激励报告并输入密码,只读错误等。有没有办法从这个外部记事本显式声明工作簿文件? (上帝就是这样一个磨砂膏)
-
将
Incentive设为Function,返回Workbook对象。 -
也许是一个宏,可以驻留在主工作簿中,例如“如果此工作簿是活动工作簿,则将另一个工作簿设为活动工作簿”
-
不,没有必要这样做。你需要
Function Incentive() As Workbook,而不是Sub。
标签: excel vba vbscript automation