SolidWorks VBAの極意:FileSystemObjectで「全自動バッチ処理」の城を築く
こんにちは。SolidWorksのAPIの世界へようこそ。
「マクロの記録」ボタンを押して生成されたコードを眺め、「なぜ動くのかわからないまま使っている」という段階から一歩踏み出しませんか?
今日あなたに伝授するのは、「指定フォルダ以下の全ファイルを一括で叩き起こし、一斉に処理させる」という自動化エンジニアの登竜門です。これさえ習得すれば、数百の部品のプロパティを一括更新したり、図面をすべてPDF化したりといった「徹夜作業」から永久に解放されます。
—
1. なぜ「FileSystemObject (FSO)」を使うのか?
SolidWorks API単体でもファイルを開くことはできますが、それは「特定のファイル」を指定する場合の話。フォルダ内のファイルを次々に呼び出すには、Windowsが持つ強力なファイル操作ライブラリ「FileSystemObject」を相棒にするのが鉄則です。
これを組み合わせることで、あなたのプログラムは「ファイルという個」ではなく「フォルダという集合」を支配できるようになります。
—
2. バッチ処理基盤の設計図
まずは、コードを書く前に「処理の流れ」を脳内にインストールしましょう。
1. 準備: `SldWorks`(親)と`ModelDoc2`(個)のオブジェクトを定義する。
2. 探索: FSOを使ってフォルダ内の全ファイルをループする。
3. 開く: `swApp.OpenDoc6` でファイルをSolidWorksへ読み込む。
4. 処理: ここであなたの「やりたいこと」を実行する。
5. 保存・終了: `swModel.Save` して `swApp.CloseDoc` で閉じる(ここがメモリ管理の要!)。
—
3. 実践:全ファイルバッチ処理コード
以下のコードをコピーして、標準モジュールに貼り付けてみてください。現場でそのまま使える「型」です。
Option Explicit
‘ 参照設定: Microsoft Scripting Runtime を有効にしてください
‘ (VBAエディタ > ツール > 参照設定)
Sub BatchProcess_Main()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim fso As FileSystemObject
Dim targetFolder As Folder
Dim fileItem As File
Dim folderPath As String
‘ 1. インスタンスの生成
Set swApp = Application.SldWorks
Set fso = New FileSystemObject
‘ 処理したいフォルダを指定
folderPath = “C:\TestFiles\”
Set targetFolder = fso.GetFolder(folderPath)
‘ 2. フォルダ内の全ファイルをループ
For Each fileItem In targetFolder.Files
‘ 拡張子で対象を絞る(部品:sldprt, アセンブリ:sldasm)
If LCase(fso.GetExtensionName(fileItem.Path)) Like “sldpr” Or _
LCase(fso.GetExtensionName(fileItem.Path)) Like “sldasm” Then
‘ 3. ファイルを開く (バックグラウンドで開くのが賢いやり方)
Set swModel = swApp.OpenDoc6(fileItem.Path, swDocNONE, swOpenDocOptions_Silent, “”, 0, 0)
If Not swModel Is Nothing Then
‘ — ここに「やりたい処理」を記述 —
Debug.Print “処理中: ” & swModel.GetTitle
‘ 例: swModel.SaveAs … など
‘ ———————————
‘ 4. メモリ解放の儀式
swApp.CloseDoc swModel.GetTitle
End If
End If
Next fileItem
MsgBox “全自動バッチ処理、完了しました!”
End Sub
—
4. 初学者が必ずハマる「落とし穴」と対策
このコードを書いていて、あるいは実行していて遭遇するであろうトラブルを事前に予言します。
① 「メモリが死ぬ」問題
SolidWorksは非常に重いアプリケーションです。数百ファイルを連続で開くとメモリリークが起きやすい。
対策: `swApp.CloseDoc` を必ず行うこと。また、もし処理が重い場合は `DoEvents` をループの合間に入れて、OSに呼吸をさせてあげてください。
② 「読み取り専用」や「エラー」で止まる
ファイルを強制的に開こうとして、書き込みロックや警告ダイアログが出るとマクロは停止します。
対策: `OpenDoc6` の引数に `swOpenDocOptions_Silent` を指定してください。これが「黙って開け」という命令になり、ダイアログによる停止を防ぎます。
③ 参照設定の忘れ
`FileSystemObject` を使うには、VBAエディタの「ツール」→「参照設定」から 「Microsoft Scripting Runtime」 にチェックを入れる必要があります。これをしないと `Dim fso As FileSystemObject` が「ユーザー定義型は定義されていません」と怒り出します。
—
5. 次のステップへ
ここまでできれば、あなたはもう「マクロの記録」の呪縛から解き放たれました。
次に目指すべきは、「エラーハンドリング(On Error GoTo)」の実装です。どのファイルで処理が失敗したのかをログファイルに残す技術を習得すれば、真の自動化エンジニアへの道が開かれます。
SolidWorksのAPIは、使いこなせばあなたの分身として24時間働く最強の部下になります。まずはこの基盤コードを動かし、その快感を味わってみてください。
何か詰まったら、いつでも聞いてくださいね。応援しています!
