| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| SPINNER Hausausstellung |
Autor
|
Thema: Makro erstellen (2102 mal gelesen)
|
Feuerblitz Mitglied
Beiträge: 29 Registriert: 07.10.2020 Solidworks 2012 Professional Windows 10 Pro
|
erstellt am: 07. Okt. 2020 13:53 <-- editieren / zitieren --> Unities abgeben:
Guten Tag liebe Community Gerne würde ich mich freuen wenn ihr mir vielleicht auf die Sprünge helfen könntet: Ich arbeite mit Solidworks 2012 Professional und würde gerne mit Makros arbeiten. Der Makrorekorder funktioniert bei mir aber nicht. Kann es sein, dass dieses Problem an der Programmversion liegt? Als Beispiel: Der Rekorder speichert zwar am Ende eine Makrodatei, aber die ist und bleibt leer. Wenn ich ein eigenes Makro schreiben will, dann kommt die Prozedur wiederum zum Stehen. Mein Beispielcode Dim swApp As Object Dim Part As Object Dim boolstatus As Boolean Dim longstatus As Long, longwarnings As Long Dim FeatureData As Object Dim Feature As Object Dim Component As Object Dim saveFileName As String Sub mains() Set swApp = Application.SldWorks Set Part = swApp.ActiveDoc '=> stoppt immer bei swApp.activeDoc ?? Warum?? swApp.ActiveDoc.ActiveView.FrameState = 1 swApp.ActiveDoc.ActiveView.FrameState = 1 Part.EditSketch If (swApp.ActiveDoc.GetPathName = "") Then 'Abfrage ob Name vergeben wurde MsgBox ("Bitte zuerst Zeichnung speichern!") Exit Sub End If saveFileName = Left(swApp.ActiveDoc.GetPathName, Len(swApp.ActiveDoc.GetPathName) - 7) + ".dwg" ' Speichern als DWG-Datei Part.SaveAs2 saveFileName, 0, True, False saveFileName = Left(swApp.ActiveDoc.GetPathName, Len(swApp.ActiveDoc.GetPathName) - 7) + ".pdf" ' Speichern als PDF-Datei Part.SaveAs2 saveFileName, 0, True, False End Sub Liegt dieses Problem an der Version? In der Verweisbibliothekt ist dieser Eintrag nämlich aufgeführt. Kann mir da jemand von euch weiterhelfen? Gruss Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ad_man Mitglied freiberuflicher Entwicklungsing. (Fahrzeugtechnik, CSWP, CPPA))
Beiträge: 1366 Registriert: 20.12.2003
|
erstellt am: 07. Okt. 2020 15:19 <-- editieren / zitieren --> Unities abgeben: Nur für Feuerblitz
Hallo Feuerblitz, setze doch mal einen Haltepunkt auf die Zeile
Code: Set swApp = Application.SldWorks
Wahrscheinlich bekommst du kein Solidworks-Objekt angebunden, was du mit einer Überwachung von swApp relativ einfach feststellen kannst. Zudem solltest du die Prozedure main und nicht mains nennen ------------------ ========== Gruß Andreas ========== Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Feuerblitz Mitglied
Beiträge: 29 Registriert: 07.10.2020 Solidworks 2012 Professional Windows 10 Pro
|
erstellt am: 07. Okt. 2020 15:47 <-- editieren / zitieren --> Unities abgeben:
Danke für deine Antwort. mains habe ich das Makro genannt, weil er ein Problem sieht, wenn ein zweites Makro im selben Modul auch so benannt wird. Macht das ein grossen Unterschied? Ist ja soviel ich weiss einfach nur eine Beschreibung? Ich habe das gemacht, was du beschrieben hast. Dass swApp als Wert Nothing ergibt, habe ich bereits festgestellt. Nur leider habe ich keine Ahnung woran das liegen könnte. LG Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ad_man Mitglied freiberuflicher Entwicklungsing. (Fahrzeugtechnik, CSWP, CPPA))
Beiträge: 1366 Registriert: 20.12.2003
|
erstellt am: 07. Okt. 2020 15:52 <-- editieren / zitieren --> Unities abgeben: Nur für Feuerblitz
Dann fehlt der Verweis auf die Solidworks-DLL's Wenn du mit Win10 unterwegs bist, kann es sein, dass die SWX2012-DLL nicht erkannt werden wegen fehlender Kompatibilität. Zeig doch mal einen Screenshot von deinen Verweisen. ------------------ ========== Gruß Andreas ========== Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Feuerblitz Mitglied
Beiträge: 29 Registriert: 07.10.2020 Solidworks 2012 Professional Windows 10 Pro
|
erstellt am: 07. Okt. 2020 17:17 <-- editieren / zitieren --> Unities abgeben:
|
Christian_W Ehrenmitglied V.I.P. h.c. Konstrukteur (Dipl-Ing)
Beiträge: 3189 Registriert: 04.04.2001 CSWP 12/2015<P>SWX2021sp5 Win10/11 (SWX2016, SWX2012) proAlpha6.2e00/calinkV9 (Tactonworks) (Medusa7, NesCAD2010, solidEdge19)
|
erstellt am: 07. Okt. 2020 17:48 <-- editieren / zitieren --> Unities abgeben: Nur für Feuerblitz
Zitat: ... wenn ein zweites Makro im selben Modul auch so benannt wird...
Wieso ein 2. Makro im selben Modul? hast du mehrere subs in deinem Makro? welche startest du denn? SWX startet beim Aufruf über "Makro ausführen" immer die zuletzt hinzugefügte sub. wenn es aus der Programmierumgebung gestartet wird, kann man sich die sub aussuchen (oder die, wo der cursor steht ...) kannst du auch "dim swApp as SldWorks.SldWorks" deklarieren? Gruß, Christian
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Feuerblitz Mitglied
Beiträge: 29 Registriert: 07.10.2020 Solidworks 2012 Professional Windows 10 Pro
|
erstellt am: 08. Okt. 2020 09:54 <-- editieren / zitieren --> Unities abgeben:
Danke Christian für deine Antwort. Nein die anderen Subs habe ich rausgelöscht, damit nur der eine Code den ich hier reingestellt, habe ausgeführt wird und es zu keiner Komplikation kommen kann. Wenn ich "dim swApp as SldWorks.SldWorks" deklariere, kommt die folgende Fehlermeldung: "Objektvariable oder with-blockvariable nicht festgelegt" Was bedeutest das für mich? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ad_man Mitglied freiberuflicher Entwicklungsing. (Fahrzeugtechnik, CSWP, CPPA))
Beiträge: 1366 Registriert: 20.12.2003
|
erstellt am: 08. Okt. 2020 10:14 <-- editieren / zitieren --> Unities abgeben: Nur für Feuerblitz
Moin, ich vermute, dass es Probleme mit der Registrierung der SWX-DLL's gegeben hat. SWX2012 wird offiziell nicht von Windows 10 unterstützt oder bist du unter einem anderen Betriebssystem unterwegs? Du solltest auf eine aktuellere Version updaten, wahrscheinlich erledigen sich deine Probleme damit ------------------ ========== Gruß Andreas ========== Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Feuerblitz Mitglied
Beiträge: 29 Registriert: 07.10.2020 Solidworks 2012 Professional Windows 10 Pro
|
erstellt am: 08. Okt. 2020 12:10 <-- editieren / zitieren --> Unities abgeben:
|
Feuerblitz Mitglied
Beiträge: 29 Registriert: 07.10.2020 Solidworks 2012 Professional Windows 10 Pro
|
erstellt am: 08. Okt. 2020 12:12 <-- editieren / zitieren --> Unities abgeben:
|
ad_man Mitglied freiberuflicher Entwicklungsing. (Fahrzeugtechnik, CSWP, CPPA))
Beiträge: 1366 Registriert: 20.12.2003
|
erstellt am: 08. Okt. 2020 12:25 <-- editieren / zitieren --> Unities abgeben: Nur für Feuerblitz
Wenn du einen aktiven Wartungsvertrag hast, kannst du aktualisieren. Ich empfehle dir, dann noch nicht unbedingt die 2021er Version zu nehmen, da die ganz frisch auf dem Markt ist ------------------ ========== Gruß Andreas ========== Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Feuerblitz Mitglied
Beiträge: 29 Registriert: 07.10.2020 Solidworks 2012 Professional Windows 10 Pro
|
erstellt am: 08. Okt. 2020 12:42 <-- editieren / zitieren --> Unities abgeben:
|
ad_man Mitglied freiberuflicher Entwicklungsing. (Fahrzeugtechnik, CSWP, CPPA))
Beiträge: 1366 Registriert: 20.12.2003
|
erstellt am: 08. Okt. 2020 12:46 <-- editieren / zitieren --> Unities abgeben: Nur für Feuerblitz
|
Feuerblitz Mitglied
Beiträge: 29 Registriert: 07.10.2020 Solidworks 2012 Professional Windows 10 Pro
|
erstellt am: 08. Okt. 2020 14:25 <-- editieren / zitieren --> Unities abgeben:
|
ad_man Mitglied freiberuflicher Entwicklungsing. (Fahrzeugtechnik, CSWP, CPPA))
Beiträge: 1366 Registriert: 20.12.2003
|
erstellt am: 08. Okt. 2020 14:36 <-- editieren / zitieren --> Unities abgeben: Nur für Feuerblitz
|
Feuerblitz Mitglied
Beiträge: 29 Registriert: 07.10.2020 Solidworks 2012 Professional Windows 10 Pro
|
erstellt am: 08. Okt. 2020 16:30 <-- editieren / zitieren --> Unities abgeben:
Naja danke für den Tipp, da es nicht mein privater Rechner ist, kann ich das wohl nicht so leicht machen. Was für Werte erhaltet ihr denn im Lokalfenster wenn ihr das Script bei euch ausführt? Könntet jemand von euch ein Screenshot machen? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ad_man Mitglied freiberuflicher Entwicklungsing. (Fahrzeugtechnik, CSWP, CPPA))
Beiträge: 1366 Registriert: 20.12.2003
|
erstellt am: 08. Okt. 2020 16:42 <-- editieren / zitieren --> Unities abgeben: Nur für Feuerblitz
|
Feuerblitz Mitglied
Beiträge: 29 Registriert: 07.10.2020 Solidworks 2012 Professional Windows 10 Pro
|
erstellt am: 09. Okt. 2020 15:36 <-- editieren / zitieren --> Unities abgeben:
Funktioniert der Code bei dir ordnungsgemäss? Kannst du mir vielleicht eine Bilderreihe senden damit ich mal sehen kann was Schritt für Schritt im Programm geschieht. Im Direktfenster wäre gut. Danke Lg
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ad_man Mitglied freiberuflicher Entwicklungsing. (Fahrzeugtechnik, CSWP, CPPA))
Beiträge: 1366 Registriert: 20.12.2003
|
erstellt am: 09. Okt. 2020 16:06 <-- editieren / zitieren --> Unities abgeben: Nur für Feuerblitz
Im Direktfenster wirst du nichts sehen, da alles in SWX passiert. Die drei Zeilen Code: swApp.ActiveDoc.ActiveView.FrameState = 1 swApp.ActiveDoc.ActiveView.FrameState = 1 Part.EditSketch
können raus, da sie nichts mit dem Speichern als DXF bzw. DWG zu tun haben. Es fehlt noch die Prüfung, ob es sich auch um eine Zeichnung handelt, da sonst kein DXF bzw. DWG erzeugt werden kann. Ansonsten sieht das erst einmal zufriedenstellend aus. Auf einen Screenshot-Marathon habe ich jetzt keine Lust , da jetzt WOCHENENDE ist! ------------------ ========== Gruß Andreas ========== Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Feuerblitz Mitglied
Beiträge: 29 Registriert: 07.10.2020 Solidworks 2012 Professional Windows 10 Pro
|
erstellt am: 12. Okt. 2020 15:19 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen Ich habe es mittlerweile zum laufen gebracht. Das wäre die Grundfunktion: Dim swApp As Object Dim Part As Object Dim boolstatus As Boolean Dim longstatus As Long, longwarnings As Long Dim FeatureData As Object Dim Feature As Object Dim Component As Object Dim saveFileName As String Sub main() Set swApp = CreateObject("SldWorks.Application") Set Part = swApp.ActiveDoc '=> stoppt immer bei swApp.activeDoc ?? Warum?? If (swApp.ActiveDoc.GetPathName = "") Then 'Abfrage ob Name vergeben wurde MsgBox ("Bitte zuerst Zeichnung speichern!") Exit Sub End If saveFileName = Left(swApp.ActiveDoc.GetPathName, Len(swApp.ActiveDoc.GetPathName) - 7) + ".dwg" ' Speichern als DWG-Datei Part.SaveAs2 saveFileName, 0, True, False saveFileName = Left(swApp.ActiveDoc.GetPathName, Len(swApp.ActiveDoc.GetPathName) - 7) + ".pdf" ' Speichern als PDF-Datei Part.SaveAs2 saveFileName, 0, True, False saveFileName = Left(swApp.ActiveDoc.GetPathName, Len(swApp.ActiveDoc.GetPathName) - 7) + ".step" ' Speichern als Step-Datei Part.SaveAs2 saveFileName, 0, True, False 'saveFileName = Left(swApp.ActiveDoc.GetPathName, Len(swApp.ActiveDoc.GetPathName) - 7) + ".dxf" ' Speichern als DXF-Datei 'Part.SaveAs2 saveFileName, 0, True, False End Sub Später möchte ich die zwei Dateien dann in einen "Nebenordner" speichern lassen. Sprich Eine Ordnerinstanz höher und dort in einen bestimmten Ordner (Spezifikationen), aber nur wenn er vorhanden ist. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Feuerblitz Mitglied
Beiträge: 29 Registriert: 07.10.2020 Solidworks 2012 Professional Windows 10 Pro
|
erstellt am: 13. Okt. 2020 12:04 <-- editieren / zitieren --> Unities abgeben:
Hallo liebe Community Mir ist da noch eine Frage in den Sinn gekommen und zwar: Ich würde gerne die Benutzerdefinierten Eigenschaften die ich im Teil eingebe in die Zeichnung und in den Zeichnungskopf übernehmen. Gleichzeitig will ich von der Zeichnung her, wenn sich Daten ändern rückwirkend die Daten in die Eigenschaften des Teils schreiben lassen. Lässt sich dies mit VBA bewerkstelligen? Hat das schon jemand versucht? Meine Suche war bisher erfolglos.. Lg Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ad_man Mitglied freiberuflicher Entwicklungsing. (Fahrzeugtechnik, CSWP, CPPA))
Beiträge: 1366 Registriert: 20.12.2003
|
erstellt am: 13. Okt. 2020 14:23 <-- editieren / zitieren --> Unities abgeben: Nur für Feuerblitz
Hallo Feuerblitz, bei deinem Programm solltest du noch einige Fehlerprüfungen mit einbauen. So ist z.B. das STEP-Format (AP-203 bzw. AP-214) nicht für 2D-Daten geeignet. D.h., wenn du deinen Code auf eine Zeichnung loslässt, dann knallt es bei der STEP-Erzeugung. Die Sachen mit dem übergeordneten Verzeichnissen lässt sich mit den gängigen VBA-Befehlen realisieren. Bzgl. der benutzerdefinierten Eigenschaften handhabe ich es so, dass die Eigenschaften aus dem Teil kommen und im Stücklistenkopf die entsprechenden Eigenschaften ausgelesen werden. Ist aber unidirektional, d.h., wenn geändert wird, dann im Teil. Die Bi-direktionale Aktualisierung ist mit Events beim Speichern zu realisieren, aber schon mit einem gewissen Aufwand verbunden. ------------------ ========== Gruß Andreas ========== Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Feuerblitz Mitglied
Beiträge: 29 Registriert: 07.10.2020 Solidworks 2012 Professional Windows 10 Pro
|
erstellt am: 14. Okt. 2020 15:23 <-- editieren / zitieren --> Unities abgeben:
Die Dateien machen keine Probleme. Step wird dann einfach ignoriert. Aber ich denke mit einer If Funktion kann man das von der Datei abhängig machen. Weiss nur noch nicht wie. "Die Bi-direktionale Aktualisierung ist mit Events beim Speichern zu realisieren, aber schon mit einem gewissen Aufwand verbunden" Gibt es da schon irgenwelche Ansätze? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ad_man Mitglied freiberuflicher Entwicklungsing. (Fahrzeugtechnik, CSWP, CPPA))
Beiträge: 1366 Registriert: 20.12.2003
|
erstellt am: 14. Okt. 2020 15:30 <-- editieren / zitieren --> Unities abgeben: Nur für Feuerblitz
|
Feuerblitz Mitglied
Beiträge: 29 Registriert: 07.10.2020 Solidworks 2012 Professional Windows 10 Pro
|
erstellt am: 15. Okt. 2020 14:58 <-- editieren / zitieren --> Unities abgeben:
Ich hab da mal was versucht: 'Variablen definieren Dim swApp As Object Dim Part As Object Dim Speichername As String Sub main() Set swApp = CreateObject("SldWorks.Application") ' 'Dateipfad setzen ' Dateipfad = swApp.ActiveDoc.GetPathName ' 'Dateinamen setzen ' Dateiname = swApp.ActiveDoc.Name Set Part = swApp.ActiveDoc If (swApp.ActiveDoc.GetPathName = "") Then 'Abfrage ob Name vergeben wurde MsgBox ("Bitte zuerst Zeichnung speichern!") Exit Sub End If 'Dateityp auslesen WENN Zeichung / DANN .pdf und .dwg, sonst .step If ActiveDoc = DrawingDoc Then Speichername = Left(swApp.ActiveDoc.GetPathName, Len(swApp.ActiveDoc.GetPathName) - 7) + ".dwg" ' Speichern als DWG-Datei Part.SaveAs2 Speichername, 0, True, False Speichername = Left(swApp.ActiveDoc.GetPathName, Len(swApp.ActiveDoc.GetPathName) - 7) + ".pdf" ' Speichern als PDF-Datei Part.SaveAs2 Speichername, 0, True, False Else Speichername = Left(swApp.ActiveDoc.GetPathName, Len(swApp.ActiveDoc.GetPathName) - 7) + ".step" ' Speichern als Step-Datei Part.SaveAs2 Speichername, 0, True, False End If 'Speichername = Left(swApp.ActiveDoc.GetPathName, Len(swApp.ActiveDoc.GetPathName) - 7) + ".dxf" ' Speichern als DXF-Datei 'Part.SaveAs2 Speichername, 0, True, False End Sub Da fehlt aber noch was. Das mit den Events habe ich mal noch flüchtig angeschaut. Bin noch nicht zu mehr gekommen. Aber vielen Dank für den Link und den Tipp. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Feuerblitz Mitglied
Beiträge: 29 Registriert: 07.10.2020 Solidworks 2012 Professional Windows 10 Pro
|
erstellt am: 15. Okt. 2020 14:59 <-- editieren / zitieren --> Unities abgeben:
Ich hab da mal was versucht: 'Variablen definieren Dim swApp As Object Dim Part As Object Dim Speichername As String Sub main() Set swApp = CreateObject("SldWorks.Application") ' 'Dateipfad setzen ' Dateipfad = swApp.ActiveDoc.GetPathName ' 'Dateinamen setzen ' Dateiname = swApp.ActiveDoc.Name Set Part = swApp.ActiveDoc If (swApp.ActiveDoc.GetPathName = "") Then 'Abfrage ob Name vergeben wurde MsgBox ("Bitte zuerst Zeichnung speichern!") Exit Sub End If 'Dateityp auslesen WENN Zeichung / DANN .pdf und .dwg, sonst .step If ActiveDoc = DrawingDoc Then Speichername = Left(swApp.ActiveDoc.GetPathName, Len(swApp.ActiveDoc.GetPathName) - 7) + ".dwg" ' Speichern als DWG-Datei Part.SaveAs2 Speichername, 0, True, False Speichername = Left(swApp.ActiveDoc.GetPathName, Len(swApp.ActiveDoc.GetPathName) - 7) + ".pdf" ' Speichern als PDF-Datei Part.SaveAs2 Speichername, 0, True, False Else Speichername = Left(swApp.ActiveDoc.GetPathName, Len(swApp.ActiveDoc.GetPathName) - 7) + ".step" ' Speichern als Step-Datei Part.SaveAs2 Speichername, 0, True, False End If 'Speichername = Left(swApp.ActiveDoc.GetPathName, Len(swApp.ActiveDoc.GetPathName) - 7) + ".dxf" ' Speichern als DXF-Datei 'Part.SaveAs2 Speichername, 0, True, False End Sub Da fehlt aber noch was. Das mit den Events habe ich mal noch flüchtig angeschaut. Bin noch nicht zu mehr gekommen. Aber vielen Dank für den Link und den Tipp. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Feuerblitz Mitglied
Beiträge: 29 Registriert: 07.10.2020 Solidworks 2012 Professional Windows 10 Pro
|
erstellt am: 15. Okt. 2020 14:59 <-- editieren / zitieren --> Unities abgeben:
Ich hab da mal was versucht: 'Variablen definieren Dim swApp As Object Dim Part As Object Dim Speichername As String Sub main() Set swApp = CreateObject("SldWorks.Application") ' 'Dateipfad setzen ' Dateipfad = swApp.ActiveDoc.GetPathName ' 'Dateinamen setzen ' Dateiname = swApp.ActiveDoc.Name Set Part = swApp.ActiveDoc If (swApp.ActiveDoc.GetPathName = "") Then 'Abfrage ob Name vergeben wurde MsgBox ("Bitte zuerst Zeichnung speichern!") Exit Sub End If 'Dateityp auslesen WENN Zeichung / DANN .pdf und .dwg, sonst .step If ActiveDoc = DrawingDoc Then Speichername = Left(swApp.ActiveDoc.GetPathName, Len(swApp.ActiveDoc.GetPathName) - 7) + ".dwg" ' Speichern als DWG-Datei Part.SaveAs2 Speichername, 0, True, False Speichername = Left(swApp.ActiveDoc.GetPathName, Len(swApp.ActiveDoc.GetPathName) - 7) + ".pdf" ' Speichern als PDF-Datei Part.SaveAs2 Speichername, 0, True, False Else Speichername = Left(swApp.ActiveDoc.GetPathName, Len(swApp.ActiveDoc.GetPathName) - 7) + ".step" ' Speichern als Step-Datei Part.SaveAs2 Speichername, 0, True, False End If 'Speichername = Left(swApp.ActiveDoc.GetPathName, Len(swApp.ActiveDoc.GetPathName) - 7) + ".dxf" ' Speichern als DXF-Datei 'Part.SaveAs2 Speichername, 0, True, False End Sub Da fehlt aber noch was. Das mit den Events habe ich mal noch flüchtig angeschaut. Bin noch nicht zu mehr gekommen. Aber vielen Dank für den Link und den Tipp. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |