VBA – Kraftausführung von Gleichungen

Hallo zusammen,

Ich habe nach einem Ausschnitt VBA-Codes für Solidworks 2024 gesucht, der Folgendes macht:
Klicken Sie im Gleichungsfenster auf " Werkzeuge " → " Gleichungen " → " OK ", das Ziel ist es, die Ausführung meiner Gleichungen zu erzwingen, die sich mit dem Rebuild nicht korrekt aktualisieren, aber mit dieser Methode ist es, sie in einen größeren Code zu integrieren, der von einer weiteren Assembly auf der Ebene ausgelöst wird.

Vielen Dank im Voraus, falls ihr die Infos habt.
Guillaume.

Ich habe diesen Code, der einer tiefen Rekonstruktion entspricht (Shift + CTR + Q).
Rekonstruktion, die nicht identisch ist, wenn man eine traditionelle VBA-Funktion ausführt (wie bei Visiativ gesehen).
Jetzt, auf SW 2023, hat es sehr gut funktioniert.

'Lance l'ID pour le racourcis CTRL+SHIFT+Q = reconstruction profonde
Sub ForceRebuildSD()
    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    
    If swModel Is Nothing Then
        MsgBox "Aucun document ouvert.", vbExclamation
        Exit Sub
    End If
    
    ' Ctrl+Shift+Q via ID de commande exact (SolidWorks 2023)
    swApp.RunCommand 3311, ""
    
End Sub

Wenn nichtfunktional, ist es möglich, die exakte Ordnungs-ID für die Gleichung zu finden und dann zu validieren.

Bonjour;

Les API de Solidworks proposent ceci:

'-----------------------------------------------------
' Preconditions:
' 1. Verify that the specified part to open exists.
' 2. Open the Immediate window.
'
' Postconditions:
' 1. Sets the equation's Automatic solve order option
'    to true, which results in the model's
'    independent equations executing before
'    dependent equations, if any.
' 2. Examine the Immediate window.
'
' NOTE: Because this model is used elsewhere,
' do save changes.
'-----------------------------------------------------
Option Explicit

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swEquationMgr As SldWorks.EquationMgr
Dim fileName As String
Dim errors As Long, warnings As Long

Sub main()

    Set swApp = Application.SldWorks
    fileName = "C:\Users\Public\Documents\SOLIDWORKS\SOLIDWORKS 2018\samples\tutorial\api\partEquations.sldprt"
    Set swModel = swApp.OpenDoc6(fileName, swDocumentTypes_e.swDocPART, swOpenDocOptions_e.swOpenDocOptions_Silent, "", errors, warnings)
    Set swEquationMgr = swModel.GetEquationMgr
    'Make sure that this model includes equations
    'by getting the number of equations
    Debug.Print "Number of equations: " & swEquationMgr.GetCount
        If swEquationMgr.GetCount >= 1 Then
            'Get whether equations are automatically
            'solved in sequence
            Debug.Print "  Are equations automatically solved in sequence? " & swEquationMgr.AutomaticSolveOrder
            If swEquationMgr.AutomaticSolveOrder Then
                Exit Sub
            Else
                'Automatically solve equations in sequence
                swEquationMgr.AutomaticSolveOrder = True
                Debug.Print "  Are equations automatically solved in sequence? " & swEquationMgr.AutomaticSolveOrder
            End If
        Else
            Debug.Print "No equations included with this model."
        End If

End Sub
1 „Gefällt mir“

Danke! Beim Neuaufbau habe ich alles versucht, aber es funktioniert nicht so, wie ich es möchte. Ich baue gerade aus einer Kopfmontage wieder auf und auf einem bestimmten Niveau der Baumstruktur verhält es sich nicht so, wie ich es möchte. Andererseits, sobald ich das Gleichungsmodul des betreffenden Elements öffne und validiere, wird alles korrekt. Und ich möchte, dass diese Operation nicht so, sondern von einem Operator durchgeführt wird, der meinen Konfigurator benutzen muss, ohne solche Fragen zu stellen. Er wird nicht einmal unbedingt die Teile identifizieren können, die nicht neu berechnet wurden. Und wenn ich es mit Makroaufnahmen versuche, bekommt es keinen Code aus meinen Operationen...

Danke! Ich bin tatsächlich auch auf diese Seite gestoßen. Es ist nicht unbedingt das, was ich suche, aber ich überlege, ob ich es auf eine umständliche Weise nutzen kann. Wird er unbedingt die Gleichungen ausführen, die er findet, indem er es benutzt? Ich kann es nicht mit Sicherheit sagen.

Ansonsten ist hier ein Makro angehängt, um die ID eines Auftrags zu kennen. (Danke CodeStack)
Erfassung von commands.swp (39,5 KB)

Wirf einfach die Hand in Capturing_commands1.
Dann drücke du in deinem Gleichungsmenü, um die versteckte ID der Funktion zu entdecken, hier die ID=51 für dein Menü (sw2023).
Dann führst du den Code aus, um die ID in LaunchCommand zu starten:

Sub LancerCommande()
    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    
    If swModel Is Nothing Then
        MsgBox "Aucun document ouvert.", vbExclamation
        Exit Sub
    End If
    
    ' Ctrl+Shift+Q via ID de commande exact (SolidWorks 2023)
    swApp.RunCommand 51, ""
    
End Sub

Getestet auf SW2023, öffnet und schließt sich das Gleichungsfenster.

Vielen Dank für dein Werkzeug. Ich gebe zu, dass ich kein Experte auf diesem Gebiet bin oder sicher bin, dass ich verstehe, was ich tun sollte.
Ich habe dein Makro in meinem Zimmer laufen lassen, es öffnet das Gleichungsfenster, aber es schließt es nicht. Und ich kann die ID der Operation, die auf OK klickt, nicht bekommen.

Tatsächlich habe ich es gerade nochmal versucht und das Zeitfenster ist nicht validiert.
Und keine bestehende Reihenfolge, um es okay zu machen...
Du kannst das testen, indem du hinzufügst:

swApp.RunCommand 961, "" 'A la suite de swApp.RunCommand 51...

Das ergibt einen ESC (vielleicht genug für deinen Fall, weil es normalerweise ausreicht, dieses Fenster zu öffnen, um diesen bekannten Fehler der Gleichungen zu lösen (selbst durch das Canceln, wie hier)

Wenn es nicht funktioniert, teste mit:

DoEvents
SendKeys "~"   ' ENTER = OK

Testen Sie nicht im Editor, sonst erfolgt der Eintrag im Editor und nicht im SW-Fenster... Sei vorsichtig, eine sehr durchschnittliche Lösung für den zweiten (aber wahrscheinlich funktional).

Sei vorsichtig, ich weiß nicht, ob das zu Hause passiert, aber für mich hat der Befehl " SendKeys " in VBA die nervige Angewohnheit, die Num-Lock-Taste zu deaktivieren (und somit kein numerisches Tastenfeld mehr ...