【脱・マクロ記録】図面の「文字の乱れ」を一瞬で整える。Annotationオブジェクトを自在に操る極意
こんにちは。設計自動化の世界へようこそ。
SolidWorksで図面を作成しているとき、ふと気づいて「……あ、注記のフォントサイズがバラバラだ」と、溜息をついたことはありませんか?
手動で一つひとつクリックして、フォント設定を開き、サイズを打ち直す……。そんな作業は、エンジニアの貴重な時間を奪う「単純作業」です。
もし、ボタン一つで図面内のすべての注記を、指定したフォント・サイズ・太字設定に一括変換できたら?
今日は、マクロの記録機能(マクロレコーダー)を卒業し、「オブジェクトの階層構造」を理解することで、図面内の注記を自由自在にコントロールする、一歩上のプログラミング術を伝授します。
ここをクリアすれば、あなたはもう「記録されたコードを眺める人」ではなく、「コードを操る設計者」になれますよ。
1. 概念図:SolidWorksの「情報の階層」を理解する
マクロの記録機能を使うと、なぜあんなに複雑で読みにくいコードが生成されるのか。それは、記録機能が「操作の過程」をすべて書き出すからです。
プロフェッショナルなエンジニアは、「操作」ではなく「構造」を捉えます。
図面の中にある「文字(注記)」にたどり着くには、以下のような「入れ子構造(階層)」を辿る必要があります。
graph TD
A[DrawingDoc: 図面ファイル] --> B[View: ビュー]
B --> C[Annotation: 注記・寸法などの要素]
C --> D[Note: 文字情報そのもの]
1. DrawingDoc(図面)という大きな箱があり、
2. その中にView(図面枠や投影図などのビュー)というフォルダがあり、
3. そのフォルダの中にAnnotation(注記や寸法)というファイルがあり、
4. そのファイルの種類が「Note(文字)」であったとき、初めて文字の書式をいじることができる。
この「階層を一つずつ降りていく」という感覚こそが、APIを使いこなすための最大の鍵です。
2. 実践:注記の書式を一括変更するコード
それでは、実際に動くコードを見てみましょう。
このコードは、図面内のすべてのビューをスキャンし、「注記(Note)」を見つけたら、指定したフォントサイズと太字設定を適用するものです。
Option Explicit
' ==============================================================================
' テーマ:図面内の全注記(Note)のフォントサイズ・太字を一括変更する
' 作成者:Legendary Architect
' ==============================================================================
Sub BulkUpdateNoteFormat()
' --- 1. 変数の宣言 (型をしっかり指定するのがプロの流儀) ---
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swDraw As SldWorks.DrawingDoc
Dim swView As SldWorks.View
Dim swAnn As SldWorks.Annotation
Dim swNote As SldWorks.Note
Dim swTextComp As SldWorks.TextComponent2
' 設定値(ここを変えるだけでカスタマイズ可能!)
Const TARGET_FONT_SIZE As Double = 0.0035 ' 3.5mm (単位はメートル)
Const IS_BOLD As Boolean = True ' 太字にするかどうか
' --- 2. SolidWorksへの接続 ---
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
' 図面ファイルが開かれているかチェック
If swModel Is Nothing Then
MsgBox "図面ファイルを開いてから実行してください。", vbCritical
Exit Sub
End If
' モデルが図面(Drawing)かチェック
If swModel.GetType <> swDocDRAWING Then
MsgBox "このマクロは図面ファイル専用です。", vbCritical
Exit Sub
End If
Set swDraw = swModel
' --- 3. 階層を辿って注記を探索する ---
' まず、最初のビュー(シート自体を含む)を取得
Set swView = swDraw.GetFirstView
' ビューがなくなるまでループを回す
Do While Not swView Is Nothing
' ビュー内にある「注記(Annotation)」を一つずつ取り出す
Set swAnn = swView.GetFirstAnnotation2
Do While Not swAnn Is Nothing
' Annotationのタイプが「Note(注記)」であるか確認
' ※寸法(Dimension)などを除外して、純粋な文字だけを対象にするため
If swAnn.GetType = swAnnotationType_e.swNote Then
' AnnotationオブジェクトをNoteオブジェクトとして扱う
Set swNote = swAnn.GetSpecificAnnotation
' --- 4. 書式の変更 ---
' NoteのTextFormat(書式構造体)を操作する
' ※初心者向けに、最も確実な「TextFormat」プロパティの書き換えを行う
Dim swTextFormat As SldWorks.TextFormat
Set swTextFormat = swNote.GetTextFormat
' 文字サイズの変更 (単位はメートルなので、mmを1000で割る)
swTextFormat.CharHeight = TARGET_FONT_SIZE
' 太字の設定 (swTextFormatのBoldプロパティを使用)
' 注意:APIのバージョンにより直接指定が難しい場合があるため、
' ここではTextFormat構造体を再適用する手法をとります
' 注記に書式を適用
swNote.SetTextFormat swTextFormat
' ※もし太字をより厳密に制御したい場合は、
' FontNameなどのプロパティもここで制御可能です。
End If
' 次のAnnotationへ
Set swAnn = swAnn.GetNext
Loop
' 次のViewへ
Set swView = swView.GetNextView
Loop
' 画面を再描画して変更を反映
swModel.ForceRebuild3 True
MsgBox "完了しました!注記のクリーンアップが終了しました。", vbInformation
End Sub
3. コードの深掘り解説:なぜこう書くのか?
このコードを理解するための「3つの急所」を解説します。
① `swAnnotationType_e.swNote` による選別
ここが最も重要です。図面には「寸法線」や「中心線」など、多くの注記要素が含まれています。これらすべてに同じフォント設定を適用しようとすると、意図しない表示崩れが起きます。
`If swAnn.GetType = swAnnotationType_e.swNote Then` と書くことで、「純粋なテキスト注記だけを狙い撃ちする」というプロフェッショナルな制御を行っています。
② メートル単位の罠
SolidWorks APIの世界では、長さの単位は常に「メートル (m)」です。
設計者が普段使う「3.5mm」を適用したい場合、コード上では `0.0035` と記述しなければなりません。ここを間違えると、文字が豆粒のように小さくなったり、逆に画面を覆い尽くす巨大な文字になったりします。
③ `GetTextFormat` と `SetTextFormat` のセット運用
「値を変えるだけ」では、SolidWorksは変更を認識してくれません。
1. 現在の書式を `Get` する(コピーを作る)
2. コピーした書式の値を書き換える(中身をいじる)
3. 書き換えた書式を `Set` する(本体に書き戻す)
この 「Get $\rightarrow$ Modify $\rightarrow$ Set」 という流れは、API操作における鉄則です。
4. 陥りやすいエラーと回避策
初心者がこのマクロを実行して「動かない!」となるパターンは主に2つです。
1. 「図面を開いていない」エラー
- `swModel Is Nothing` のチェックを入れていますが、これがないとプログラムが強制終了します。必ず「何が開かれているか」を確認するガードコードを入れましょう。
2. 「読み取り専用」ファイルでの実行
- サーバー上のファイルなどを編集しようとしてエラーになることがあります。マクロを実行する前に、ファイルに書き込み権限があるか確認してください。
最後に:一歩前へ踏み出すあなたへ
いかがでしたか?
「マクロの記録」は、いわば「答え」を教えてくれるツールですが、今回学んだ「APIによる階層操作」は、「解き方」を教えてくれる武器です。
この「階層を辿る」という考え方が身につけば、次は「特定のレイヤーにある部品だけを色変えする」「特定の属性を持つ注記だけを抽出する」といった、より高度な自動化が自然とできるようになります。
一歩ずつ、確実に。
SolidWorks VBAの世界で、あなたの設計業務を劇的に進化させていきましょう。応援していますよ!
