【发布时间】:2021-12-01 21:03:28
【问题描述】:
我使用 VBA 来自动化最近更改了其 COM API 的外部应用程序。新的 API 异步加载文件(以前是同步的),所以当我尝试加载文件时,我需要等待文件加载触发器才能继续。
我已经尝试过 Microsoft 网站(EX1、EX2)上列出的方法,这些方法也是 StackOverflow 上 accepted answer 的一部分。
下面是我在一个名为 UCExternal 的类模块中包含外部应用程序对象的代码:
Public WithEvents obj As External.Application
Private fileLoaded As Boolean
Private Sub obj_OnFileLoaded(ByVal lLayer As Long, ByVal strUNCPath As String)
Debug.Print lLayer
Debug.Print strUNCPath
fileLoaded = True
End Sub
Public Sub LoadSingleFile(fileStr As String)
fileLoaded = False
obj.LoadFile 0, fileStr
Do
DoEvents
Loop Until fileLoaded
End Sub
然后这就是我在普通代码模块中使用工作表上的按钮运行的内容:
Sub TryLoadFile()
Dim extObj as New UCExternal
set extObj.obj = CreateObject("External.Application")
filePath = "path/to/file"
extObj.LoadSingleFile filePath
End Sub
事件代码似乎永远不会触发,而是 Do Loop 只会运行直到 Excel 崩溃。不知道有没有办法确认应用程序确实发送了事件触发器?我已经阅读了该应用程序的新文档,这就是他们说要等待的事件。我也向他们寻求帮助,但我不确定是否有更一般的东西我可能遗漏了。我过去没有处理过 Excel 外部的事件。如果我只是使用调试器单步执行它并手动退出 Do Loop,最终在加载的文件上工作的其余代码也能正常工作,所以它确实会加载文件。
【问题讨论】:
标签: excel vba event-handling