Abrufen von Daten aus einer SOLIDWORKS Funktion zur Anzeige in einem Makro

Hallo, ich habe ein Makro erstellt, mit dem Sie mein Teil konfigurieren können (Abmessungen, Bearbeitung mit Bestückung oder Materialabtrag usw.). Sobald das Teil erstellt ist, möchte ich, dass beim Neustart des Makros für dieses Teil die im Benutzerformular angezeigten Werte diejenigen sind, die ich in den Raum lege, um eine schnelle Vorschau meines geöffneten Teils zu erhalten. Andernfalls werden die Standardwerte angezeigt. Sie sollten also die Informationen aus dem Teil holen und an die richtigen Felder in meinem Benutzerformular zurücksenden.  

Ich habe es geschafft, die Abmessungen einer Skizze abzurufen und sie wie folgt zurückzugeben:    txt_Z.Text = Part.Parameter("D1@F"). SystemValue .  aber ich kann den TRUE- oder FALSE-Wert einer Funktion (mat. removal, bossing, drilling)  nicht abrufen, um zu sagen, ob sie in meinem Teil aktiviert oder gelöscht ist.

Wenn Sie eine Lösung haben, bin ich daran interessiert, :) 

Hallo

Sie müssen sich swFeat.IsSuppressed2 ansehen.

3 „Gefällt mir“
Option Explicit

Sub main()

    Dim swApp                   As SldWorks.SldWorks
    Dim swModel                 As SldWorks.ModelDoc2
    Dim swSelMgr                As SldWorks.SelectionMgr
    Dim swFeat                  As SldWorks.Feature
    Dim vConfNameArr            As Variant
    Dim vSuppStateArr           As Variant
    Dim i                       As Long
    Dim bRet                    As Boolean

   
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swSelMgr = swModel.SelectionManager
    Set swFeat = swSelMgr.GetSelectedObject6(1, -1)
    
    vConfNameArr = swModel.GetConfigurationNames
    vSuppStateArr = swFeat.IsSuppressed2(swThisConfiguration, vConfNameArr)
    Debug.Assert 0 = UBound(vSuppStateArr)
    
    Debug.Print "File = " & swModel.GetPathName
    Debug.Print "  " & swFeat.Name

        Debug.Print "    " & vConfNameArr(i) & " ---> " & vSuppStateArr(i)

End Sub

Hallo Cyril, das ist es, was ich brauche, ich habe es geschafft, mit diesem Code den Wert WAHR oder FALSCH zu bekommen.

Das Problem ist jedoch, dass ich die Funktion auswählen muss, bevor ich das Makro starte. Wie mache ich es so, dass beim Starten des Makros alle Funktionen verwendet werden, die ich ihm (in meinem Code) gegeben hätte, damit es mir sagt, ob es wahr oder falsch ist? ohne die Funktionen auswählen zu müssen?

(Ich gebe an, dass ich ein Anfänger in VBA bin, es ist alles, was ich fühle, als würde ich gerade erst anfangen, Makros auf sw zu machen)  

Hallo

Sie müssen alle Elemente des "Features" auflisten und nur an den Funktionen arbeiten, die Sie möchten, schauen Sie sich das hier angegebene Beispiel an.

Herzliche Grüße

2 „Gefällt mir“
Private Sub ActualiserInfosPiece()

    actualisationInfoPiece = True

    Dim swFeature As SldWorks.Feature
    Dim swModelDocExt As SldWorks.ModelDocExtension

    Dim featureName As String
    Dim status As Boolean
    Dim vSuppStateArr As Variant
    Dim vConfNameArr As Variant

    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swModelDocExt = swModel.Extension
    Set Part = swModel
    

    If swModel Is Nothing Then
        Exit Sub
    End If
    

    If (swModel.GetType <> swDocPART) Then
        Call MsgBox("Macro valable uniquement pour une pièce", vbOKOnly, "AVERTISSEMENT")

        Exit Sub
    End If
    

    
    vConfNameArr = swModel.GetConfigurationNames
    

    Set swFeature = Part.FirstFeature
    Do While Not swFeature Is Nothing
    

        featureName = swFeature.name
        status = swModelDocExt.SelectByID2(featureName, "BODYFEATURE", 0, 0, 0, False, 0, Nothing, 0)
        vSuppStateArr = swFeature.IsSuppressed2(swThisConfiguration, vConfNameArr)
        Select Case featureName
        
            Case "FONCTION SW 1"
                 TglB_N1.value = Not vSuppStateArr(0)
                 
            Case "FONCTION SW 2"
                 TglB_N2.value = Not vSuppStateArr(0)
                 
            Case "FONCTION SW 3"
                TglB_N3.value = Not vSuppStateArr(0)
                
            Case "FONCTION SW 4"
                 TglB_N4.value = Not vSuppStateArr(0)
            
            Case "FONCTION SW 5"
                TglB_N5.value = Not vSuppStateArr(0)
            
            Case FONCTION SW 6"
                TglB_N6.value = Not vSuppStateArr(0)
         
        End Select
        
        Set swFeature = swFeature.GetNextFeature() 
    Loop 


        ComboBox_HAUT.Text = Part.Parameter("D3@Esquisse FONCTION SW").SystemValue * 1000
        ComboBox_BAS.Text = Part.Parameter("D4@Esquisse FONCTION SW").SystemValue * 1000
        ComboBox_GAUCHE.Text = Part.Parameter("D2@Esquisse FONCTION SW").SystemValue * 1000
        ComboBox_DROIT.Text = Part.Parameter("D1@Esquisse FONCTION SW").SystemValue * 1000

        txt_X.Text = Part.Parameter("D3@Esquisse Débit").SystemValue * 1000
        txt_Y.Text = Part.Parameter("D4@Esquisse Débit").SystemValue * 1000
        txt_Z.Text = Part.Parameter("D1@F").SystemValue * 1000

    actualisationInfoPiece = False

End Sub

 

Problem gelöst, danke für Ihre Antwort .