【SolidWorks自動化の真髄】CSVとFSOで「数百のパーツ」を一括生成するバッチエンジンの作り方
こんにちは。日々、数万行のコードとSolidWorksのAPIの間で格闘しているエンジニアです。
「マクロの記録」ボタンを押して得られたコードを切り貼りする段階は卒業しましたか?もしあなたが、「数百個のバリエーション違いのパーツをいちいち手動で開いて数値を打ち変える」という、退屈でミスを誘発する作業に飽き飽きしているなら、今日は最高の日です。
今回は、FileSystemObject(FSO)とCSVを組み合わせ、SolidWorksのパーツを完全自動生成する「バッチリビルド・エンジン」の極意を伝授します。これさえマスターすれば、あなたはもう「作業者」ではなく「自動化の設計者」です。
—
1. なぜ「FSO × CSV」なのか?
数百個のバリエーションを管理する際、Excelのシートを直接操作するのは実は少し危険です。Excelが裏で重くなり、プロセスが残る原因になるからです。
一方、CSVファイルは軽量で、どんなテキストエディタでも編集可能。FileSystemObject (FSO) は、Windowsのファイルシステムを直接叩くための強力なツールです。この組み合わせにより、SolidWorksを「外部からの指令に従う精密な計算機」として扱うことができます。
—
2. 開発の全体像:自動化のロジック
自動化のエンジンは、以下のステップで流れます。
1. CSVの行を読み込む(FSO):1行ずつデータを取得。
2. パーツを開く(SolidWorks API):テンプレートやベースファイルを指定。
3. 寸法の書き換え(Dimension Object):特定の名前の寸法を狙い撃ち。
4. リビルドと保存(ModelDoc2):形状を更新し、別名で保存。
5. クリーンアップ:メモリを解放し、次へ進む。
—
3. 実践:バッチ生成コードの核
以下のコードは、`config.csv` から寸法値(例: 長さ, 幅, 高さ)を読み込み、パーツを量産するエンジニアリング・テンプレートです。
‘ 参照設定: Microsoft Scripting Runtime をONにしてください
Sub RunBatchPartGeneration()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim fso As New FileSystemObject
Dim ts As TextStream
Dim line As String, data() As String
‘ SolidWorksに接続
Set swApp = Application.SldWorks
‘ CSVファイルを読み込み
Set ts = fso.OpenTextFile(“C:\Temp\parts_list.csv”, ForReading)
‘ ヘッダーをスキップ(必要に応じて)
ts.SkipLine
Do Until ts.AtEndOfStream
line = ts.ReadLine
data = Split(line, “,”) ‘ CSVのカンマ区切りを配列化
‘ 1. パーツを開く
Set swModel = swApp.OpenDoc6(“C:\Temp\Template.SLDPRT”, swDocPART, swOpenDocOptions_Silent, “”, 0, 0)
‘ 2. 寸法の書き換え(”Length@Sketch1″ などを指定)
‘ ※寸法の名前は「寸法表示設定」で名前を付けておくのがコツ
swModel.Parameter(“Length@Sketch1”).SystemValue = CDbl(data(1)) 0.001 ‘ メートル変換
swModel.Parameter(“Width@Sketch1”).SystemValue = CDbl(data(2)) 0.001
‘ 3. リビルドと保存
swModel.ForceRebuild3 True
swModel.SaveAs2 “C:\Temp\Output\” & data(0) & “.SLDPRT”, 0, False, False
‘ 4. 閉じる
swApp.CloseDoc swModel.GetTitle
Loop
ts.Close
MsgBox “全パーツの生成が完了しました。”
End Sub
—
4. ここがプロの分かれ道:陥りやすい罠
① 「寸法名」の罠
コード内の `Parameter(“Length@Sketch1”)`。これが動かない場合、たいてい寸法に名前がついていません。SolidWorksの寸法プロパティで「寸法名」を英数字でしっかり定義してください。これをしていないと、コードは迷子になります。
② メモリの解放(重要!)
`swApp.CloseDoc` を忘れると、数百個のパーツを開いたままになり、PCがフリーズします。必ずループの最後で文書を閉じること。また、大規模なバッチ処理を行う場合は、定期的に `DoEvents` を挟み、Windowsからの応答を待つ余裕を持たせると安定感が増します。
③ 単位系の呪縛
SolidWorksのAPIは内部的に「メートル法(メートル)」で動きます。CSVに「100mm」と書いても、コード内では `0.1` に変換して渡すのがAPIの作法です。ここを間違えると、ミクロな部品ができあがってしまいます。
—
最後に:自動化は「設計」である
今回紹介した手法は、単なるマクロではありません。これは、あなたの設計思想を「システム化」する第一歩です。
まずは、CSVに3行だけデータを書いてテストしてみてください。成功した瞬間、SolidWorksがまるで意志を持っているかのように次々とパーツを生成し、保存していく光景が見られるはずです。
これが、SolidWorks VBAを掌握した者だけが見る景色です。
もし壁にぶつかったら、またいつでも戻ってきてください。私たちは常に、さらにその先へ行く準備ができています。
「自動化とは、手作業を減らすことではない。あなたを、より創造的な仕事へと解放することである。」
健闘を祈ります。
