こんにちは、AutoCADのVBAでブロック内の属性値の位置を取得するプログラムを組んでいたのですが、 32bitOSのXPで動いていたプログラムが、64bitの7だと動きません。 問題のプログラムコードは insertionPoint です。 最初はGetAttributesメソッドを使ってvariant型の配列に属性値を格納しました。 しかし、これを実行すると、 「実行時エラー '451':Property Let プロシージャが定義されておらず、Property Get プロシージャからオブジェクトが返されませんでした。」 と表示され、上手くいきません。これはどちらのOSでも同じでした。 そこで、GetAttributesメソッドを使って格納する配列をAcadAttributeReference型にしてみました。 この方法では32bitOSのXPでは動くようになりました。 しかし、64bitの7では「x64VBAServerは動作を停止しました」とでて VBA(x64VBAServer18.exe)が強制終了してしまいます。 何か対処法をご存じないでしょうか? もし、わからない方でも、次のマクロを実行してどんな状況になるかだけでも教えてほしいです。 その時は使用OSと32bitなのか64bitなのか、あと使用しているAutoCADの製品も追記してください。 使用したOSは以下の通りです PC1 32bit XP AutoCAD 体験版 メモリ2G PC2 64bit 7 AutoCAD Mechanical メモリ8G Sub 属性値の位置の取得() ' Create the block Dim blockObj As AcadBlock Dim insertionPnt(0 To 2) As Double insertionPnt(0) = 0#: insertionPnt(1) = 0#: insertionPnt(2) = 0# Set blockObj = ThisDrawing.Blocks.Add(insertionPnt, "CircleBlock") ' Add a circle to the block Dim circleObj As AcadCircle Dim center(0 To 2) As Double Dim radius As Double center(0) = 0: center(1) = 0: center(2) = 0 radius = 1 Set circleObj = blockObj.AddCircle(center, radius) ' Add a Attribute to the block Dim attObj As AcadAttribute Dim height As Double ' Define the attribute definition height = 3# insertionPnt(0) = 0#: insertionPnt(1) = 0#: insertionPnt(2) = 0 ' Create the attribute definition object in model space Set attObj = blockObj.AddAttribute(height, acAttributeModeVerify, "New Prompt", insertionPnt, "NEW_TAG", "New Value") ' Insert the block Dim blockRefObj As AcadBlockReference Dim attRefObj As Variant Dim attRefObj2() As AcadAttributeReference insertionPnt(0) = 0#: insertionPnt(1) = 0#: insertionPnt(2) = 0 Set blockRefObj = ThisDrawing.ModelSpace.InsertBlock(insertionPnt, "CircleBlock", 1#, 1#, 1#, 0) 'attRefObjはVariant型 attRefObj = blockRefObj.GetAttributes 'attRefObj2はAcadAttributeReference型 attRefObj2 = blockRefObj.GetAttributes 'どちらのOSでも同様のエラーを発生する。エラーメッセージは下記の文 '「実行時エラー '451':Property Let プロシージャが定義されておらず、Property Get プロシージャからオブジェクトが返されませんでした。」 MsgBox (attRefObj(0).insertionPoint(0)) 'こちらのMsgboxを実行するときは上のMsgboxの頭に"'"を付ける(コメントアウトする) '32bit windowsXPだと無事取得できる、64bit windows7だと落ちる 'エラーメッセージは「x64VBAServerは動作を停止しました」 MsgBox (attRefObj2(0).insertionPoint(0)) ZoomAll '64bitのwindows7でもエラーメッセージを出さないようにする方法を教えてください End Sub
↧