| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS | | | | From the idea to the real part: Everything with one platform - SOLIDWORKS makes it possible |
Autor
|
Thema: Makro für Anfänger (3464 mal gelesen)
|
TheJWilde Mitglied UnderKonstruktion
Beiträge: 10 Registriert: 15.04.2011
|
erstellt am: 15. Apr. 2011 12:21 <-- editieren / zitieren --> Unities abgeben:
Hallo Leutz, ich brauche ein Makro mit 2 Funktionen. 1. Es sollen alle geöffneten Teile als "Parasolid" gespeichert werden und 2. anschließend alle Teile schliessen. Ich habe mich durch etliche Makros gehangelt,aber ich bekomme die nicht zusammen zu dieser Funktion. Aktuell habe ich das hier,auch aus einem anderen Makro abgeändert. ' ****************************************************************************** ' Pimped by Jürgen 14.04.2011 ' ****************************************************************************** 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 = Application.SldWorks Set Part = swApp.ActiveDoc If Part Is Nothing Then End ' Abbrechen, wenn gar kein SolidWorks-Dokument geöffnet AktuellesDokTyp = Part.GetType() DateiMitPfad = Part.GetPathName() If DateiMitPfad = "" Then MsgBox ("Datei muß zuerst gespeichert werden!") End End If saveFileName = Left(swApp.ActiveDoc.GetPathName, Len(swApp.ActiveDoc.GetPathName) - 7) + ".x_t" Part.SaveAs2 saveFileName, 0, True, False
End Sub
Macht vom Prinzip her was ich möchte, nur was muss ich ändern für die "Mehrfach Speicherung und schliessen aller Dokumente".
lg Jürgen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jaro Mitglied Technischer Zeichner
Beiträge: 235 Registriert: 28.11.2003 MDT6 SP4 SWX 2006 SP4.1 SWX 2007 SP3 XP SP2 3,6 GHz 2 GB NVIDIA Quadro FX 1400
|
erstellt am: 15. Apr. 2011 13:26 <-- editieren / zitieren --> Unities abgeben: Nur für TheJWilde
Hallo, Du mußt dir halt noch die Parasolid Option reinbasteln oder eine vorhandene Checkbox verändern. War eines meiner ersten Macros die ich aus verschiedenen Codeschnippseln zusammen gekla....äh ich per Guttenberg-Verfahren erstellt hatte Gruß Roland [Diese Nachricht wurde von Jaro am 15. Apr. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
TheJWilde Mitglied UnderKonstruktion
Beiträge: 10 Registriert: 15.04.2011
|
erstellt am: 26. Apr. 2011 11:53 <-- editieren / zitieren --> Unities abgeben:
Hallo Jaro und alle anderen die wieder arbeiten müssen , nach dem Urlaub frisch an´s Werk. Leider komme ich mit dem Skript ja so nicht weiter, hier gibt es doch bestimmt etliche Spezies für die das ein "klacks" ist!? Sonst brauche ich echt eine Schritt-für-Schritt Anleitung für Dummies lg Jürgen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
Beiträge: 1747 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 26. Apr. 2011 12:29 <-- editieren / zitieren --> Unities abgeben: Nur für TheJWilde
Hallo Jürgen schau mal in der Online Hilfe unter dem Suchbegriff "Get Paths of Open Documents (VBA)" damit solltest Du dann alle geöffneten Dokumente durchlaufen und die Dokumente mit "Closedoc" von SldWorks schließen können Wenn Du nur Teile speichern möchtest solltest Du auch prüfen ob das geöffnete Dokument ein Teil, eine Baugruppe oder eine Zeichnung ist. Am Besten mit "GetType" von ModelDoc2 ------------------ Grüße Heinz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
TheJWilde Mitglied UnderKonstruktion
Beiträge: 10 Registriert: 15.04.2011
|
erstellt am: 27. Apr. 2011 08:39 <-- editieren / zitieren --> Unities abgeben:
Danke für deine rasche Antwort Heinz, ich bekomme das aber nicht hin. Alle Versuche enden mit einem Laufzeitfehler 91. Vielleicht könnte mir hier einer von den Spezies "einfach" den restlichen fehlenden Code hier rein posten, ich habe "leider" sehr wenig Zeit mich damit genauer zu beschäftigen. lg Jürgen [Diese Nachricht wurde von TheJWilde am 27. Apr. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
Beiträge: 1747 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 27. Apr. 2011 09:08 <-- editieren / zitieren --> Unities abgeben: Nur für TheJWilde
Hallo Jürgen dann solltest Du auch mal Deinen ganzen Code hier rein posten, damit man sieht wo es hakt. Da die Meisten wahrscheinlich auch nicht viel Zeit haben, wär es schon hilfreich etwas zu haben was verbessert werden kann. ------------------ Grüße Heinz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)
Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 27. Apr. 2011 09:16 <-- editieren / zitieren --> Unities abgeben: Nur für TheJWilde
Hallo Jürgen, Zitat: Original erstellt von TheJWilde: Leider komme ich mit dem Skript ja so nicht weiter, hier gibt es doch bestimmt etliche Spezies für die das ein "klacks" ist!?
Zitat: Original erstellt von TheJWilde: Vielleicht könnte mir hier einer von den Spezies "einfach" den restlichen fehlenden Code hier rein posten, ich habe "leider" sehr wenig Zeit mich damit genauer zu beschäftigen.
So funktioniert das nicht, zumindest nicht bei mir und ich hoffe auch bei den anderen nicht. Es ist eine Sache, jemandem zu helfen, auf den richtigen Weg zu schubsen, zu erklären oder Codestückchen zu debuggen oder anzugeben. Manchmal ist es auch lohnenswert ganze Makros zu posten, da muss aber dann der Rest dazu passen, das "Geschmäckle" eben. Bei dir hört es sich aber so an, als wolltest du jemand anderes deine Arbeit machen lassen; dann kommt noch der absolute No-Go dazu, dass du keine Zeit dafür findest, dich mit der Aufgabe auseinander zu setzen und deswegen jemand anderes dir das machen soll. Das hört sich für mich nach einer klassischen Dienstleistung an - und die wird in der Regel in einem geschäftlichen Umfeld bezahlt. Klar wäre es vermutlich schneller, dir eben den Code zu machen und zu posten, aber dann würdest du nichts lernen außer der Tatsache, das Quängeln doch hilft, weil irgendjemand es nicht mehr "aushält" und dir das mundgerecht serviert. Dass du vielleicht frustiert bist, weil du es nicht schaffst das Makro zusammenzubasteln und die Arbeit immer von Hand erledigen muss, kann ich nachvollziehen. Aber bitte verstehe auch, dass Makroprogrammierung durchaus eine Fertigkeit (oder neudeutsch Skill) ist, den man sich erarbeiten muss - und der einem durchaus einen Vorteil bringt, wenn man es kann. Ich hab z.B. keine Ahnung von Autos und kann es nicht selbst reparieren und interessier mich auch nicht dafür, deswegen bezahl ich eine Werkstatt dafür. Und die würden ganz schon komisch gucken wenn ich das Auto auf den Hof stelle und anfange zu betteln, ob das nicht mal eben einer der Profis durchchecken könnte, da wär so ein komisches Pfeifen. Und dann stell dir vor, in der Werkstatt gäbe es sogar Meister und Gesellen die mich ans Händchen nehmen und mit mir zusammen durchsprechen, was da zu hören ist, wo ich hinschauen muss, welche Werkzeuge ich brauche usw. Und ich würde trotzdem sagen Ja aber macht ihr das doch eben schnell, ich hab keine Zeit dafür und muss gleich wieder weg. Ich hoffe du verstehst, was ich meine. BOT Zitat: Original erstellt von TheJWilde: ich bekomme das aber nicht hin. Alle Versuche enden mit einem Laufzeitfehler 91.
Wie sieht denn dein Code bis jetzt aus? Hast du das Beispiel aus der API Hilfe, dass dir Heinz gepostet hat, nachvollziehen können? Wie hast du das mit deinem Code verbunden? Wo und wann kommt die Fehlermeldung? Was tust du dabei in SolidWorks, hast du was offen? Wir nicht gespeichert oder die Dokumente nicht wie gewünscht geschlossen? Wir können gerne versuchen weiter an deinem Code zu basteln. Wenn du ein fertiges Makro haben willst gibt es andere Wege. Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Stefans SolidWorks Blog Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
TheJWilde Mitglied UnderKonstruktion
Beiträge: 10 Registriert: 15.04.2011
|
erstellt am: 27. Apr. 2011 10:11 <-- editieren / zitieren --> Unities abgeben:
Sorry Stefan, gerade und weil du der Admin bist schreibe ich jetzt hier mal ein paar Sachen die nichts mit dem Thema zu tun haben, es bleibt dir überlassen damit umzugehen/löschen oder was auch immer. Zitat: So funktioniert das nicht, zumindest nicht bei mir und ich hoffe auch bei den anderen nicht.
Nach der Ansage als Oberadmin brauchst du dir keine Sorgen mehr machen das mir jemand hilft.:( Zitat: Es ist eine Sache, jemandem zu helfen, auf den richtigen Weg zu schubsen, zu erklären oder Codestückchen zu debuggen oder anzugeben. Manchmal ist es auch lohnenswert ganze Makros zu posten, da muss aber dann der Rest dazu passen, das "Geschmäckle" eben.
Mein ganzer bisher funktionierender Code steht bereits oben, das "Geschmäckle" liegt wohl im Auge des Betrachters. Zitat: Das hört sich für mich nach einer klassischen Dienstleistung an - und die wird in der Regel in einem geschäftlichen Umfeld bezahlt. Klar wäre es vermutlich schneller, dir eben den Code zu machen und zu posten, aber dann würdest du nichts lernen außer der Tatsache, das Quängeln doch hilft, weil irgendjemand es nicht mehr "aushält" und dir das mundgerecht serviert.
Das ist schlicht und ergreifend eine Frechheit, überlege mal was du da schreibst (Guter Geist Admin), ich war immer Höflich und Sachlich. Zitat: Dass du vielleicht frustiert bist, weil du es nicht schaffst das Makro zusammenzubasteln und die Arbeit immer von Hand erledigen muss, kann ich nachvollziehen. Aber bitte verstehe auch, dass Makroprogrammierung durchaus eine Fertigkeit (oder neudeutsch Skill) ist, den man sich erarbeiten muss - und der einem durchaus einen Vorteil bringt, wenn man es kann. Ich hab z.B. keine Ahnung von Autos und kann es nicht selbst reparieren und interessier mich auch nicht dafür, deswegen bezahl ich eine Werkstatt dafür. Und die würden ganz schon komisch gucken wenn ich das Auto auf den Hof stelle und anfange zu betteln, ob das nicht mal eben einer der Profis durchchecken könnte, da wär so ein komisches Pfeifen. Und dann stell dir vor, in der Werkstatt gäbe es sogar Meister und Gesellen die dich ans Händchen nehmen und mit dir zusammen durchsprechen, was da zu hören ist, wo ich hinschauen muss, welche Werkzeuge ich brauche usw. Und ich würde trotzdem sagen Ja aber macht ihr mir das doch eben schnell, ich hab keine Zeit dafür und muss gleich wieder weg. Ich hoffe du verstehst, was ich meine.
Jetzt wird´s einfach ~komisch~ , wenn jemand neben dir an der Tankstelle fragt wie sein Tankdeckel aufgeht weil er/sie das gleiche Auto hat schickst du denjenigen sicher auch in die Werkstatt BOT ' ****************************************************************************** ' Pimped by Jürgen 14.04.2011 ' ****************************************************************************** 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 Dim SldWorks As Object Dim ModelDoc As Object Dim Dateiname As String Sub main() Set swApp = Application.SldWorks Set Part = swApp.ActiveDoc If Part Is Nothing Then End ' Abbrechen, wenn gar kein SolidWorks-Dokument geöffnet AktuellesDokTyp = Part.GetType() DateiMitPfad = Part.GetPathName() If DateiMitPfad = "" Then MsgBox ("Datei muß zuerst gespeichert werden!") End End If saveFileName = Left(swApp.ActiveDoc.GetPathName, Len(swApp.ActiveDoc.GetPathName) - 7) + ".x_t" Part.SaveAs2 saveFileName, 0, True, False
Dateiname = ModelDoc.GetTitle SldWorks.CloseDoc Dateiname End Sub Am Ende hast du wahrscheinlich recht, ich sollte mich mal eingehend mit dem Thema beschäftigen, trotz Zeitnot sicher fast immer die richtige Wahl vor allem im Bezug auf spätere Änderungen/Erweiterungen.
lg Jürgen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GDawg Ehrenmitglied V.I.P. h.c. Teamleiter FEM Simulation
Beiträge: 2622 Registriert: 12.07.2004 SolidWorks_2o2o SP3.o Win10_x64, Quadro_P2ooo. VisualStudio_2o19_Pro. FEM: Forge_NxT_HPC, ANSYS_WB. 3D-Printer: Ultimaker_2, Tinker_Gnome.
|
erstellt am: 27. Apr. 2011 10:51 <-- editieren / zitieren --> Unities abgeben: Nur für TheJWilde
Keine Angst! Der Stefan meint das nicht böse! Es ist aber wirklich so, dass jemand kommt, doof gesagt: "Ich-Makro-heute-los!" Wenn Du eine Frage stellst, "wie kann ich alle offene Dokumente durchgehen?", dann könnte man dir sagen, dass man das unter "sowieos" in der API Hilfe findet. Dann weisst Du das nächste Mal auch, dass es eine API-Hilfe gibt und in der seeeehr viel Hilfreiches steht. Für vieles gibt es bereits fertige Lösungen. EDIT: nahe hat Dir da genau den Hinweis gegeben, den Du brauchst! Wenn jemand an der Tankstelle den Deckel nicht aufkriegt, bekommt der/die einen Hinweis ins Benutzerhandbuch des Autos So und jetzt: Funktioniert Dein Makro wirklich? Wenn ich mir das so ansehe, hätte ich Bedenken. ------------------ http://www.worldcommunitygrid.org [Diese Nachricht wurde von GDawg am 27. Apr. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)
Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 27. Apr. 2011 10:51 <-- editieren / zitieren --> Unities abgeben: Nur für TheJWilde
Hallo Jürgen, Zitat: Original erstellt von TheJWilde: BOT ' ****************************************************************************** ' Pimped by Jürgen 14.04.2011 ' ****************************************************************************** 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 Dim SldWorks As Object Dim ModelDoc As Object Dim Dateiname As StringSub main() Set swApp = Application.SldWorks Set Part = swApp.ActiveDoc If Part Is Nothing Then End ' Abbrechen, wenn gar kein SolidWorks-Dokument geöffnet AktuellesDokTyp = Part.GetType() DateiMitPfad = Part.GetPathName() If DateiMitPfad = "" Then MsgBox ("Datei muß zuerst gespeichert werden!") End End If saveFileName = Left(swApp.ActiveDoc.GetPathName, Len(swApp.ActiveDoc.GetPathName) - 7) + ".x_t" Part.SaveAs2 saveFileName, 0, True, False
Dateiname = ModelDoc.GetTitle SldWorks.CloseDoc Dateiname End Sub
Dein Fehler "runtime error 91 object variable or With block variable not set" kommt vermutlich in dieser Zeile und die Fehlermeldung beschriebt, was Sache ist: du hast die Objektvariable ModelDoc nie gesetzt. In deinem Code oben heißt die Variable für dein aktives Dokument Part, unten fragst du ModelDoc ab, deswegen funktioniert das nicht. In der nächsten Zeile versuchst du dann die laufende Session mit SldWorks anzusprechen, obwohl die oben als swApp gesetzt wurde. Auch das würde zu demselben Fehler noch einmal führen, weil die Objektvariable SldWorks nicht gesetzt wurde. Also unten in den Zeilen die richtige Variable abfragen, dann sollte es klappen und das Makro das aktive Dokument schließen:
Code:
Dateiname = Part.GetTitle swApp.CloseDoc Dateiname
So sollte das zumindest für das aktive Dokument schon mal klappen. Wenn das so weit läuft schau dir das Beispiel in der API Hilfe an, was dir Heinz gepostet hat, da ist als Beispiel drin, wie du über alle offenen Dokumente läufst und mit denen irgendwas tun kannst.Ciao, Stefan PS: ich bin Moderator hier, Admin bin ich beruflich. Über den Rest sind wir wohl einfach nur unterschiedlicher Ansicht ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Stefans SolidWorks Blog Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
TheJWilde Mitglied UnderKonstruktion
Beiträge: 10 Registriert: 15.04.2011
|
erstellt am: 27. Apr. 2011 11:35 <-- editieren / zitieren --> Unities abgeben:
|
nahe Ehrenmitglied
Beiträge: 1747 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 27. Apr. 2011 12:16 <-- editieren / zitieren --> Unities abgeben: Nur für TheJWilde
Hallo nochmals Stefan hat es sicher etwas überspitzt ausgedrückt und ich ein weniger diplomatischer, aber der Sinn ist der Gleiche Wie von Stefan geschrieben, man muss sich halt wirklich etwas Zeit nehmen für die Makro Programmierung oder noch besser mal bei Eurem SWX Anbieter eine Makro-Schulung machen (so wie ich es getan habe) und es wird Dir sicher Hilfe angeboten, wenn Du auch bereit bist Zeit zu investieren. Falls Du im Moment keine Zeit dafür hast, dann melde Dich einfach wieder wenn es passt. Meiner Meinung nach, ist es nämlich sehr schwer, ein Makro das man nicht selbst geschrieben hat, wirklich zu verstehen. PS ich will hier lieber kein Bild von meinem Schreibtisch posten
------------------ Grüße Heinz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|