我在使用VBA/Excel宏和HTA的VBScript中遇到问题。问题只是VBScript,我还有其他两个组件,即VBA宏和HTA前端完美运行。但在我解释这个问题之前,我想你会帮助我,我必须帮助你理解VBScript的上下文。因此,基本上所有组件(VBScript,VBA宏和HTA)都是我正在构建的一个工具的一部分,用于自动执行一些手动操作。它几乎是这样的:VBScript - 如何让程序等待进程完成?
A - HTA
~~~~~~~~~~~~
- 用户选择从HTA/GUI的一些文件。
- 在HTA的HTML中,在“SCRIPT”标记中有一些VBScript将用户4输入文件作为参数传递给VBScript(由WScript.exe执行 - 为了清晰起见您可以参考注释1)
- 这个脚本,现在叫它myScript.vbs然后处理4个参数,其中3个是特定的文件,第4个是其中有多个文件的路径/文件夹位置 - (也见注释2为了清楚起见)
乙 - myScript.vbs
~~~~~~~~~~~~
- myScript.vbs打开前3个参数,它们是Excel文件。其中之一是具有我的VBA宏的* .xlsm文件。
myScript.vbs然后使用第四参数,它是一个PATH到包含多个文件,并指定文件夹到一个变量,以传递给FileSystemObject对象调用的GetFolder时,即
... 'Other code here, irrelevant for this post Dim FSO, FLD, strFolder ... 'Other code here, irrelevant for this post arg4 = args.Item(3) strFolder = arg4 Set FSO = CreateObject("Scripting.FileSystemObject" 'Get a reference to the folder you want to search Set FLD = FSO.GetFolder(strFolder) ...
从这里我创建了一个循环,这样我可以依次打开文件夹 内的文件,然后运行我的宏,即
... Dim strWB4, strMyMacro strMyMacro = "Sheet1.my_macro_name" 'loop through the folder and get the file names For Each Fil In FLD.Files Set x4WB = x1.Workbooks.Open(Fil) x4WB.Application.Visible = True x1.Run strMyMacro x4WB.close Next ...
请ñ注意当前3个Excel文件已经打开(在循环之前由代码控制,并且由于我对该部分没有问题而在这里未显示),我必须保持它们打开。
它是文件夹中的文件(作为第四个参数传递),它们必须按顺序打开和关闭。但是在开始和结束之间,我需要VBA /宏(在之前打开的3个Excel文件之一中写入)每次运行循环迭代并从文件夹打开一个新文件(我希望你遵循 - 如果不是请让我知道 :) )。
我遇到的问题是文件夹中的文件打开和关闭,打开和关闭,n次(n =自然文件夹中的文件数量),而无需等待宏运行。这不是我想要的。我已经在'x1.Run strMyMacro'声明之后以10秒的延迟尝试了WScript.sleep语句,但无济于事。
任何想法?请致电 QF。
NOTES:
1 - 为简单起见/清楚起见,这是如何:
strCMD = cmd /c C:\windows\system32\wscript.exe myScript.vbs <arg1> <arg2> <arg3> <arg4>
'FYI - This is run by creating a WShell object, wsObj, and using the .run method, i.e. WShell.run(strCMD)
2 HTA采用一块的JavaScript的那条用户第四输入文件(HTML:INPUT TYPE =“文件“)并将其传递给HTA中的VBScript。这让我不能独自选择HTML中的FOLDER。
你能不能添加'x4WB.close'到您的VBA宏的结束,而不是在VBScript中? – 2012-04-23 11:22:35
@oraclecertifiedprofessional:我会在稍后与其他参考文献一起提供。谢谢。 – 2012-04-23 16:40:15