VB脚本--“Excel”;“活动工作簿”;被炒了。如何声明显式工作簿?
我是VBA新手,但我正在尝试创建一个自动化脚本,用于打开、刷新、保存和关闭一些excel报告 我目前有一个vbs脚本,但我在VB脚本--“Excel”;“活动工作簿”;被炒了。如何声明显式工作簿?,excel,vba,vbscript,automation,Excel,Vba,Vbscript,Automation,我是VBA新手,但我正在尝试创建一个自动化脚本,用于打开、刷新、保存和关闭一些excel报告 我目前有一个vbs脚本,但我在ACTIVEWORKBOOK 我的问题:有时候,vba选择了错误的工作簿作为activeworkbook,结果保存并关闭了错误的工作簿 我的问题:如何明确声明激励报告,而不是使用ActiveWorkBook? 我的代码如下: Dim objExcel Set objExcel = CreateObject("Excel.Application") **'THIS IS
ACTIVEWORKBOOK
我的问题:有时候,vba选择了错误的工作簿作为activeworkbook
,结果保存并关闭了错误的工作簿
我的问题:如何明确声明激励报告
,而不是使用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
非常感谢你们的帮助,我找到了一个适合我的解决方案 最初的问题是Active工作簿发生了意外更改。为了解决这个问题,我声明了“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"
这对我来说非常有效,尽管我相信还有更优雅的解决方案:)
再次感谢 应该重写
此工作簿。激励
以返回工作簿对象<代码>工作簿。打开返回需要捕获的工作簿引用。我是个大傻瓜。请原谅。我是从记事本中制作的.vbs脚本运行这个脚本的。我无法使用“workbooks.open”,因为excel文件受密码保护(我在这方面遇到了问题)。因此,我在母版手册中运行“激励”宏,以打开激励报告并输入密码、只读假等。是否有某种方法可以从该外部记事本文件显式声明工作簿?(上帝,我就是这样一个磨砂工)让激励
成为一个函数
,它返回一个工作簿
对象。也许是一个宏,它可以驻留在主工作簿中,比如说。。“如果此工作簿是活动工作簿,则将另一个工作簿设置为活动工作簿”不,不需要这样做。您需要函数激励()作为工作簿
,而不是子文件
。