🐡

SolidWorks(VBA)ファイルを一括変換(図面→DXF、モデル→STEP)

2023/12/11に公開

はじめに

図面やモデルを別の形式に変換する時に手作業で変換するのは時間も労力もかかりますよね。
VBAマクロを使えば、簡単に一括変換できます!

SolidWorksのVBAの基本的な使い方が知りたい方はこちらの記事をご確認ください。

前提条件

  • SolidWorksのファイルダイアログは複数選択出来ないためExcelのファイルダイアログを使用しています。参照設定のリストから、「Microsoft Excel <バージョン> Object Library」を有効にしてください。
  • 有効にする方法についてはこちらの記事をご確認ください。

マクロの機能

  • .slddrw (ドローイング) ファイルをDXF形式に変換
  • .sldprt (パーツ) と .sldasm (アセンブリ) ファイルをSTEP形式に変換
  • フォルダを表示して、変換したいファイルを選択
  • 複数ファイルまとめて変換可能

使い方

  1. SolidWorksを開く: ※SolidWorksがインストールされている環境でのみ動作します。
  2. マクロを実行: 下記のコードをVBAエディタに貼り付けて実行します。
  3. ファイルを選択: フォルダが表示されるので、変換したいファイルを選択します。
  4. 変換完了: 自動的にファイルが変換され、元の場所に保存されます。

サンプルコード

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