🐡
SolidWorks(VBA)ファイルを一括変換(図面→DXF、モデル→STEP)
はじめに
図面やモデルを別の形式に変換する時に手作業で変換するのは時間も労力もかかりますよね。
VBAマクロを使えば、簡単に一括変換できます!
SolidWorksのVBAの基本的な使い方が知りたい方はこちらの記事をご確認ください。
前提条件
- SolidWorksのファイルダイアログは複数選択出来ないためExcelのファイルダイアログを使用しています。参照設定のリストから、「Microsoft Excel <バージョン> Object Library」を有効にしてください。
- 有効にする方法についてはこちらの記事をご確認ください。
マクロの機能
-
.slddrw
(ドローイング) ファイルをDXF形式に変換 -
.sldprt
(パーツ) と.sldasm
(アセンブリ) ファイルをSTEP形式に変換 - フォルダを表示して、変換したいファイルを選択
- 複数ファイルまとめて変換可能
使い方
- SolidWorksを開く: ※SolidWorksがインストールされている環境でのみ動作します。
- マクロを実行: 下記のコードをVBAエディタに貼り付けて実行します。
- ファイルを選択: フォルダが表示されるので、変換したいファイルを選択します。
- 変換完了: 自動的にファイルが変換され、元の場所に保存されます。
サンプルコード
Sub main()
Dim swApp As Object
Dim xlApp As Object
Dim FileFilter As String
Dim FilePaths As Variant
Dim FilePath As String
Dim FileExtension As String
Dim i As Integer
Dim swModel As Object
Dim longstatus As Long, longwarnings As Long
Dim DocType As Integer
Dim changeFileName As String
' SolidWorksのアプリケーションオブジェクトを取得
Set swApp = Application.SldWorks
' Excelアプリケーションのオブジェクトを作成
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = True
' ファイル選択フィルタの設定
FileFilter = "SW Files (*.sldprt;*.sldasm;*.slddrw), *.sldprt;*.sldasm;*.slddrw"
' ExcelのFileDialogを使用して複数選択可能なファイルダイアログを表示
With xlApp
FilePaths = .GetOpenFileName(FileFilter, , "変換するファイルを選択してください", , True)
End With
xlApp.Visible = False
' Excelアプリケーションを閉じる
xlApp.Quit
Set xlApp = Nothing
' ファイル選択結果を処理
If IsArray(FilePaths) Then
' 選択された各ファイルに対して処理を行う
For i = LBound(FilePaths) To UBound(FilePaths)
FilePath = FilePaths(i)
FileExtension = LCase$(Right(FilePath, Len(FilePath) - InStrRev(FilePath, ".")))
' ファイルタイプに基づいてドキュメントタイプを決定
Select Case FileExtension
Case "sldprt"
DocType = 1 ' Part
Case "sldasm"
DocType = 2 ' Assembly
Case "slddrw"
DocType = 3 ' Drawing
Case Else
MsgBox "不明なファイルタイプ: " & FileExtension, vbExclamation, "エラー"
Exit Sub
End Select
' ファイルを開く
Set swModel = swApp.OpenDoc6(FilePath, DocType, 0, "", longstatus, longwarnings)
If Not swModel Is Nothing Then
' ファイルの拡張子を大文字に変換
FileExtension = UCase(FileExtension)
' ファイルの拡張子に応じて変換処理を実行
changeFileName = Replace(FilePath, FileExtension, IIf(FileExtension = "SLDDRW", "dxf", "step"))
longstatus = swModel.SaveAs3(changeFileName, 0, 2)
' ファイルを閉じる
swApp.CloseDoc swModel.GetTitle
End If
Next i
Else
MsgBox "ファイルが選択されませんでした。", vbInformation, "通知"
End If
Set swApp = Nothing
End Sub
注意点
- 変換の際に拡張子の置換をしていますが、私の環境では全て大文字となっていたので大文字に変換しています。変換が上手くいかない場合適宜修正が必要です。
- ファイル変換には時間がかかることがあります。大量のファイルを変換する際は注意してください。
- 変換されたファイルは元のファイルと同じ場所に保存されます。保存先を変更する場合は適宜コードを変更してください。
- 実行前には、バックアップを取ることをお勧めします。変換前のオリジナルファイルを保護することを推奨します。
- SolidWorksの性質上、ファイル名が同じ場合開いているデータによっては参照先が更新されます。ファイルの依存関係には注意して実行してください。
おわりに
機械設計やCAD、電子工作についてつぶやいています。
興味がある方は、ぜひX(旧Twitter)をフォローしてください。
Discussion