EXCEL VBA EXCELの表からAUTOCADの文字を書き換える.
EXCEL VBA Rewrite the characters of AUTOCAD from the table of EXCEL.
エクセルの変換表にしたがって、AUTOCADの文字列を変更するコードです。
A1セルに検索する文字、名前を「検索文字」
B1セルに変換後の文字、名前を「変換文字」
としておきます。
下記のコードは、マルチテキストです、
If ent.ObjectName = "AcDbMText" Then
この行で、マルチテキストかどうかを判断しています。
ここを、ダイナミックテキストにする場合には、
If ent.ObjectName = "AcDbText" Then
とします。
オブジェクトの名前が、わからなかったのですが、ブレークポイントを、図の位置に設定しておいて
CADの図に、両方のマルチテキストと、ダイナミックテキストを書いておいて、
ブレークポイントに止まったときに、ent.ObjectName の内容を確認することで、
確認することが出来ました。
ObjectNameが分からないときには、円や、Line、Solidなど、
CAD上に作図しておき、ブレークポイントで確認することで、Nameを確認することが出来ます。
ただ、ブロックの属性について、調べていたのですが、まだ、分かっていません。
ローカルウインドウに、何か、表示されていないかと、調べたのですが、探しきれませんでした。
ただし、ブロックエディタの画面でも、テキストの内容がわかりますので、
ブロックエディタ画面で、文字の変更は可能です。
おそらく、Block, Model,Paper このあたりが、なにかあるとおもっているのですが。
下記のコードはモデル空間に対してのマクロになり、ブロックに対しては、違う方法になるのだと、
現在は、1文字ですが、これを、FOR分などで、変換文字列をぞれぞれ、確認するようにすれば、
CAD上の文字変換が可能になります。
変換する文字のサイズの変更や、色の変更も、たぶん必要になってくると思っています。
サンプルコード
Option Explicit
'モジュール定義
Private AcadDoc As AutoCAD.AcadDocument
' AutoCAD アプリケーション変数
Private AcadApp As AutoCAD.AcadApplication
'-------------------------------------------
' 文字抽出&変更 マルチテキスト
'-------------------------------------------
Public Sub ChangeMText()
Dim trgTxt As String
Dim ent As AcadEntity
Dim ChangeStr As String
Dim SarchStr As String
Set AcadApp = GetObject(, "AutoCAD.Application") 'xls追加
Set AcadDoc = AcadApp.ActiveDocument() 'xls追加
ChangeStr = Range("変換文字")
SarchStr = Range("検索文字")
With AcadDoc 'xls変更 ThisDrawing
For Each ent In .ModelSpace
If ent.ObjectName = "AcDbMText" Then
trgTxt = ent.TextString
If InStr(trgTxt, SarchStr) Then ' 変換する文字が含まれているか
ent.TextString = Replace(trgTxt, SarchStr, ChangeStr) '代入
End If
End If
Next
End With
End Sub
コメント
コメントを投稿