【脱・マクロ記録】図面情報の自動流し込み術:外部データで表題欄を支配せよ
「マクロの記録」ボタンを押して、記録されたコードを眺めては「……で、これをどうやって実務で使える形にするんだ?」と立ち止まってしまったことはありませんか?
こんにちは。現場の自動化を支えるエンジニアの皆さん。
今日は、初学者が「ただの記録係」から「自動化エンジニア」へと脱皮するための、極めて実用的かつ本質的なステップをお話ししましょう。
今回挑戦するのは、「CSVファイルに書かれた情報を、SolidWorksの図面プロパティ(表題欄のデータ)へ一括で流し込む」というミッションです。
手作業での転記ミスは、設計の世界では致命傷になりかねません。これを自動化する術を身につければ、あなたの業務の信頼性は劇的に向上します。さあ、一緒にコードの深淵を覗いてみましょう。
1. 構造を理解する:SolidWorks APIの「黄金の階層」
コードを書く前に、まず「設計図」が必要です。SolidWorks VBAを扱う上で、最も重要なのは「オブジェクトの階層構造(オブジェクトモデル)」を理解することです。
バラバラに命令を出すのではなく、以下の順序で「対象」を絞り込んでいくイメージを持ってください。
1. SldWorks (アプリケーション):SolidWorksという「宇宙」そのもの。
2. ModelDoc2 (ドキュメント):今開いている「図面ファイル」という「世界」。
3. CustomPropertyManager (プロパティマネージャー):図面の中に隠された「情報の保管庫」。
今回の目的は、この「情報の保管庫(CustomPropertyManager)」に、外部から持ってきた値を書き込むことです。ここを意識できるだけで、エラーの半分は防げます。
2. 準備:外部データ(CSV)のフォーマット
まずは、流し込むためのデータを用意しましょう。メモ帳などで、以下のような形式の `data.csv` を作成してください。
(`プロパティ名,値` というシンプルな構成です)
DrawingNo,DWG-2023-001
Material,SS400
Weight,1.25
Designer,Taro_Tanaka
3. 実装:魂を込めたVBAコード
それでは、メインとなるコードを見ていきましょう。
単に動くだけでなく、「何をしているか」が後から見ても一目でわかる、保守性の高い書き方を心がけています。
Option Explicit
''' <summary>
''' CSVファイルから図面プロパティを読み込み、一括更新するマクロ
''' </summary>
Sub UpdateDrawingPropertiesFromCSV()
' --- 1. 変数の宣言(型を明示するのがプロの鉄則) ---
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swCustPropMgr As SldWorks.CustomPropertyManager
Dim filePath As String
Dim fileNo As Integer
Dim lineData As String
Dim dataArray() As String
Dim propName As String
Dim propValue As String
' --- 2. SolidWorksへの接続 ---
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc ' 現在開いているドキュメントを取得
' 図面が開かれていない場合のガード(エラー回避)
If swModel Is Nothing Then
MsgBox "図面ファイルを開いてから実行してください。", vbCritical
Exit Sub
End If
' 図面ドキュメントであることを確認
If swModel.GetType <> swDocDRAWING Then
MsgBox "図面ファイル(Drawing)に対して実行してください。", vbExclamation
Exit Sub
End If
' --- 3. プロパティマネージャーの取得 ---
' 図面全体のカスタムプロパティを操作する対象を特定
Set swCustPropMgr = swModel.Extension.CustomPropertyManager("")
' --- 4. CSVファイルの読み込み処理 ---
' ここではデスクトップに置いた "data.csv" を想定(パスは環境に合わせて変更してください)
filePath = "C:\temp\data.csv"
' ファイルの存在確認
If Dir(filePath) = "" Then
MsgBox "CSVファイルが見つかりません: " & filePath, vbCritical
Exit Sub
End If
fileNo = FreeFile
Open filePath For Input As #fileNo
' ファイルの末尾まで1行ずつ読み込むループ
Do While Not EOF(fileNo)
Line Input #fileNo, lineData
' 空行はスキップ
If Trim(lineData) <> "" Then
' カンマで分割(プロパティ名と値)
dataArray = Split(lineData, ",")
' 配列の要素が足りているかチェック
If UBound(dataArray) >= 1 Then
propName = Trim(dataArray(0))
propValue = Trim(dataArray(1))
' --- 5. プロパティの書き込み ---
' Add3は「なければ追加、あれば更新」という挙動をする非常に便利なメソッドです
' 引数: 名前, 設定値, 値, 属性
swCustPropMgr.Add3 propName, swCustomInfoText, propValue, swCustomPropertyReplaceValue
' デバッグ用:イミディエイトウィンドウにログ出力
Debug.Print "Updated: " & propName & " -> " & propValue
End If
End If
Loop
Close #fileNo
' --- 6. 完了通知 ---
MsgBox "図面プロパティの更新が完了しました!", vbInformation
' 再描画して変更を反映
swModel.ForceRebuild3 True
End Sub
4. ここが重要!エンジニアが教える「極限の知見」
コードをただコピーするだけでは、あなたはまだ「記録係」です。プロフェッショナルになるために、以下の3つのポイントを胸に刻んでください。
① `Add3` メソッドの魔法
コード内で `swCustPropMgr.Add3` を使っています。
「プロパティが既にある場合はどうするんだ?」という疑問が湧くかもしれませんね。`Add3` の第4引数に `swCustomPropertyReplaceValue` を指定することで、「存在しなければ新しく作り、存在すれば上書きする」という、実務で最も求められる挙動を一行で実現しています。これがAPIを使いこなす醍醐味です。
② エラーハンドリング(ガード句)の重要性
初心者が書くコードは、いきなり「本体の処理」から始まります。しかし、プロはまず「前提条件が満たされているか」をチェックします。
- 図面が開いているか? (`swModel Is Nothing`)
- それは本当に図面ファイルか? (`swDocDRAWING`)
- CSVファイルは存在するのか? (`Dir(filePath)`)
これらを確認する「ガード句」を入れることで、マクロが予期せぬエラーで止まり、ユーザーを混乱させるのを防いでいるのです。
③ パフォーマンスの重み
もし、数千行のCSVを処理する場合、ループの中で毎回 `swModel.ForceRebuild3`(再描画)を呼び出さないでください。再描画は非常に「重い」処理です。必ずすべての処理が終わった最後の一回だけ行う。これが、爆速なツールを作るための鉄則です。
5. 次のステップへ
おめでとうございます!これであなたは、「外部データを使ってSolidWorksを操る」という、自動化の入り口を突破しました。
次は、CSVだけでなく、Excelから直接データを読み込んだり、読み込んだデータに基づいて図面枠(シートフォーマット)自体を切り替えたりすることに挑戦してみてください。
「自動化とは、単に楽をすることではなく、人間がより創造的な設計に集中するための時間を作ることである」
この精神を忘れずに、一歩ずつ進んでいきましょう。応援していますよ!
