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

2024-01-14

我在与 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。

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(使用前将#替换为@)

VBScript - 如何让程序等待进程完成? 的相关文章

  • 使用VBA删除Excel中的非重复数据

    我尝试删除非重复数据并保留重复数据 我已经完成了一些编码 但什么也没发生 哦 这是错误 哈哈 这是我的代码 Sub mukjizat2 Dim desc As String Dim sapnbr As Variant Dim shortDe
  • 如何自动将图表从 Excel(或 Calc)导出为 PNG

    问题 我正在开发一个 Web 应用程序 它将数据从数据库导出到 Excel 包括图表 这首先是导出的主要原因 现在我希望图表在网页上也可见 而不需要导出数据并打开下载的 Excel 文件 这当然可以使用 JS 库来完成 但是由于图表相当复杂
  • 如何使用 VBS 将 ping 写入文本文件

    如果我使用 VBS 运行一些 CMD 命令 在本例中为 ping 如何使用 VBS 而不是 DOS 将命令写入文本文件 Set objCmdTest WScript CreateObject WScript Shell Set Output
  • 将 Excel 文件导入 Access 时更改数据类型

    将 Excel 文件导入 Access 时 有什么方法可以更改默认数据类型吗 顺便说一下 我使用的是 Access 2003 我知道有时我可以自由地将任何数据类型分配给正在导入的每个列 但这只能在我导入非 Excel 文件时进行 EDIT
  • 通过 VBA MS_Access 将 MS Access 表导出为 dBase 5

    如何通过 VBA 将单个表导出为 dBase 5 文件 目前我正在使用这个VBA代码 DoCmd TransferDatabase acExport dBase IV DB Total acTable DB Total C Data Fal
  • 如何使用 pandas.to_excel() 创建 Excel **表格**?

    Need the achieve this programmatically from a dataframe https learn microsoft com en us power bi service admin troublesh
  • WebAPI 和 Angular JS Excel 文件下载 - 文件损坏

    我正在 WebAPI 中生成 Excel 文件 我将其 存储 在内存流中 然后放入响应 如下所示 var result new HttpResponseMessage HttpStatusCode OK Content new Stream
  • CURL 相当于使用 VBA 的 POST JSON 数据

    我知道这与之前提出的一些问题类似 但有些东西仍然对我不起作用 如何执行以下命令 curl X POST data statements json H Content Type application json user username p
  • Outlook 中用于删除重复电子邮件的宏 -

    Public Sub RemDups Dim t As Items i As Integer arr As Collection f As Folder parent As Folder target As Folder miLast As
  • java.exe 以非零退出值 1 结束

    只是为了开始 我并不是真正尝试从 Android 中的 xlsx 文件中读取单元格 我已经尝试了几乎所有我在 Google 上搜索到的内容 但是每次 在两台不同的 PC 上 都是 Java 1 7 0 79 当我尝试构建 运行 这个应用程序
  • 您可以调整用户窗体的这些代码吗:使其小而高效

    当 userfrom 按以下顺序激活时 我想在运行时添加动态用户表单控件 例如 标签 文本框 我想要类似以下的东西 当用户表单激活时 它需要询问用户字段的数量 他 她想要插入 如果用户回答7 则需要按以下顺序添加字段 3 列顺序 标签1 文
  • Excel VBA:排序,然后复制和粘贴

    所有 我需要编写一个执行以下操作的宏 将数据输入到 E 列的最后一个空白单元格后 按 E 列对整个工作表进行降序排序 工作表排序后 2a 将单元格复制到紧邻首次输入数据的单元格左侧的相邻单元格 2b 将复制的数据粘贴到最初输入数据的同一行的
  • 无法使用 Excel JavaScript API 设置 NumberFormat

    我正在使用 Excel Javascript API 在搜索文档后 仍然找不到我想要实现的解决方案 因此 我想将所有内容设置为数字格式 文本 这样 Excel 的自动格式设置就不会与任何单元格的内容混淆 不会删除前导零或更改日期格式 文档建
  • 在 Django(Python) 中向用户提供 Excel(xlsx) 文件下载

    我正在尝试使用 Django 创建和提供 Excel 文件 我有一个 jar 文件 它获取参数并根据参数生成 excel 文件 并且它可以正常工作 但是 当我尝试获取生成的文件并将其提供给用户下载时 文件损坏了 它的大小为 0kb 这是我用
  • 如何从另一个 Excel 实例引用工作簿

    我相信我的问题相当简单 我有一个工作簿 我正在使用它从另一个软件 SAP 获取一些数据 当我从软件导出数据时 它会自动打开一个 xlsx 文件 然后我需要做的是从该文件复制一些数据 粘贴到我的原始工作簿上 然后关闭该文件 我的代码中给我带来
  • 使用 VBA 在 Access 表中记录计数

    我正在尝试获取表的记录数 如果计数大于 17 则创建一个新表 Dim rst As DAO Recordset strSQL Select from SKUS Set rst db OpenRecordset strSQL If rst R
  • 关闭工作簿时删除范围,xls vba

    我想要范围 Range A2 G z 关闭工作簿时删除 有人可以帮我处理代码吗 谢谢 凯 这就是我尝试过的 Option Explicit Sub Makro1 insert clipboard Workbooks Pfl SchutzSt
  • 如何暂停特定时间? (Excel/VBA)

    我有一个 Excel 工作表 其中包含以下宏 我想每秒循环一次 但如果我能找到执行此操作的函数 那就很危险了 难道不可能吗 Sub Macro1 Macro1 Macro Do Calculate Here I want to wait f
  • 索引匹配不起作用

    对于下表 如果 A 列和 B 列都匹配 如何检索 C 列A 列 B 列 C 列城市 1 城市 10 本地城市 2 城市 21 远程城市 3 城市 1 远程城市 4 城市 2 本地 我尝试使用索引和匹配 但得到 N A Enter as an
  • 根据其他列中的条件对列中的唯一值求和

    A B 1 Total 1 900 2 Product A 700 3 Product A 700 4 Product B 300

随机推荐