SolidWorks VBAの極意:アセンブリを「一瞬でバックアップ」する自動化術
こんにちは。SOLIDWORKSの世界へようこそ。
日々、設計の最前線でマウスを握りしめ、「あ!保存し忘れた!」「間違えて上書き保存してしまった!」という冷や汗をかいた経験はありませんか?
「マクロの記録」ボタンを押して操作をなぞるだけでは、プロフェッショナルな自動化には到達できません。今日は、現在の設計環境を読み解き、安全にバックアップを生成する「現場で本当に使える」VBAスクリプトの書き方を伝授します。
これをマスターすれば、あなたの設計環境は劇的に堅牢になります。
—
なぜ「パスの取得」が重要なのか?
自動化の第一歩は、「今、自分がどこで何をしているか」をプログラムに理解させることです。
SOLIDWORKSのAPI(アプリケーション・プログラミング・インターフェース)において、現在開いているドキュメントを取得するのは `swApp.ActiveDoc` です。ここからファイルパスやファイル名を抽出することで、プログラムは「どのファイルを、どこへコピーすべきか」を判断できるようになります。
—
実践:アセンブリ・バックアップ自動化コード
以下のコードをVBAエディタ(Alt + F11)に貼り付けてみてください。
Option Explicit
Sub QuickBackupAssembly()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim strPath As String, strName As String, strFolder As String
Dim backupPath As String, timeStamp As String
Dim fso As Object
‘ 1. SOLIDWORKSアプリケーションの接続
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
‘ エラーハンドリング:アセンブリが開かれていない場合の回避
If swModel Is Nothing Then
MsgBox “ドキュメントが開かれていません。”
Exit Sub
End If
‘ 2. ファイル情報の抽出
strPath = swModel.GetPathName
If strPath = “” Then
MsgBox “このファイルはまだ保存されていません。一度保存してから実行してください。”
Exit Sub
End If
‘ ファイル名とフォルダパスを分解
strFolder = Left(strPath, InStrRev(strPath, “\”))
strName = Mid(strPath, InStrRev(strPath, “\”) + 1)
‘ 3. バックアップ先の設定(ここでは元のフォルダにBackupフォルダを作成)
Dim targetDir As String
targetDir = strFolder & “Backup\”
Set fso = CreateObject(“Scripting.FileSystemObject”)
If Not fso.FolderExists(targetDir) Then fso.CreateFolder (targetDir)
‘ 4. タイムスタンプの付与(バックアップの履歴を残すため)
timeStamp = Format(Now, “yyyyMMdd_HHmmss_”)
backupPath = targetDir & timeStamp & strName
‘ 5. ファイルのコピー
fso.CopyFile strPath, backupPath
MsgBox “バックアップが完了しました:” & vbCrLf & backupPath
End Sub
—
コードを紐解く:3つの重要ポイント
① `GetPathName` の絶対的役割
`swModel.GetPathName` は、フルパスを返します。これがないと、プログラムは「保存ボタン」を押す場所さえ分かりません。もしこの結果が空(`””`)なら、それは「新規作成しただけで未保存」の状態。ここで止めてあげるのが、堅牢なプログラムの作法です。
② `Scripting.FileSystemObject`(FSO)という武器
VBA標準の機能だけでファイルを扱うのは大変ですが、`FileSystemObject`を使えば、フォルダの存在確認や作成、ファイルのコピーが驚くほど直感的に書けます。これは自動化エンジニアの必須ツールです。
③ タイムスタンプで「履歴」を守る
単に上書きバックアップをするのではなく、`Format(Now, …)` を使って時刻をファイル名に付け加えるのがプロの流儀です。「いつの時点の設計か」がファイル名で分かるだけで、トラブル時の復旧スピードが格段に上がります。
—
初心者が陥りやすい「罠」
- 「未保存ドキュメント」への対応: `GetPathName` が空の時に無理やりコピーしようとするとエラーで落ちます。必ず `If strPath = “” Then` でチェックを入れましょう。
- ファイルが開いている間の競合: SOLIDWORKSで開いている最中のファイルを別名でコピーする際、FSOの `CopyFile` は強力ですが、読み取り専用属性などの影響を受けることがあります。必要に応じて属性の確認を行うのがベテランの配慮です。
—
まとめ:ここをクリアすれば、あなたはもう「脱・初心者」
このマクロは単なる「コピー機能」ではありません。
「SOLIDWORKSが管理している現在の状態を理解し、安全な場所へ退避させる」というシステム管理の思想が詰まっています。
まずはこのコードを動かし、自分の環境に合わせて「バックアップ先をサーバー上に変える」といったカスタマイズに挑戦してみてください。
設計業務の自動化は、あなたの「考える時間」を最大化するための投資です。一歩ずつ、確実にマスターしていきましょう。応援しています!
