Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VB脚本--“Excel”;“活动工作簿”;被炒了。如何声明显式工作簿?_Excel_Vba_Vbscript_Automation - Fatal编程技术网

VB脚本--“Excel”;“活动工作簿”;被炒了。如何声明显式工作簿?

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

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

我目前有一个vbs脚本,但我在
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文件受密码保护(我在这方面遇到了问题)。因此,我在母版手册中运行“激励”宏,以打开激励报告并输入密码、只读假等。是否有某种方法可以从该外部记事本文件显式声明工作簿?(上帝,我就是这样一个磨砂工)让
激励
成为一个
函数
,它返回一个
工作簿
对象。也许是一个宏,它可以驻留在主工作簿中,比如说。。“如果此工作簿是活动工作簿,则将另一个工作簿设置为活动工作簿”不,不需要这样做。您需要
函数激励()作为工作簿
,而不是
子文件