Kein Zugriff auf Solidworks, wenn ich mein Makro mit einer Schaltfläche ausführe

Hallo

Ich möchte mein Makro über eine "Makro-Schaltfläche" direkt in Solidworks starten. Wenn ich mein Makro von Visual Basic 6 ausführe, habe ich keine Probleme, während nichts funktioniert, wenn ich es über die Schaltfläche starte, die ich in Solidworks erstellt habe. In der Tat möchte ich mehrere Flächen auswählen, aber ich habe keinen Zugriff auf Solidworks, sobald das Makro gestartet ist.

Hier ist ein Teil meines Codes:

 

Dim swApp           als SldWorks.SldWorks
Dim swModel         As SldWorks.ModelDoc2
Sun swSelMgr        As SldWorks.SelectionMgr
Dim-Matefeature     als SldWorks.Mate2
Dim swFace1         As SldWorks.Face2
Dimmen swFace2         als SldWorks.Face2

Dim bool1           als boolescher Wert
Dim bool2           als boolescher Wert

CurFaceName     als Zeichenfolge dimmen
FaceName1       als Zeichenfolge dimmen
FaceName2       als Zeichenfolge dimmen

Dim MateName        als Zeichenfolge
Dim MateName2       als Zeichenfolge

Teil            als Objekt dimmen

 

Sub Square90XL()

    Legen Sie swApp = Application.SldWorks fest
    Festlegen von swModel = swApp.ActiveDoc
    Legen Sie swSelMgr = swModel.SelectionManager fest
    
    bool1 = Falsch
    Ausführen, bis bool1 = wahr ist
        If swSelMgr.GetSelectedObjectType3(1, -1) = swSelFACES dann
            Festlegen von swFace1 = swSelMgr.GetSelectedObject6(1, -1)
            bool1 = Wahr
        Ende, wenn
    Schleife
    swModel.ClearSelection
        
    bool2 = Falsch
    Do until bool2 = True
        If swSelMgr.GetSelectedObjectType3(1, -1) = swSelFACES dann
            Festlegen von swFace2 = swSelMgr.GetSelectedObject6(1, -1)
            bool2 = Wahr
        Ende, wenn
    Schleife
    
    Tun
    swFace2.Auswählen (0)
    Rotation.Show
    Schleife bis Wert2 = Wahr
    
    swFace1.Auswählen (1)
    swFace2.Auswählen (1)
    Set Part = swApp.ActiveDoc
    Set matefeature = Part.AddMate3(swMateCOINCIDENT, swMateAlignCLOSEST, True, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, False, mateError)
    matefeature.name = MateName
    Part.ClearSelection

...

 

Danke im Voraus,

 

Gael

Welche Version von SolidWorks verwenden Sie?

Die Version von VBA, die auf SolidWorks 2013 verwendet wird, ist VBA7, vielleicht kommt das Problem von dort, aber ich bin kein Experte für Entwicklung.

4 „Gefällt mir“

Hallo

Um die Antwort von fthomas zu vervollständigen, biete ich Ihnen diesen Artikel an, den wir veröffentlicht haben und der das Kompatibilitätsproblem zwischen den Versionsstufen von SW und VBA erklärt.

Herzliche Grüße

3 „Gefällt mir“

Hallo

 

Ich denke, Sie müssen diese Codezeilen ändern:

    Legen Sie swApp = Application.SldWorks fest

 

Von diesen:
    Legen Sie swApp = SldWorks.SldWorks fest

 

Das Anwendungsobjekt gibt nicht die aktuelle Solidworks Sitzung, sondern ein neues Solidworks Objekt zurück

2 „Gefällt mir“

Hallo

 

Wenn Ihr Makro ein Fenster anzeigt, stellen Sie sicher, dass es nicht modal ist

 

Wenn nicht, kann ich Ihnen mit dem Auszug, den Sie hier platzieren, nicht mehr sagen,

Aber wenn du dein Makro als Anhang anhängst, kann ich mir das mal anschauen

 

Herzliche Grüße

8 „Gefällt mir“

Hallo ihr alle

Vielen Dank für Ihre Antworten!!

 

@jmsavoyat und @fthomas Also verwende ich immer noch Solidworks 2010 64 Bit, also keine Probleme mit vb7

 

@ etienne.canuel Wenn ich die Codezeile durch das ändere, was Sie mir sagen, bekomme ich ein Fehlerchaos ...

 

@ jfaradon Ich denke, es ist kein Problem mit offenem Fenster oder nicht, da ich Zugriff darauf habe, kann ich darauf klicken und es schließt sich gut. Ich habe es mit anderen Programmen versucht und habe nur das gleiche Problem, wenn ich mein Makro mit einer Befehlsschaltfläche (die ich erstellt habe) auf der Registerkarte Assembly starte. Wenn ich es von VB6 aus laufen lasse, keine Sorge. Das Problem ist, dass ich keinen Zugriff auf Solidworks habe, was in meinem Programm unerlässlich ist, ich muss auf 2 Seiten klicken... Die einzige Möglichkeit, die ich habe, ist Strg + Pause...

 

Ich hänge meinen Code an.

Für diejenigen, die es herunterladen, setze ich mit den Teilen, die eingefügt werden sollen (muss den Pfad zum Öffnen des Teils im Programm in den Benutzerformularen "Quadrat" und "Tabelle" ändern).

Im Grunde handelt es sich um eine Teileeinfügung mit einer Koinzidenzbeschränkung.

Das Einfügen des Benutzerformulars funktioniert nur mit Tabelle und Quadrat. Das Hauptmodul ist "insertion_contrainte". Die Tabelle muss in 1. eingefügt werden!!

Ich habe das Ende meines Codes nicht eingefügt, weil es nutzlos ist, es ist fast das Gleiche und wenn es für den Anfang funktioniert, wird es auch für den Rest funktionieren!

 

Vielen Dank

 

Gael

 


programme.7z

Dsl hatte ich nicht gesehen, aber es gibt 2 Fehler in meinem Programm

Hier ist das korrigierte Programm im Anhang

 

Gael


programme.7z

Wahrscheinlich haben Sie nicht auf die richtigen Bibliotheken/DLLs für Ihr Makro verwiesen.

Um sicherzustellen, dass sie aktiviert sind, ist es am einfachsten, ein neues Makro aus dem SOLIDWORKS Menü zu erstellen, die von SOLIDWORKS automatisch erstellten Codezeilen zu löschen und dann Ihren Code einzufügen.

 

Andernfalls, wenn Sie ein wenig darüber wissen, können Sie zu VBA und dann zum Menü Werkzeuge->Referenzen gehen und dann die SOLIDWORKS Bibliotheken/DLL auswählen, die Ihrer Version entsprechen.

Aus dem Gedächtnis müssen Sie diese ankreuzen:

SldWorks xxxx Typbibliothek

SolidWorks xxxx Bibliothek vom Typ Konstante

SolidWorks xxxx Bibliothek des Befehlstyps

(Ersetzen Sie xxxx durch die Solidworks-Version)

Vielen Dank für Ihre Antwort, aber es ist immer noch nicht so...

Ich suche weiter

Hallo

Wenn ich das richtig verstehe, wird Ihr Makro verwendet, um eine Einschränkung zu erstellen, und wenn Sie Ihr Makro in Microsoft Visual Basic starten (dem in SW, da sind wir uns einig), funktioniert es und Sie können Ihre Flächen auswählen.

 

Aber wenn Sie es von SlidWorks aus ausführen, "funktioniert nichts":

Was bedeutet das? Was ist los?

Das Makro geht so schnell, dass Sie keine Zeit haben, die Oberflächen auszuwählen?

 

 

Eine Lösung, die funktionieren könnte: Wählen Sie Ihre beiden Seiten aus, BEVOR Sie Ihr Makro starten.

Vielleicht können Sie aufgrund der Ausführungsgeschwindigkeit die Fläche in SolidWorks nicht auswählen, wenn Sie das Makro mit einer Schaltfläche starten, die Lösung: eine Pause.

Sie müssen diese Zeile in Ihren Code einfügen:

Application.Wait Time + TimeSerial(0, 0, 1)  

 

Das Ergebnis:

 

bool1 = Falsch

    Ausführen, bis bool1 = wahr ist
        If swSelMgr.GetSelectedObjectType3(1, -1) = swSelFACES dann
            Festlegen von swFace1 = swSelMgr.GetSelectedObject6(1, -1)
            bool1 = Wahr
        Ende, wenn

        Application.Wait Time + TimeSerial(0, 0, 1)  
    Schleife
    swModel.ClearSelection
        
    bool2 = Falsch
    Do until bool2 = True
        If swSelMgr.GetSelectedObjectType3(1, -1) = swSelFACES dann
            Festlegen von swFace2 = swSelMgr.GetSelectedObject6(1, -1)
            bool2 = Wahr
        Ende, wenn

        Application.Wait Time + TimeSerial(0, 0, 1)  
    Schleife

 

 

Funktioniert das so? Um darauf zu achten, die Pausenzeit auf weniger als eine Sekunde zu reduzieren, wenn sie Ihnen zu lang ist.

DSL für die Verspätung, aber ich war im Urlaub.

Nein, das ist überhaupt nicht mein Problem, da ich ein Do so lange benutze, bis ich alle Zeit habe, die ich brauche, um mein Gesicht auszuwählen.

Eigentlich möchte ich ein Makro über eine Makroschaltfläche starten, die ich in Solidworks erstellt habe, aber wenn ich darauf klicke, wird mein Programm korrekt gestartet, aber ich kann keine Fläche auswählen, während ich beim Starten meines VB6-Makros meine Flächen auswählen kann.

Also bin ich blockiert, ich habe Solidworks kontaktiert und warte auf ihre Antwort.

Vielen Dank

Hallo

 

"Nein, das ist überhaupt nicht mein Problem, da ich ein Do so lange benutze, bis ich alle Zeit habe, die ich brauche, um mein Gesicht auszuwählen."

=> FALSCH!

 

Ich habe gerade mit einer Pause getestet und es funktioniert!

Auf der anderen Seite funktioniert die von mir vorgeschlagene Pause nicht, Sie müssen ein "Do Events" verwenden.

Das Makro, das funktioniert, wird angehängt.

 

Oder ein Beispiel für den Code finden Sie hier:

    swModel.ClearSelection
   bool1 = Falsch
   Ausführen, bis bool1 = wahr ist
       If swSelMgr.GetSelectedObjectType3(1, -1) = swSelFACES dann
           Festlegen von swFace1 = swSelMgr.GetSelectedObject6(1, -1)
           bool1 = Wahr
       Ende, wenn
        Für Y = 1 TB 50000
            Veranstaltungen durchführen
        Weiter Y
    Schleife
 


insertion__contrainte.swp