SolidWorksMakroprogrammierung
Lernpfad · Kapitel 3: Eigene FormulareFolge 12 von 36

Folge 12: Benutzereingaben mit der InputBox

19. Oktober 2021 · Einsteiger · Benutzeroberfläche

In diesem Video zeige ich wie eine Benutzereingabe im Makrolauf mit der InputBox erfolgen kann.

Option Explicit
Option Compare Text
Sub main()
    Dim swApp As SldWorks.SldWorks
    Set swApp = Application.SldWorks
    
    Dim swModel As ModelDoc2
    Set swModel = swApp.ActiveDoc
    
    If swModel Is Nothing Then
        swApp.SendMsgToUser "Keine Dokument geladen."
        Exit Sub
    End If
    
    Dim FullName As String
    FullName = swModel.GetPathName
    
    If FullName = "" Then
        swApp.SendMsgToUser "Die Datei wurde noch nie gespeichert." & vbCrLf & "Makrolauf wird abgebrochen."
        Exit Sub
    End If
    Dim eingabe As String
    Do
    eingabe = InputBox("Dateiendung eingeben", "Speichern als")
    Debug.Print eingabe
    If eingabe = "" Then Exit Sub
    FullName = Left(FullName, Len(FullName) - 6) & eingabe
    Dim ReturnValue As Boolean
    Select Case eingabe
        Case "png", "jpg", "tif", "psd"
            Dim Errors As Long
            Dim Warnings As Long
            ReturnValue = swModel.Extension.SaveAs3(FullName, swSaveAsVersion_e.swSaveAsCurrentVersion, swSaveAsOptions_Silent, Nothing, Nothing, Errors, Warnings)
        Case "pdf"
            Dim swExportPdfData As ExportPdfData
            Set swExportPdfData = swApp.GetExportFileData(swExportDataFileType_e.swExportPdfData)
            swExportPdfData.ViewPdfAfterSaving = False
            If swModel.GetType = swDocPART Or swModel.GetType = swDocASSEMBLY Then
                ReturnValue = swModel.Extension.SaveAs3(FullName, swSaveAsVersion_e.swSaveAsCurrentVersion, swSaveAsOptions_e.swSaveAsOptions_Silent, swExportPdfData, Nothing, Errors, Warnings)
            ElseIf swModel.GetType = swDocumentTypes_e.swDocDRAWING Then
                ReturnValue = swExportPdfData.SetSheets(swExportDataSheetsToExport_e.swExportData_ExportCurrentSheet, "")
            End If
        Case "dxf", "dwg"
            Dim swPart As PartDoc
            If swModel.GetType = swDocumentTypes_e.swDocPART Then
                Set swPart = swModel
                Dim varAlignment As Variant
                Dim dataAlignment(11) As Double
                dataAlignment(0) = 0#
                dataAlignment(1) = 0#
                dataAlignment(2) = 0#
                dataAlignment(3) = 1#
                dataAlignment(4) = 0#
                dataAlignment(5) = 0#
                dataAlignment(6) = 0#
                dataAlignment(7) = 1#
                dataAlignment(8) = 0#
                dataAlignment(9) = 0#
                dataAlignment(10) = 0#
                dataAlignment(11) = 1#
                varAlignment = dataAlignment
                ReturnValue = swPart.ExportToDWG2(FullName, swModel.GetPathName, swExportToDWG_e.swExportToDWG_ExportSheetMetal, True, varAlignment, False, False, 2053, Null)
            ElseIf swModel.GetType = swDocumentTypes_e.swDocDRAWING Then
                Dim tempSystemoptionAusgabeAktivieren As Integer
                tempSystemoptionAusgabeAktivieren = swApp.GetUserPreferenceIntegerValue(swUserPreferenceIntegerValue_e.swDxfOutputNoScale)
                swApp.SetUserPreferenceIntegerValue swUserPreferenceIntegerValue_e.swDxfOutputNoScale, 1
                ReturnValue = swModel.Extension.SaveAs3(FullName, swSaveAsVersion_e.swSaveAsCurrentVersion, swSaveAsOptions_e.swSaveAsOptions_Silent, Nothing, Nothing, Errors, Warnings)
                swApp.SetUserPreferenceIntegerValue swUserPreferenceIntegerValue_e.swDxfOutputNoScale, tempSystemoptionAusgabeAktivieren
            Else
                swApp.SendMsgToUser "Dieses Dokument wird nicht unterstützt."
                Exit Sub
            End If
        Case "stp", "step"
            If swModel.GetType = swDocPART Or swModel.GetType = swDocASSEMBLY Then
                Dim tempUserPref As Integer
                tempUserPref = swApp.GetUserPreferenceIntegerValue(swUserPreferenceIntegerValue_e.swStepAP)
                swApp.SetUserPreferenceIntegerValue swUserPreferenceIntegerValue_e.swStepAP, 214 '203/214
                ReturnValue = swModel.Extension.SaveAs3(FullName, swSaveAsVersion_e.swSaveAsCurrentVersion, swSaveAsOptions_Silent, Nothing, Nothing, Errors, Warnings)
                swApp.SetUserPreferenceIntegerValue swUserPreferenceIntegerValue_e.swStepAP, tempUserPref
            Else
                swApp.SendMsgToUser "Das STEP Format kann nur Teile oder Baugruppen speichern."
                Exit Sub
            End If
        Case Else
            swApp.SendMsgToUser "Dateiendung nicht unterstützt."
            Exit Sub
    End Select
    Debug.Print "Speichern erfolgreich? " & ReturnValue
    Loop
End Sub

Fragen zu diesem Beitrag? Stell sie im Discord.