gpt4 book ai didi

vba - VB - 等待对象创建

转载 作者:行者123 更新时间:2023-12-03 00:50:28 25 4
gpt4 key购买 nike

我正在尝试遵循示例,使用标准方法从 Excel(在我的例子中是 Windows 10 上的 Excel 365)外部访问 RhinoScript 模块。

Dim Rhino As Object
Dim RhinoScript As Object

Set Rhino = CreateObject("Rhino4.Application")
Set RhinoScript = Rhino.GetScriptObject()

但我在最后一行遇到了“运行时 424 - 需要对象”错误。

问题似乎是 GetScriptObject 没有等待 CreateObject 完全完成,因为当 Rhino4 启动时,Windows 10 的 UAC 会提示我允许更新程序对系统进行更改,然后才允许它启动图形用户界面。如果我逐行调试这些语句,以便 Rhino4 有时间在 GetScriptObject 命中之前完全启动,则一切正常。那么,有没有办法让GetScriptObject等到Rhino4完全启动呢?我尝试设置一个循环来检查 Rhino 的值(什么都没有?),但它立即失败了。我对 VB 有点陌生,所以对可能是新手问题表示歉意。

谢谢

马特

最佳答案

我对 Rhino API 一无所知,可能有更好的方法来做到这一点。

如果您知道运行时错误是由您所描述的内容引起的,并且Rhino.GetScriptObject最终会发生要成功,您可以循环直到它起作用:

Dim iterations As Integer 'max value: 32,767
Do
iterations = iterations + 1 'will *eventually* overflow if loop keeps failing
On Error Resume Next 'switch off error handling
Set RhinoScript = Rhino.GetScriptObject
On Error GoTo 0 'restore error handling (IMPORTANT!)
If Err.Number <> 0 And Err.Number <> 424 Then Err.Raise Err.Number ' rethrow
Err.Clear
DoEvents ' so that the host app remains responsive while the loop runs
While RhinoScript Is Nothing

如果数字不是预期的 424,请注意重新引发错误;这是为了(尝试)在情况绝望时防止无限循环。

Nathan made a good comment关于添加额外的保护以防止无限循环 - 这里通过递增计数器直到其值溢出其类型(引发运行时错误 6)。如果 32,768 次迭代超时时间太长,您还可以使用常量和 If 检查。

可能不是最好的解决方案,但应该有效。理想情况下,您将探索 Rhino4.Application API,看看它是否公开了可用于确定实例是否“准备好”使用的任何成员。 IsReady,或者State也许。

关于vba - VB - 等待对象创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41984357/

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