我在与 VBA/Excel 宏和 HTA 一起使用的 VBScript 中遇到问题。问题只是 VBScript,我还有其他两个组件,即 VBA 宏和 HTA 前端,工作正常。但在我解释问题之前,我认为为了让您帮助我,我必须帮助您了解 VBScript 的上下文。
因此,基本上所有组件(VBScript、VBA 宏和 HTA)都是我正在构建的工具的一部分,该工具用于自动执行一些手动操作。它几乎是这样的:
A - HTA
~~~~~~~~~~~~
- 用户从 HTA/GUI 选择一些文件。
- 在 HTA 的 HTML 中,“SCRIPT”标签内有一些 VBScript,它将用户 4 个输入文件作为参数传递给 VBScript(由 WScript.exe 执行 - 为了清楚起见,您可以在此处参考注释 #1)
- 脚本,我们称之为myScript.vbs从现在开始,然后处理 4 个参数,其中 3 个是特定文件,第 4 个是其中包含多个文件的路径/文件夹位置 -(为清楚起见,另请参阅注释 #2)
B - myScript.vbs
~~~~~~~~~~~~
- myScript.vbs 打开前 3 个参数,它们是 Excel 文件。其中之一是一个 *.xlsm 文件,其中包含我的 VBA 宏。
-
然后 myScript.vbs 使用第四个参数,它是包含多个文件的文件夹的路径,并将其分配给一个变量,以便在调用 GetFolder 时传递给 FileSystemObject 对象,即
... '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="file")并将其传递给 HTA 内的 VBScript。这让我解决了无法在 HTML 中专门选择文件夹的问题。
您需要告诉运行等待该过程完成。就像是:
const DontWaitUntilFinished = false, ShowWindow = 1, DontShowWindow = 0, WaitUntilFinished = true
set oShell = WScript.CreateObject("WScript.Shell")
command = "cmd /c C:\windows\system32\wscript.exe <path>\myScript.vbs " & args
oShell.Run command, DontShowWindow, WaitUntilFinished
在脚本本身中,像这样启动 Excel。调试开始时可见:
File = "c:\test\myfile.xls"
oShell.run """C:\Program Files\Microsoft Office\Office14\EXCEL.EXE"" " & File, 1, true
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)