Geen toegang tot Solidworks wanneer ik mijn macro met een knop uitvoer

Hallo

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
    
    swFace1.Selecteer (1)
    swFace2.Selecteer (1)
    Deel instellen = swApp.ActiveDoc
    Set matefeature = Part.AddMate3(swMateCOINCIDENT, swMateAlignCLOSEST, True, 0, 0, 0, 0, 0, 0, 0, 0, 0, False, mateError)
    matefeature.name = MateName
    Deel.ClearSelection

...

 

Bij voorbaat dank,

 

Gael

Welke versie van SolidWorks gebruik je?

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.

4 likes

Hallo

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.

Vriendelijke groeten

3 likes

Hallo

 

Ik denk dat je deze regels code moet wijzigen:

    Stel swApp = Toepassing.SldWorks in

 

Door deze:
    Stel swApp = SldWorks.SldWorks in

 

Het Application-object retourneert niet de huidige Solidworks-sessie, maar een nieuw Solidworks-object

2 likes

Hallo

 

Als uw macro een venster weergeeft, zorg er dan voor dat dit niet modaal is

 

Zo niet, dan kan ik je niet meer vertellen met het fragment dat je hier plaatst,

Maar als je je macro als bijlage bijvoegt, kan ik er eens naar kijken

 

Vriendelijke groeten

8 likes

Hoi allemaal

Dank u voor uw antwoorden!!

 

@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!

 

Bedankt

 

Gael

 


programme.7z

Dsl had ik niet gezien, maar er zitten 2 fouten in mijn programma

Hier is het gecorrigeerde programma in de bijlage

 

Gael


programme.7z

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.

Uit het hoofd moet je deze aanvinken:

SldWorks xxxx Type Bibliotheek

SolidWorks xxxx Bibliotheek met constant type

SolidWorks xxxx Bibliotheek met opdrachttypen

(Vervang xxxx door de Solidworks versie)

Bedankt voor je antwoord, maar het is nog steeds niet zo...

Ik blijf zoeken

Hallo

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.

Dsl voor de vertraging, maar ik was op vakantie.

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.

Bedankt

Hallo

 

"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
 


insertion__contrainte.swp