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 ...