2017-02-01 8 views
2

標準的な方法を使用して、Excel(私の場合はWindows 36のExcel 365)からRhinoScriptモジュールに外部アクセスする例を試してみようとしています。VB - オブジェクト作成を待つ

Dim Rhino As Object 
Dim RhinoScript As Object 

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

しかし、私は最終行で "Runtime 424 - Object Required"エラーが発生しています。

Rhino4が起動している間にWindows 10のUACがアップデーターを起動してシステムに変更を加えてから起動させるようにするため、GetScriptObjectはCreateObjectが完全に完了するのを待っていないようですGUI。 Rhino4がGetScriptObjectがヒットする前に完全に起動するように、これらのステートメントをデバッグして行単位で表示すると、すべて正常に動作します。だから、Rhino4が完全に起動するまでGetScriptObjectを待たせる方法はありますか?私はチェックのRhinoの値(何もありません)をループ設定しようとしましたが、すぐに落ちます。私はVBに少し慣れているので、初心者の質問になるかもしれないことにお詫び申し上げます。

おかげで、

マット

+2

あなたはvbaからrhinoへの参照を追加して、その自動化の洞察を可能にすることはできますか? –

+3

このAPIプログラムの外観はhttps://github.com/dalefugier/TestVbAutomationとhttp://4.rhino3d.com/5/rhinoscript/introduction/external_access.htmが必要です。私は@ Matのマグに同意する、何もない状態ではなく、エラーをループする必要があります、私はミックスに再試行カウントを追加するだろう、ちょうど場合には、100000回の試行と、スリープAPIを使用して再試行。 –

+0

外部アクセスページ@Nathan_Savへのリンクが表示されませんでした。 Rhino3Dに付属の.chmヘルプファイルのみを使用していました。参考に感謝します。うまくいけば、これは私の問題を解決するのに役立ちます。 – tranzmatt

答えて

5

私は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 

お知らせ数字が予想されたもの以外のものであればエラーの再発生。これは、状況が絶望的である場合、無限ループを防ぐことを試みることです。

Nathan made a good comment無限ループに対する追加の保護について - ここでは、その値がタイプをオーバーフローするまでランタイムエラー6が発生するまでカウンタをインクリメントします。 32,768回の反復が長すぎるとタイムアウトになる場合は、定数とIfのチェックを使用することもできます。

おそらく最も良い解決策ではありませんが、になるはずです。理想的には、Rhino4.Application APIを探索し、インスタンスが使用可能かどうかを判断するために使用できるメンバーが公開されているかどうかを確認してください。 IsReady、またはおそらくStateです。

+0

はい、あなたと@ Nathan_Savの両方が有用なフィードバックを提供しました。ポインタをありがとう。うまくいけば、これは私の問題を解決します。元のコードはRhino v3のためにXPとExcel 2010上で行われたので、UACのようなものは問題ではありませんでした。 Windows 10とExcel 365は仕事を盛り上げたようだ。 – tranzmatt

関連する問題