SOLIDWORKS APIを試してみた② プログラムをChatGPTで変更してみた

はじめに

前回、「SOLIDWORKS APIでプログラムを取り込む」という内容で、図面ファイルをPDFとDXFに変換して同じフォルダに置くプログラムを実行させてみました。

(前回の記事) SOLIDWORKS APIを試してみた

しかし、変換した図面データは設計データと同じフォルダではなく、できれば他の場所に作成してほしい…。筆者の場合、データ提出する場合はデスクトップにフォルダを作り、各ファイル名の末尾に提出日の日付を付けて保存し、データをまとめてフォルダごと圧縮をかけるということを行います。そこで、この変更を自力でやってみようと考えました。

ChatGTPでプログラムを分析

プログラムに関してはさっぱりわからないので、まず、もらったプログラムの中身をSW上の「ツール」⇒「マクロ」⇒「編集」で開き、コピペしてChatGTPに読ませてみました。

プログラムの解析結果

おお!なにも伝えてないのに、ナニでソレをしたいってのがよくわかったねえ。
その上、問題点の指摘と改善策の提案までしてくださいます。

問題点と改善策の提案

改善策を盛り込んだプログラムを実行させてみると、その通りにできていました。
これはもしや、変更したい内容を書けば改善して頂けるのでは??
試しに、「このプログラムでデスクトップに「提出データ」という新しいフォルダを作って、そこにPDFとDXFファイルに変換して保存するようにしたい。ファイル名末尾には_YYMMDDで今日の日付をつけたい。」とお願いしてみると、数秒でプログラムが生成されました。

修正後のプログラム生成の様子

これを同じくSWにコピペして取り込み、図面のファイルを開いてアイコンをクリックすると、デスクトップの新しいフォルダに日付のついたPDFとDXFファイルが出来ました。

実際のプログラムがこちら

Sub main()
   Dim swApp As Object
    Dim Part As Object
    Set swApp = Application.SldWorks
    Set Part = swApp.ActiveDoc

    ' アクティブなドキュメントがない場合、メッセージを表示して終了
    If Part Is Nothing Then
        MsgBox "アクティブな図面ドキュメントがありません。", vbExclamation, "エラー"
        Exit Sub
    End If

    ' 図面データ(SLDDRW)以外は処理しない
    If Part.GetType <> 3 Then
        MsgBox "図面(SLDDRW)ファイルではありません。", vbExclamation, "エラー"
        Exit Sub
    End If

    ' ファイルが保存されているか確認
    If Part.GetPathName = "" Then
        MsgBox "ファイルが保存されていません。保存してから実行してください。", vbExclamation, "エラー"
        Exit Sub
    End If

    ' デスクトップの「提出データ」フォルダのパス
    Dim sDesktopPath As String
    Dim sSaveFolder As String
    sDesktopPath = Environ("USERPROFILE") & "\Desktop"
    sSaveFolder = sDesktopPath & "\提出データ"

    ' フォルダが存在しない場合は作成
    If Dir(sSaveFolder, vbDirectory) = "" Then
        MkDir sSaveFolder
    End If

    ' 図面のファイル名(拡張子なし)
    Dim sBaseFileName As String
    Dim lFindPoint As Long
    lFindPoint = InStrRev(Part.GetPathName, "\")
    sBaseFileName = Mid(Part.GetPathName, lFindPoint + 1)
    lFindPoint = InStrRev(sBaseFileName, ".")
    If lFindPoint > 0 Then
        sBaseFileName = Left(sBaseFileName, lFindPoint - 1)
    End If

    ' 日付を追加
    Dim sDateStr As String
    sDateStr = "_" & Format(Date, "yyyymmdd")

    ' 保存ファイルのパス
    Dim sPdfPath As String, sDxfPath As String
    sPdfPath = sSaveFolder & "\" & sBaseFileName & sDateStr & ".pdf"
    sDxfPath = sSaveFolder & "\" & sBaseFileName & sDateStr & ".dxf"

    ' PDFとDXFを保存
    Dim longstatus As Long
    longstatus = Part.SaveAs3(sPdfPath, 0, 2)
    longstatus = Part.SaveAs3(sDxfPath, 0, 2)

    ' 完了メッセージ
    MsgBox "図面データを保存しました。", vbInformation, "完了"
End Sub

おわりに

解説してもらうつもりでプログラムをコピぺしたChatGTPでしたが、懇切丁寧に教えて頂けた上に修正と変更までしてもらい、その上日本語での変更要望に応えて頂けるとは、なんと仕事のできる方でしょう。
これはもしかしたらプログラムを一から組むのも丸投げできるのでは??
次回やってみましょう。

よかったらシェアしてね!