表題のエラーで悩んでいます。
このエラーは、下記のコードを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
解決済! 解決策の投稿を見る。
@Anonymous さん、こんにちは
オートデスクコミュニティにようこそ。
該当する改修は無いのですが、AutoCAD LT 2019.1.2 Update を適用した後に動作を確認してみてください。
また、念のために、新規にプロジェクトを作成してから確認をお願いできますか。
@Anonymous さん、こんにちは。
確証はないのですが、各線分ごとに変数を用意して、変数を開放しない状態で動作を確認してみてください。
' それぞれを変数として用意
Dim lineObj1 As AcadLine
Dim lineObj2 As AcadLine
' 解放しない状態でAddLineを実行
Set lineObj1 = ThisDrawing.ModelSpace.AddLine(startPoint, endPoint)
Set lineObj2 = ThisDrawing.ModelSpace.AddLine(startPoint, endPoint)
@Anonymous さん、
こちらでこのマクロを VBARUN コマンドを連続して実行してマクロを連続実行してみましたが、エラーが再現できました。この問題を調査してみましたが、過去にも同じような問題が報告されておりました。しかし、原因は特定できておりません。こちらでツールパレットからこのマクロを実行してみましたが、その場合はエラーは表示されませんでした。回避策として、よろしければ、ツールパレットからの利用をご検討お願いします。
こちらで以下のように VBAプロジェクトを作成しました。
そして、CUI エディタでコマンドを新規作成してください。上記の例の場合、以下の形式でコマンドのマクロを設定してください。このコマンドをツールパレットにドラッグ&ドロップして、ツールパレットからコマンドを複数回実行してみてください。
^C^C-vbarun "D:/VBATest/Project.dvb!ThisDrawing.macro"
ありがとうございます。
どこからマクロを起動するか、で、挙動が変わるのですね。
私のまわりには、リボンだったり、ツールバーだったり、いろいろなスタイルで作図をする人がいます。
(ツールパレット派は、1人だけ知っています)
使いやすいスタイルで使えるのがAutoCADの良いところなので、使い方を強制しないやり方にしたいと思います。
すこし、時間が空いてしまいましたが、私の方でもいくつか試したことがあります。
同じマクロに、「On Error Resume Next」をいれて、数回実行したところ、1本目でエラーが起こっていても、2本目は問題なく作図されることがわかりました。
5本ラインを描くようにしても、エラーが起こっているときは、1本目だけ作図されず、2本目以降はすべて作図されます。
このことから、1本目の作図時だけ、エラーをトラップして、エラーがあったときはもう1回、同じライン作図メソッドを実行することで、とりあえずは、目的の動作が得られます。
エラーをトラップするという、自分としては、若干残念な方法のような気がしますが、これにて解決とします。
ありがとうございました。
@Anonymous さん、
回避策の情報共有をありがとうございます。こちらでもこの問題を注視させていただきます。
よろしくお願いいたします。
お探しの情報が見つからないときは、コミュニティで質問しましょう。困っている人がいたら、情報を教えてあげましょう。