注目の投稿

技術者として人として

 技術者として人として これまで、生きてきて、ひとりで解決していくものと考えていた。 知り合いなどの助言もあるが、それだけでも、やり切れない場合があった。 長い間、この性格を作り上げてきて正確などは、変わることがないだろうと決めつけていた。 思考は、そうそう簡単には変わらないもの。 ひとりでは、変わらないものであるということに気づくことができた。 日本では、カウンセリングという文化が浸透していないが、古くは仏教など、生活の為に、必要な事を、学ぶ機会が少ないと思う。 カウンセリングは、それを、実現できるものと思う。 ひとりでは解決できないこと、それは、正しい方法を見つけられないから。それを、学んでいないからで、専門的な第三者が心理学などを通して教えてくれることは救いとなる。 生きにくい世の中であることは間違いない。 生きやすくする方法もあると知ることができた。 技術者は孤独になるときがあり、ひとりでなんともならない時の対策方法を見失う時がある。日本ではカウンセリング文化が浸透していないような気がするが、ひとりでは解決出来ない時。救われる方法があると知る事になる。 https://t.co/LBKNwUyXg5 — chsugiyama (@chx_sugi_001) January 3, 2023

EXCEL VBA EXCELの表からAUTOCADの文字を書き換える. EXCEL VBA Rewrite the characters of AUTOCAD from the table of EXCEL.

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

コメント

このブログの人気の投稿

DesignSpark Mechanical オブジェクトの拡大、縮小 "Scale the body"

DesignSpark Mechanical エクスポートDXF(2D,3D)