コミュニティ
AutoCAD - 日本語
製品テクニックや情報を共有、質問、解答したり、情報を検索など使い方は様々です。お役立てください。
キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

VBA、実行時エラー「呼び出しメソッド SetObjectId (インタフェース IAcadBaseObject の) が失敗しました」について

7件の返信7
解決済み
返信
メッセージ1/8
Anonymous
1198 件の閲覧回数, 7 件の返信

VBA、実行時エラー「呼び出しメソッド SetObjectId (インタフェース IAcadBaseObject の) が失敗しました」について

表題のエラーで悩んでいます。
このエラーは、下記のコードを3回か4回、繰り返し実行すると発生します。
VBEからの実行では、発生しませんが、AutoCAD上でメニューバーや、ボタンを作成して、そこから連続実行すると発生します。
エラーが発生しないときは、問題なく作図されます。
作図する図形が、1つの時は、発生しません。下記のように、複数の図形を作成すると、発生します。
エラーのダイアログが出たとき、デバッグのボタンを押すと、必ず、1つ目の線の作図のところを指します。

最初は、
https://support.microsoft.com/ja-jp/help/178510/excel-automation-fails-second-time-code-runs
これのことかと思い、修飾の足りないところを探したりしていたのですが、サンプルに毛の生えた程度まで短くしても発生するので、多分、違うのかと考えています。

私の環境は、Windows10(64)+AutoCAD 2019です。
特殊な点としては、会社の指定で、AutoCADがDドライブに入っています。
(関係あるかわかりませんが)

エラーをトラップして、処理してしまう方法もあるとは思いますが、本質的ではない気がして、なおさら悩ましいです。
よろしくお願いします。

Sub test01()
  
  Dim lineObj As AcadLine
  Dim startPoint(0 To 2) As Double
  Dim endPoint(0 To 2) As Double
  
  startPoint(0) = 1
  startPoint(1) = 1.5
  startPoint(2) = 0
  endPoint(0) = 5
  endPoint(1) = 15
  endPoint(2) = 0
  
  Set lineObj = ThisDrawing.ModelSpace.AddLine(startPoint, endPoint)
  lineObj.Update
  Set lineObj = Nothing
  
  Set lineObj = ThisDrawing.ModelSpace.AddLine(startPoint, endPoint)
  lineObj.Update
  Set lineObj = Nothing
  
End Sub
7件の返信7
メッセージ2/8
K.NAOI
次のアカウントへの返信: Anonymous

@Anonymous さん、こんにちは
オートデスクコミュニティにようこそ。

 

該当する改修は無いのですが、AutoCAD LT 2019.1.2 Update を適用した後に動作を確認してみてください。

 

また、念のために、新規にプロジェクトを作成してから確認をお願いできますか。




K.NAOI
ATI Support Specialist
Global Product Support
Autodesk Ltd. Japan

メッセージ3/8
Anonymous
次のアカウントへの返信: K.NAOI


@K.NAOIさん、ありがとうございます。

2019.1.2 Updateについては、適用済です。

新規にプロジェクトを作成しても、同じエラーが出ました。

 

メッセージ4/8
K.NAOI
次のアカウントへの返信: Anonymous

@Anonymous さん、こんにちは。

 

確証はないのですが、各線分ごとに変数を用意して、変数を開放しない状態で動作を確認してみてください。


' それぞれを変数として用意
Dim lineObj1 As AcadLine
Dim lineObj2 As AcadLine

 

' 解放しない状態でAddLineを実行
Set lineObj1 = ThisDrawing.ModelSpace.AddLine(startPoint, endPoint)
Set lineObj2 = ThisDrawing.ModelSpace.AddLine(startPoint, endPoint)




K.NAOI
ATI Support Specialist
Global Product Support
Autodesk Ltd. Japan

メッセージ5/8
Anonymous
次のアカウントへの返信: K.NAOI

@K.NAOIさん

 

個別に変数を用意する、変数の解放はしない。というのも試してみましたが、同じでした。

3回目の実行でエラーが出ます。

これに加えて、最後にまとめて解放する。も、やってみましたがダメでした。

 

メッセージ6/8
Katsuaki.T
次のアカウントへの返信: Anonymous

@Anonymous さん、

 

こちらでこのマクロを VBARUN コマンドを連続して実行してマクロを連続実行してみましたが、エラーが再現できました。この問題を調査してみましたが、過去にも同じような問題が報告されておりました。しかし、原因は特定できておりません。こちらでツールパレットからこのマクロを実行してみましたが、その場合はエラーは表示されませんでした。回避策として、よろしければ、ツールパレットからの利用をご検討お願いします。

 

こちらで以下のように VBAプロジェクトを作成しました。

 

VBA IDE.jpg

 

そして、CUI エディタでコマンドを新規作成してください。上記の例の場合、以下の形式でコマンドのマクロを設定してください。このコマンドをツールパレットにドラッグ&ドロップして、ツールパレットからコマンドを複数回実行してみてください。

 

^C^C-vbarun "D:/VBATest/Project.dvb!ThisDrawing.macro"

 

TP.jpg

 

 


Katsuaki Takamizawa
Technical Support Specialist
メッセージ7/8
Anonymous
次のアカウントへの返信: Katsuaki.T

@Katsuaki.Tさん

 

ありがとうございます。

どこからマクロを起動するか、で、挙動が変わるのですね。

 

私のまわりには、リボンだったり、ツールバーだったり、いろいろなスタイルで作図をする人がいます。

(ツールパレット派は、1人だけ知っています)

使いやすいスタイルで使えるのがAutoCADの良いところなので、使い方を強制しないやり方にしたいと思います。

 

すこし、時間が空いてしまいましたが、私の方でもいくつか試したことがあります。

同じマクロに、「On Error Resume Next」をいれて、数回実行したところ、1本目でエラーが起こっていても、2本目は問題なく作図されることがわかりました。

5本ラインを描くようにしても、エラーが起こっているときは、1本目だけ作図されず、2本目以降はすべて作図されます。

このことから、1本目の作図時だけ、エラーをトラップして、エラーがあったときはもう1回、同じライン作図メソッドを実行することで、とりあえずは、目的の動作が得られます。

 

エラーをトラップするという、自分としては、若干残念な方法のような気がしますが、これにて解決とします。

ありがとうございました。

 

メッセージ8/8
Katsuaki.T
次のアカウントへの返信: Anonymous

@Anonymous さん、

 

回避策の情報共有をありがとうございます。こちらでもこの問題を注視させていただきます。

 

よろしくお願いいたします。

 


Katsuaki Takamizawa
Technical Support Specialist

お探しの情報が見つからないときは、コミュニティで質問しましょう。困っている人がいたら、情報を教えてあげましょう。

フォーラムに投稿  

State of Design & Make 2024

EE RESOURCES