Skip to main content

Macro to save all opened documents silently using SOLIDWORKS API

This VBA macro allows to save all documents currently opened and modified in SOLIDWORKS silently using SOLIDWORKS API. Unlike default save as command where the various warning messages can be displayed while saving the files this macro will save documents without showing any popup messages.

Old version warning while saving file{ width=350 }

Macro can be configured to either display the error (in case some of the files were not saved properly) or to keep it silent.

Const SHOW_ERROR As Boolean = False 'True to show message box in case of an error, False to keep it silent

The result of the operation is displayed in the status bar.

Result displayed in the status bar

This macro can be used as a part of background integration where modal dialogs should not be displayed.

Const SHOW_ERROR As Boolean = False

Dim swApp As SldWorks.SldWorks

Sub main()

Set swApp = Application.SldWorks

Dim swFrame As SldWorks.Frame
Set swFrame = swApp.Frame()

Dim vModelWnds As Variant
vModelWnds = swFrame.ModelWindows

If Not IsEmpty(vModelWnds) Then

Dim i As Integer

Dim savedCount As Integer
Dim failedCount As Integer
savedCount = 0
failedCount = 0

For i = 0 To UBound(vModelWnds)

Dim swModelWnd As SldWorks.ModelWindow
Set swModelWnd = vModelWnds(i)
Dim swModel As SldWorks.ModelDoc2
Set swModel = swModelWnd.ModelDoc

If swModel.GetSaveFlag() Then

Dim errs As Long
Dim warns As Long

If False = swModel.Save3(swSaveAsOptions_e.swSaveAsOptions_Silent, errs, warns) Then
failedCount = failedCount + 1
Debug.Print "Failed to save " & swModel.GetTitle() & ": " & errs
Else
savedCount = savedCount + 1
Debug.Print "Saved " & swModel.GetTitle
End If

End If

Next

swFrame.SetStatusBarText "Saved " & savedCount & " document(s). Failed: " & failedCount & " document(s)"

If failedCount > 0 And SHOW_ERROR Then
swApp.SendMsgToUser2 "Some of the files failed to save automatically", swMessageBoxIcon_e.swMbWarning, swMessageBoxBtn_e.swMbOk
End If

End If

End Sub