Ik wil mijn macro starten vanaf een "macroknop" direct in Solidworks. Als ik mijn macro uit visual basic 6 haal, heb ik geen problemen, terwijl als ik hem start vanaf de knop die ik in Solidworks heb gemaakt, niets werkt. Ik wil inderdaad meerdere gezichten selecteren, maar ik heb geen toegang tot Solidworks zodra de macro is gestart.
Hier is een stukje van mijn code:
Dim swApp als SldWorks.SldWorks Dim swModel als SldWorks.ModelDoc2 Zon swSelMgr As SldWorks.SelectionMgr Dim matefeature als SldWorks.Mate2 Dim swFace1 als SldWorks.Face2 Dim swFace2 als SldWorks.Face2
Dim bool1 als booleaanse Dim bool2 als Booleaanse
Dim CurFaceName als tekenreeks Dim FaceName1 als tekenreeks Dim FaceName2 als tekenreeks
Dim MateName als tekenreeks Dim MateName2 als tekenreeks
Deel dimmen als object
Sub Square90XL()
Stel swApp = Toepassing.SldWorks in Stel swModel = swApp.ActiveDoc in Stel swSelMgr = swModel.SelectionManager in
bool1 = Onwaar Doen tot bool1 = Waar Als swSelMgr.GetSelectedObjectType3(1, -1) = swSelFACES Dan Stel swFace1 in = swSelMgr.GetSelectedObject6(1, -1) bool1 = Waar Einde als Strik swModel.ClearSelection
bool2 = Onwaar Doen tot bool2 = Waar Als swSelMgr.GetSelectedObjectType3(1, -1) = swSelFACES Dan Stel swFace2 in = swSelMgr.GetSelectedObject6(1, -1) bool2 = Waar Einde als Strik
Doen swFace2.Selecteer (0) Rotatie.Toon Loop tot waarde2 = Waar
De versie van VBA die op SolidWorks 2013 wordt gebruikt, is VBA7, misschien komt het probleem daar vandaan, maar ik ben geen expert op het gebied van ontwikkeling.
Om het antwoord van fthomas compleet te maken, bied ik u dit artikel aan dat we hebben gepubliceerd en waarin het compatibiliteitsprobleem tussen de versieniveaus van SW en VBA wordt uitgelegd.
@jmsavoyat en @fthomas Dus ik gebruik nog steeds Solidworks 2010 64 bits, dus geen problemen met vb7
@ etienne.canuel Als ik de regel van de code veranderen door wat je me vertelt, krijg ik een foutmelding puinhoop ...
@ jfaradon Ik denk dat het niet een open venster probleem of niet, want ik heb er toegang toe, ik kan erop klikken en het sluit prima. Ik heb het geprobeerd met andere programma's en ik heb alleen hetzelfde probleem wanneer ik mijn macro start met behulp van een opdrachtknop (die ik heb gemaakt) op het tabblad Assembly. Als ik het vanaf VB6 draai, geen zorgen. Het probleem is dat ik geen toegang heb tot Solidworks, wat essentieel is in mijn programma, ik moet aan 2 kanten klikken... Het enige toevluchtsoord dat ik heb is ctrl + pauze...
Ik voeg mijn code toe.
Voor degenen die het downloaden, zet ik met de delen die moeten worden ingevoegd (zal het pad voor het openen van het deel in het programma in de "vierkant" en "tabel" gebruikersvormen moeten veranderen).
Kortom, het is een onderdeel invoegen met een toevalsbeperking.
Het invoegen van gebruikersformulier werkt alleen met tafel en vierkant. De hoofdmodule is "insertion_contrainte". De tafel moet in de 1e worden ingevoegd!!
Ik heb het einde van mijn code niet gezet omdat het nutteloos is, het is bijna hetzelfde en als het voor het begin werkt, zal het voor de rest werken!
Je hebt waarschijnlijk niet naar de juiste bibliotheken/dll's verwezen naar je macro.
Om er zeker van te zijn dat ze zijn geactiveerd, is de eenvoudigste manier om een nieuwe macro te maken vanuit het solidworks-menu , verwijder de coderegels die automatisch door solidworks zijn gemaakt en plak vervolgens uw code.
Anders, als je er een beetje van weet, kun je naar VBA gaan en vervolgens naar het tools->references-menu en vervolgens de solidworks-bibliotheken/dll kiezen die overeenkomen met jouw versie.
Als ik het goed begrijp, wordt uw macro gebruikt om een beperking te maken, en wanneer u uw macro start in Microsoft Visual Basic (die in SW zijn we het eens) werkt het en kunt u uw gezichten selecteren.
Maar als je het vanuit SlidWorks uitvoert, "werkt niets":
Wat betekent dit? Wat gebeurt er?
De macro gaat zo snel dat je geen tijd hebt om de oppervlakken te selecteren?
Een oplossing die zou kunnen werken: selecteer uw twee zijden VOORDAT u uw macro start.
Misschien vanwege de snelheid van uitvoering, je kunt het gezicht in SolidWorks niet selecteren als je de macro start met een knop, de oplossing: een pauze.
U moet deze regel in uw code invoegen:
Application.Wait Tijd + TijdSerial(0, 0, 1)
Het resultaat:
bool1 = Onwaar
Doen tot bool1 = Waar Als swSelMgr.GetSelectedObjectType3(1, -1) = swSelFACES Dan Stel swFace1 in = swSelMgr.GetSelectedObject6(1, -1) bool1 = Waar Einde als
Application.Wait Tijd + TijdSerial(0, 0, 1) Strik swModel.ClearSelection
bool2 = Onwaar Doen tot bool2 = Waar Als swSelMgr.GetSelectedObjectType3(1, -1) = swSelFACES Dan Stel swFace2 in = swSelMgr.GetSelectedObject6(1, -1) bool2 = Waar Einde als
Application.Wait Tijd + TijdSerial(0, 0, 1) Strik
Werkt het zo? Om ervoor te zorgen dat de pauzetijd wordt teruggebracht tot minder dan een seconde als deze te lang voor u is.
Nee, dat is helemaal niet mijn probleem, aangezien ik een do gebruik totdat ik alle tijd heb die ik nodig heb om mijn gezicht te selecteren.
Ik wil eigenlijk een macro starten vanaf een macroknop die ik in Solidworks heb gemaakt, maar als ik erop klik, start mijn programma correct, maar ik kan geen gezicht selecteren, terwijl wanneer ik mijn VB6-macro start, ik mijn gezichten kan selecteren.
Dus ik ben geblokkeerd, ik heb contact opgenomen met Solidworks en ik wacht op hun antwoord.
"Nee, dat is helemaal niet mijn probleem, want ik gebruik een do totdat ik alle tijd heb om mijn gezicht te selecteren."
=> ONWAAR!
Ik heb net getest met een pauze en het werkt!
Aan de andere kant werkt de pauze die ik voorstelde niet, je moet een "doe evenementen" gebruiken.
De macro die werkt is bijgevoegd.
Of een voorbeeld van de code is hier:
swModel.ClearSelection bool1 = Onwaar Doen tot bool1 = Waar Als swSelMgr.GetSelectedObjectType3(1, -1) = swSelFACES Dan Stel swFace1 in = swSelMgr.GetSelectedObject6(1, -1) bool1 = Waar Einde als Voor Y = 1 TB 50000 Doe-evenementen Volgende Y Strik