首页 > 解决方案 > 如何等待 shell 命令完全打开应用程序?

问题描述

目前,我的 VBA 代码能够验证文件是否存在。如果存在,它会打开文件并用“Hello”替换所有“Test”实例。如果它不存在,它会发送一条消息说明存在。我的问题是,在打开文件(在本例中为 Word 文档)时,可能需要几秒钟,并且代码返回“运行时错误”。有没有办法可以等待应用程序完全打开,直到继续?我已经尝试过“Application.Wait”方法,但它并不那么可靠,因为该文件可能需要一秒钟以上的时间。此外,我看到其他论坛建议改用 WScript.Shell,但是有没有办法可以在我的代码中使用该类型?

If strFileExists = "" Then
    MsgBox "The selected file doesn't exist"
Else
    Set objShell = CreateObject("shell.application")
    objShell.ShellExecute strFileName, "", "", "open", 3
        
    Application.Wait (Now + TimeValue("00:00:01"))
    Set myRange = ActiveDocument.Content
        myRange.Find.Execute FindText:="Test", ReplaceWith:="Hello", _
        Replace:=wdReplaceAll
    Set objShell = Nothing
End If

标签: excelvba

解决方案


您可以使用 Windows API FindWindowExAFindWindowA函数来解决您的问题(我想您使用的是 Windows)。顺便说一句,我已经在我的工作中为同样的问题实现了 API 解决方案(无法提供代码,因为我不在我的工作桌面和 Linux、ATM 上)。

查找窗口标题是什么(只需打开文件并在标题栏中输入您看到的标题)。通常,它由文件名和应用程序的名称组成(例如,my_file.docx - Wordmy_file - Word)。然后,将FindWindowExAFindWindowA函数放入WhileUntil循环中。将窗口标题传递给函数。一旦找到具有指定标题的窗口,退出循环。


推荐阅读