gpt4 book ai didi

vba - VBScript - 如何让程序等待进程完成?

转载 作者:行者123 更新时间:2023-12-01 21:18:49 25 4
gpt4 key购买 nike

我在与 VBA/Excel 宏和 HTA 一起使用的 VBScript 中遇到问题。问题只是 VBScript,我还有其他两个组件,即 VBA 宏和 HTA 前端,工作正常。但在我解释问题之前,我认为为了让您帮助我,我必须帮助您了解 VBScript 的上下文。

所以,基本上所有组件(VBScript、VBA 宏和 HTA)都是我正在构建的工具的一部分,该工具用于自动执行一些手动工作。它几乎是这样的:

A - HTA

~~~~~~~~~~~~

  1. 用户从 HTA/GUI 中选择一些文件。
  2. 在 HTA 的 HTML 中,“SCRIPT”标签内有一些 VBScript,它将用户 4 个输入文件作为参数传递给 VBScript(由 WScript.exe 执行 - 为了清楚起见,您可以在此处引用注释 #1)
  3. 从现在起,我们将脚本称为 myScript.vbs,然后处理 4 个参数,其中 3 个是特定文件,第 4 个是其中包含多个文件的路径/文件夹位置 - (为清楚起见,另请参阅注释#2)

B - myScript.vbs

~~~~~~~~~~~~

  1. myScript.vbs 打开前 3 个参数,它们是 Excel 文件。其中之一是一个 *.xlsm 文件,其中包含我的 VBA 宏。
  2. 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)
    ...
  3. 从这里我创建一个循环,以便我可以顺序打开文件夹中的文件然后运行我的宏,即

    ...
    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。

注释:

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

关于vba - VBScript - 如何让程序等待进程完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10279404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com