43618


Autocad 2008 を使用しています。

図面内にダイナミックブロックがあり、移動や回転を行いたいのですが、  
VBAでダイナミックブロックを操作の対象とするために、名称を比較しながら行っています。

[code]

    For Each objEntity In ThisDrawing.ModelSpace
    
        ' 取り出された図形が対象を判定
        If objEntity.ObjectName = "AcDbBlockReference" Then
    
          If objEntity.Name = "ダイナミックブロック１" Then
    
             ' 対象物を回転
             rotationAngle = rrangle
             objEntity.Rotate jiku1, rotationAngle
    
[/code]

ダイナミックブロック名称を、"ダイナミックブロック１"としているのですが検索されません。  
"*U11"や"*U33"で検索されます。

どなたかご教授いただけないでしょうか。  
よろしくお願いいたします。


CC BY-SA 3.0
2018-04-17T07:34:00.647
43313
2018-04-27T18:54:11.827
28025
question
vba autocad
AutoCAD VBAでダイナミックブロックの名称が検索されません。


VBAはわかりませんが、AutoLispとAutoCADのランタイムについてそれなりに知っているのでご回答いたします。まずダイナミックブロックは例えばグリップでストレッチしたりすると名前が*Uで始まるブロック名(匿名ブロック)に変化するのはご存知ですね。  
<http://lee-mac.com/effectivename.html>  
上記サイトにlispの例ですが、ダイナミックブロックの名前を得る方法が書かれており、おそらくVBAならば

[code]

    objEntity.EffectiveName
    
[/code]

なるプロパティが使用可能ではないでしょうか？バージョンなどによって使用できない可能性などがあると思いますがお試しください。  
また通常のブロックにはこのプロパティがない可能性があると思いますので、上記の通りif文で処理を分岐してあげてください。


CC BY-SA 3.0
2018-04-27T18:54:11.827
43618
2018-04-27T18:54:11.827
25980
43313
answer