VBA – wykonywanie równań siłą

Witam wszystkich,

Szukam fragmentu kodu VBA do SolidWorks 2024, który robi następujące funkcje:
Kliknij " Narzędzia " → " Równania " → " OK " w oknie równań, celem jest wymuszenie wykonania moich równań, które nie aktualizują się poprawnie podczas odbudowy, ale tą metodą jest zintegrowanie ich z większym kodem wywołanym z kolejnego montażu na danym poziomie.

Z góry dziękuję, jeśli masz informacje.
Guillaume.

Mam ten kod, który odpowiada głębokiej rekonstrukcji (Shift + CTR + Q).
Rekonstrukcja, która nie jest identyczna przy użyciu tradycyjnej funkcji VBA (widocznej w Visiativ).
Teraz, w roku południowym 2023, działało to bardzo dobrze.

'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

Jeśli jest niefunkcjonalny, można znaleźć dokładny identyfikator porządku dla równania i następnie zweryfikować.

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 polubienie

Dziękuję! Przy odbudowie próbowałem wszystkiego, ale nie działa to tak, jak bym chciał. Odbudowuję od zespołu głowicy i na pewnym poziomie struktury drzewa nie zachowuje się tak, jak bym chciał. Z drugiej strony, gdy tylko otworzę moduł równań danego elementu i zweryfikowam, wszystko staje się poprawne. I oczekuję, że ta operacja będzie wykonywana nie w ten sposób, lecz przez operatora, który musi korzystać z mojego konfiguratora bez zadawania takich pytań. Niekoniecznie będzie w stanie zidentyfikować części, które nie zostały przeliczone. A gdy próbuję nagrywać makro, nie wyciąga się żaden kod z moich operacji...

Dziękuję! Rzeczywiście natknąłem się też na tę stronę. To niekoniecznie to, czego szukam, ale zastanawiam się, czy mogę go wykorzystać w sposób okrężny. Czy koniecznie będzie uruchamiał równania, które znajdzie, korzystając z tego? Nie mogę być pewien.

W przeciwnym razie dołączam makro, aby poznać ID zamówienia. (Dzięki CodeStack)
Przechwytywanie commands.swp (39,5 KB)

Po prostu rzuć rękę w Capturing_commands1.
Następnie naciśnij w menu równań, aby odkryć ukryty identyfikator funkcji, tutaj ID=51 dla twojego menu (sw2023).
Następnie uruchamiasz kod uruchamiający ID w LaunchCommand:

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

Testowane na SW2023, okno równania otwiera się i zamyka.

Bardzo dziękuję za Twoje narzędzie. Przyznaję, że nie jestem ekspertem w tej dziedzinie ani nie jestem pewien, co powinienem zrobić.
Uruchomiłem twoje makro w moim pokoju, otwiera okno równań, ale go nie zamyka. I nie mogę uzyskać ID operacji, która klika na OK.

Rzeczywiście, właśnie próbowałem ponownie i okno nie jest zweryfikowane.
I nie ma żadnego rozkazu, by dobrze sobie radzić...
Możesz to przetestować, dodając:

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

To tworzy ESC (może wystarczy w twoim przypadku, bo zwykle wystarcza, by otworzyć to okno i rozwiązać znany błąd równań (nawet przez anulowanie, jak tutaj)

Jeśli nie działa, przetestuj z:

DoEvents
SendKeys "~"   ' ENTER = OK

Nie testuj w edytorze, w przeciwnym razie wpis jest wykonywany w edytorze, a nie w oknie SW... Uważaj, rozwiązanie drugiego jest bardzo przeciętne (ale prawdopodobnie funkcjonalne)

Uważaj, nie wiem, czy robi to w domu, ale dla mnie komenda " SendKeys " w VBA ma irytujący zwyczaj wyłączania klawisza Num-Lock (a więc nie ma już klawiatury numerycznej ...