Hallo allemaal,
Ik ben op zoek naar een stukje VBA-code voor Solidworks 2024 dat het volgende doet:
Klik op " Tools " → " Vergelijkingen " → " OK " in het vergelijkingsvenster, met als doel de uitvoering van mijn vergelijkingen te forceren die niet correct worden bijgewerkt met de rebuild, maar met deze methode is het integreren in een grotere code die wordt geactiveerd vanuit een extra assembly op dat niveau.
Alvast bedankt als je de informatie hebt.
Guillaume.
Ik heb deze code die correspondeert met een diepgaande reconstructie (Shift + CTR + Q).
Reconstructie die niet identiek is als je een traditionele VBA-functie uitvoert (gezien bij Visiativ).
Nu werkte het op SW 2023 heel goed.
'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
Als het niet functioneel is, is het mogelijk om de exacte orde-ID voor de vergelijking te vinden en vervolgens te valideren.
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 like
Dank je wel! Voor de rebuild heb ik alles geprobeerd, maar het werkt niet zoals ik wil. Ik bouw opnieuw op vanaf een kopconstructie en op een bepaald niveau van boomstructuur gedraagt het zich niet zoals ik wil. Aan de andere kant, zodra ik de vergelijkingsmodule van het betreffende element open en valideer, wordt alles correct. En ik wil dat deze operatie niet zo wordt uitgevoerd, maar door een operator die mijn configurator moet gebruiken zonder dit soort vragen te stellen. Hij zal niet eens per se de onderdelen kunnen identificeren die niet opnieuw zijn berekend. En als ik macro-opname probeer, krijg ik geen code uit mijn operaties...
Dank je wel! Ik ben deze pagina inderdaad ook tegengekomen. Het is niet per se wat ik zoek, maar ik denk erover na of ik het op een omweg kan gebruiken. Zal hij per se de vergelijkingen die hij vindt met het systeem doorvoeren? Ik weet het niet zeker.
Anders is hier een macro toegevoegd om de ID van een bestelling te weten. (Bedankt CodeStack)
Commands.swp vastleggen (39,5 KB)
Gooi gewoon de hand in Capturing_commands1.
Klik vervolgens op je vergelijkingsmenu om de verborgen ID van de functie te ontdekken, hier is de ID=51 voor je menu (sw2023).
Vervolgens voer je de code uit om de ID te starten in 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
Getest op SW2023, opent en sluit het vergelijkingsvenster.
Hartelijk dank voor je hulpmiddel. Ik geef toe dat ik geen expert ben op dit gebied of zeker weet wat ik moet doen.
Ik heb je macro in mijn kamer uitgevoerd, het opent het raam van de vergelijking maar het sluit het niet. En ik kan de ID van de operatie die op OK klikt niet krijgen.
Ik heb het zojuist opnieuw geprobeerd en het venster is niet gevalideerd.
En geen bestaande volgorde om het goed te doen...
Je kunt dit testen door toe te voegen:
swApp.RunCommand 961, "" 'A la suite de swApp.RunCommand 51...
Dit maakt een ESC (misschien genoeg voor jouw geval, want meestal is het genoeg om dit venster te openen om deze bekende fout in de vergelijkingen op te lossen (zelfs door geannuleerd te doen, zoals hier)
Als het niet functioneel is, test dan met:
DoEvents
SendKeys "~" ' ENTER = OK
Test niet vanuit de editor, anders wordt de invoer in de editor gedaan en niet in het SW-venster... Wees voorzichtig, een heel gemiddelde oplossing voor de tweede (maar waarschijnlijk functioneel)
Wees voorzichtig, ik weet niet of het thuis gebeurt, maar voor mij heeft het commando " SendKeys " in VBA de vervelende gewoonte om de Num-Lock-sleutel uit te schakelen (en dus geen numeriek toetsenbord meer ...