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ć.
'-----------------------------------------------------
' 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
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 ...
Na około dwóch stanowiskach roboczych ten błąd pojawił się na jednej z nich. Najlepiej wybrać inną metodę, bo jak mówiłem, nie jest to zbyt czyste rozwiązanie!
Zrobiłem kilka testów (równolegle współpracuję z chatGPT w kwestii wsparcia makro). Niestety " swApp.RunCommand 961 " wychodzi z okna, ale nie aktualizuje moich elementów.
Do spróbowania: Stwórz globalną zmienną, którą makro ma zmienić. W zasadzie fałszywa zmienna, która, jeśli jest równa 0, jest przekazywana do 1 i odwrotnie za pomocą kodu VBA, który otwiera edytor równań...
Jeśli fakt modyfikacji zmiennej jest wyzwalaczem rozwiązania wszystkich równań, to jest to sztuczka do wykorzystania...
@Silver_Surfer Myślę, że to dobry pomysł W przeciwnym razie może kop z swCommands_Manage_Equations (3040) W końcu zarządzanie równaniami w oprogramowaniu jest już kiepskie od razu po wejściu do zespołu, więc na makro nie musi być łatwo. Powodzenia