| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| Technologietag mit Live-Bearbeitung in Seebach |
Autor
|
Thema: Mit Makro Dateiinfo-Zeile suchen und Ausfüllen (5394 mal gelesen)
|
kayex Mitglied Konstrukteur
Beiträge: 9 Registriert: 04.12.2012 SolidWorks Professional 2016 SP5.0 WorkGroup PDM Win7 SP1 x64
|
erstellt am: 04. Dez. 2012 10:17 <-- editieren / zitieren --> Unities abgeben:
Hallo miteinander Ich habe gerade denn wunderbaren Auftrag bekommen ca 600 Zeichnungen welche in Papierform freigegeben sind im SWX freizugeben . Wir haben es so geregelt, dass die Zeichnung auf die Dateiinfos des Parts bzw Assembly zugreift und in der Zeichnung selbst gar keine Infos stehen. Nun muss ich bei jeder Zeichnung zuerst das Teil oder die Baugruppe öffnen, in die Dateieigenschaften gehen, meinen Namen und das heutige Datum eintragen, wieder schliessen und zurück in die Zeichnung... Nun zu meiner Frage: Kann dieser ganze Ablauf (oder zumindest das Eintragen von Name und heutigem Datum) mit einem Makro ausgeführt werden? Er soll ja im Prinzip ein bestimmtes Datenfeld suchen und dann den entsprechenden Wert eintragen oder überschreiben, falls schon was drinsteht... Ich hab mir diverse Makros angesehen wie z.B. wie man die Dateiinfo-Zeilen automatisch erstellt oder einzelne Eigenschaften gelöscht werden können. Bin noch nicht so erfahren mit Programmieren und krieg das nicht zusammengebacken... Könnte mir jemand bei dem Problem helfen? Gruss Kayex [Diese Nachricht wurde von kayex am 05. Dez. 2012 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: 04. Dez. 2012 10:53 <-- editieren / zitieren --> Unities abgeben: Nur für kayex
Hallo kayex, und herzlich willkommen im SolidWorks Brett auf CAD.de Zitat: Original erstellt von kayex: Ich habe gerade denn wunderbaren Auftrag bekommen ca 600 Zeichnungen welche in Papierform freigegeben sind im SWX freizugeben
Das schreit ja geradezu nach einem Automatismus. Ein Makro und PAC4SWX und die Sache kann fast von alleine funktionieren. So wie du es beschreibst habt ihr ja kein PDM-System oder so, was sauer wird, wenn man diese Aufgabe ohne es erledigt. Zitat: Original erstellt von kayex: Wir haben es so geregelt, dass die Zeichnung auf die Dateiinfos des Parts bzw Assembly zugreift und in der Zeichnung selbst gar keine Infos stehen.
Dein Screenshot zeigt nicht die Dateieigenschaften eines Modells, sondern einer Zeichnung, sonst wäre ein Reiter "Konfigurationsspezifisch" zu sehen. Bist du dir sicher, dass die Werte aus den Modellen geholt werden und nicht aus dem Zeichnungen? Zitat: Original erstellt von kayex: Nun muss ich bei jeder Zeichnung zuerst das Teil oder die Baugruppe öffnen, in die Dateieigenschaften gehen, meinen Namen und das heutige Datum eintragen, wieder schliessen und zurück in die Zeichnung...
Ist immer nur ein Modell pro Zeichnung vorhanden? Dann ist das auch für ein Makro nicht so schwer, ein Beispiel wie man von einer Zeichnung auf das passende Modell kommt findest du in der MakroMania auf http://solidworks.cad.de/mm_21.htmZitat: Original erstellt von kayex: Nun zu meiner Frage: Kann dieser ganze Ablauf (oder zumindest das Eintragen von Name und heutigem Datum) mit einem Makro ausgeführt werden? Er soll ja im Prinzip ein bestimmtes Datenfeld suchen und dann den entsprechenden Wert eintragen oder überschreiben, falls schon was drinsteht...
Ja, das ist technisch kein großes Problem, muss halt nur geschrieben und getestet werden. Zitat: Original erstellt von kayex: Ich hab mir diverse Makros angesehen wie z.B. wie man die Dateiinfo-Zeilen automatisch erstellt oder einzelne Eigenschaften gelöscht werden können. Bin noch nicht so erfahren mit Programmieren und krieg das nicht zusammengebacken... Könnte mir jemand bei dem Problem helfen?
Was hast du denn schon und wo klemmt es? Helfen können dir hier sicher einige, wenn das Gefühl da ist, dass du daran interessiert bist es zu verstehen und die Programmierung selbst durchführen willst. Dafür wirst du vermutlich Zeit brauchen, aber es lohnt sich dann vielleicht schon für diesen, sicher für die nächste ähnliche Aufgabe. Für fertige Makros oder wenn es brennt und eben schnell umgesetzt werden muss wirst du in der Regel eher zahlen müssen, (eben die Erfahrung und die Kenntnisse, so wie du auch bezahlt wirst) dann versuch bitte mit den üblichen Verdächtigen per PM oder Mail in Kontakt zu treten. Viele Grüße, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de 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: 04. Dez. 2012 10:54 <-- editieren / zitieren --> Unities abgeben: Nur für kayex
Hallo Kayex die Aufgabenstellung ist, meiner Meinung nach, nicht unbedingt eine "Anfängerübung". Grundsätzlich sollte das kein Problem sein. Das Stichwort dazu ist "SetCustomProperty". Du musst Dir auch vorher überlegen 1.) ob die Teile Konfigurationen haben und ob die Eigenschaften auch für die Konfigurationen ändern möchtest. 2.) wie Du zu einer Liste der zu ändernden Dateien kommst. 3.) sind die Dateien ev. schreibgeschützt? Du kannst Dir aber das Öffnen der Dateien ersparen wenn du mit dem Document Manager API arbeitest. Dazu musst Du aber erst einen Lizenzschlüsseel von SWX anfordern. Das geht aber recht problemlos per mail.
Mir ist klar, dass Dir das wahrscheinlich nicht weiter hilft, aber fertige Lösung hab ich leider auch keine.
------------------ Grüße Heinz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
kayex Mitglied Konstrukteur
Beiträge: 9 Registriert: 04.12.2012 SolidWorks Professional 2016 SP5.0 WorkGroup PDM Win7 SP1 x64
|
erstellt am: 05. Dez. 2012 14:17 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen Vielen Dank für die schnellen ausführlichen Antworten. @StefanBerlitz Zitat: Original erstellt vonStefanBerlitz Dein Screenshot zeigt nicht die Dateieigenschaften eines Modells, sondern einer Zeichnung, sonst wäre ein Reiter "Konfigurationsspezifisch" zu sehen. Bist du dir sicher, dass die Werte aus den Modellen geholt werden und nicht aus dem Zeichnungen?
Der Screenshot ist tatsächlich von einer Zeichnung, ich habs noch geändert. :) Zitat: Original erstellt von StefanBerlitz Ist immer nur ein Modell pro Zeichnung vorhanden? Dann ist das auch für ein Makro nicht so schwer, ein Beispiel wie man von einer Zeichnung auf das passende Modell kommt findest du in der MakroMania auf http://solidworks.cad.de/mm_21.htm
Ja, in 99% der Fälle haben wir nur ein Modell oder eine Baugruppe pro Zeichnung. @nahe
Zitat: Original erstellt von nahe 1.) ob die Teile Konfigurationen haben und ob die Eigenschaften auch für die Konfigurationen ändern möchtest.
Wir Arbeiten sozusagen nicht mit Konfigurationen, d.h. ich muss immer nur die benutzerdefinierten Felder ausfüllen... Zitat: Original erstellt von nahe 2.) wie Du zu einer Liste der zu ändernden Dateien kommst.
Ich glaube du stellst dir dies zu Komplex vor. Ich habe es vielleicht ein wenig unverständlich geschrieben, sorry. Ich muss so oder so jede Zeichnung öffnen und Kontrollieren. Es geht eigentlich nur darum, dass wenn das Part geöffnet ist, ich einen Button drücken kann welches mir ein paar Benutzerdefinierte Eigenschaften (heutiges Datum, Name, MA-ID-Nummer, Abteilung) ,ausfüllt. Ich habe NICHT dass Ziel ALLE auf einmal mit einem Makro auszufüllen... ;) Zitat: Original erstellt von nahe 3.) sind die Dateien ev. schreibgeschützt?
Nee, ich hab auf alle welche ich momentan Bearbeite schreibrechte (bzw. Besitzrechte) Den folgenden Code ist von mir ein wenig zusammengestutzt worden. Funktionnierte jedoch vorher auch schon nicht. Bei Mir streikt er immer wegen des undefinierten Benutzerdefinierten Typs. Original: *klick*
Zitat:
Dim oMyDocMgr As MyDocMgr Dim oMyDmDoc As MyDMDoc 'Eigene DokumentManager-Klasse initialisieren oMyDocMgr = New MyDocMgr 'Eigenschaft mit einem Wert befüllen oMyDmDoc.CustomPropertyValue( _ "EIGENSCHAFT") = "WERT" oMyDmDoc = Nothing oMyDocMgr = Nothing
Das Zweite was ich gefunden habe ist von der folgenden Seite: *klick* Diese Befehle sehen für mich sehr einleuchtend und einfach vor: Einfach Namen der Eigenschaft rein und dann den gewünschten Wert dazu, war leider nix... :(
Zitat: Visual Basic (Declaration) Sub SetCustomProperty( _ ByVal FieldName As String, _ ByVal newValue As String _ ) ODER Visual Basic (Usage) Dim instance As ISwDMDocument Dim FieldName As String Dim newValue As String value = instance.SetCustomProperty(FieldName, newValue)
Bei der Visual Basic (Usage) Methode motzt er mich erstens an, dass bei ISwDMDocument der Benutzerdefinierter Typ nicht definiert sei und auch, dass in der letzten Zeile ein " = " sein muss. Welches ich aber durch "value =" behoben habe... Hab ich sonst auch alles ein wenig Probiert und geändert, was ich konnte mit meinem untergebenem Wissen... Ich hoffe es ist ein wenig klarer geworde, was ich gerne machen würde... Danke schon jetzt...
Gruss Kay 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: 05. Dez. 2012 14:30 <-- editieren / zitieren --> Unities abgeben: Nur für kayex
Hallo Kay also das macht es dann schon etwas einfacher. Nur noch ein paar Fragen: 1.) heutiges Datum ist soweit klar (wie soll das Format aussehen?) 2.) Name (genügt der aktuell im Netzwerk angemeldete Benutzername?) kannst Du anzeigen mit Windows->Startbutton->ausführen->cmd->set username dieser Name lässt sich einfach auslesen 3.) MA-ID-Nummer willst Du die eingeben? 4.) Abteilung ist wahrscheinlich fix?
------------------ Grüße Heinz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndreySCA Mitglied selbst. Konstrukteur
Beiträge: 127 Registriert: 15.06.2007 SWX 2001-2013 SolidEdge ST6
|
erstellt am: 05. Dez. 2012 15:10 <-- editieren / zitieren --> Unities abgeben: Nur für kayex
Hallo, komme leider nicht auf den Namen, es gab auf jedenfall früher eine Excel-Tabelle, die in einem Ordner die Eigenschaften ausgelesen hat. Man konnte die Eigenschaften korrigieren, ändern oder anpassen und wieder einlesen. Es bedarf etwas Einstellung -> Spalten nach den einzelnen Eigeschaften benennen und dann ist die Sache in 10 min fertig. (mit Excel über Kopie Funktion in allen Teilen denselben Namen und Datum eintragen und wieder in die Teile schreiben) Die Tabelle habe noch irgendwo liegen, leider nutze ich die nicht mehr, da kein Bedarf besteht. Andreas EDIT: Tabelle heisst SWie und hier im Forum zu finden ------------------ Unmögliches wird sofort erledigt, Wunder dauern etwas länger [Diese Nachricht wurde von AndreySCA am 05. Dez. 2012 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: 05. Dez. 2012 15:17 <-- editieren / zitieren --> Unities abgeben: Nur für kayex
Hallo Kay anbei ein Makro das in etwa das machen sollte was Du möchtest Public Const dat = "Datum" Public Const na = "Name" Public Const ab = "Abteilung" Public Const id = "MA-ID-Nummer" Sub main() Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim instance As IModelDocExtension Dim value As CustomPropertyManager Dim namen As Variant Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc If swModel.GetType <> swDocPART And swModel.GetType <> swDocASSEMBLY Then MsgBox "Kein Teil od. Baugruppe geöffnet!", vbOKOnly, "Fehler" End End If Set instance = swModel.Extension Set value = instance.CustomPropertyManager("") namen = value.GetNames '* Datum setzen '* Wenn Datum nicht vorhanden ist If check_name(dat, namen) = False Then '* Datum anlegen und setzen value.Add2 dat, swCustomInfoDate, Format(Now, "dd.mm.yyyy") Else '* Datum setzen value.Set dat, Format(Now, "dd.mm.yyyy") End If '* Namen setzen '* Wenn Name nicht vorhanden ist If check_name(na, namen) = False Then '* Namen anlegen und setzen value.Add2 na, swCustomInfoText, Environ("USERNAME") Else '* Namen setzen value.Set na, Environ("USERNAME") End If '* Abteilung setzen '* Wenn Abteilung nicht vorhanden ist If check_name(ab, namen) = False Then '* Abteilung anlegen und setzen value.Add2 ab, swCustomInfoText, "Abteilung-XY" Else '* Abteilung setzen value.Set ab, "Abteilung-XY" End If '* MA-ID setzen '* Wenn MA-ID nicht vorhanden ist If check_name(id, namen) = False Then '* MA-ID anlegen und setzen abb = InputBox("MA-ID-Nummer eingeben:", "Eingabe", "") value.Add2 id, swCustomInfoText, abb Else '* MA-ID setzen abb = InputBox("MA-ID-Nummer eingeben:", "Eingabe", "") value.Set id, abb End If End Sub
Function check_name(nn As String, ll As Variant) As Boolean Dim i As Integer For i = 0 To UBound(ll) If ll(i) = nn Then check_name = True End If Next i check_name = False End Function
------------------ Grüße Heinz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
kayex Mitglied Konstrukteur
Beiträge: 9 Registriert: 04.12.2012 SolidWorks Professional 2016 SP5.0 WorkGroup PDM Win7 SP1 x64
|
erstellt am: 11. Dez. 2012 08:37 <-- editieren / zitieren --> Unities abgeben:
Heii, ich danke euch allen für die hilfreichen Antworten. Allen voran nahe... Das Makro ist perfekt. Musste nur den Befehl "environ" beim Namen noch in "Format" ändern... Vielen Dank und freundliche Grüsse Kay Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wemasb Mitglied Quereinsteiger
Beiträge: 124 Registriert: 10.09.2012 SolidWorks 2018 Office 2010 AutoCAD 2007
|
erstellt am: 22. Jul. 2015 09:44 <-- editieren / zitieren --> Unities abgeben: Nur für kayex
Guten Morgen, auch wenn der Thread hier schon etwas älter ist, hoffe ich auf eine Antwort. Ich bin was VBA angeht nicht gerade gut dabei, aber benötige ein ähnliches Makro wie dieses hier, mit folgendem kleinen Unterschied: Ich habe die Dateiinformationen BESCHRIFTUNG1, BESCHRIFTUNG2, BESCHRIFTUNG3, BESCHRIFTUNG4 und BESCHRIFTUNG5... und diese sollen je mit dem Text einer Zelle aus einer Excel namens DATEN.xls gefüllt werden (Pfad: C:\Laufwerk_D\AK\ZH205-SWX\DATEN.xls). Wenn mir hier irgendjemand dieses Makro dahingehend umschreiben könnte... ich würde vor demjenigen auf die Knie fallen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2776 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 22. Jul. 2015 10:15 <-- editieren / zitieren --> Unities abgeben: Nur für kayex
Hallo wemasb, also das ist nichtmal nur eine kleine Fingerübung sondern etwas mehr Aufwand wegen dem Zugriff auf die Excel-Datei und dann auch noch Zuordnung Zeile zu Bauteil und Entsprechend Spalte zu Eigenschaft in Bauteil (also denke ich mal dass es so gedacht ist), da wirst du denke ich hier niemanden finden der dir das aus Spaß an der Freude schreibt, ich denke auch mal das du das auf mehrer Datein automatisch anwenden möchtest.? Bei klaren Fragestellungen / Problemen wirst du bestimmt Helfer finden aber so... "Schreibt mir mal wer was" eher nicht. Gruß Bernd ------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht --- Staatlich anerkannte Deutschniete Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wemasb Mitglied Quereinsteiger
Beiträge: 124 Registriert: 10.09.2012 SolidWorks 2018 Office 2010 AutoCAD 2007
|
erstellt am: 22. Jul. 2015 10:32 <-- editieren / zitieren --> Unities abgeben: Nur für kayex
|
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2776 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 22. Jul. 2015 10:47 <-- editieren / zitieren --> Unities abgeben: Nur für kayex
Zitat: kann mir denn jemand verraten wie nur der Teil mit dem Excel-Zugriff aussehen würde
Hier wäre die Frage wie du auf die Excel-Datei zugreifen willst, willst du Sie "nur" in ein Array einlessen und darin dann die Informationen über die SWX-VBA suchen oder möchtest du die Excel-Datei öffnen, die Daten mittels Excel-VBA suchen lassen, in Variablen schreiben und dann die Datei wieder schließen und in der SWX-VBA die Daten weiter verarbeiten lassen? Gruß Bernd ------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht --- Staatlich anerkannte Deutschniete Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jörg.jwd Ehrenmitglied V.I.P. h.c. CAD-PDM Administrator
Beiträge: 3109 Registriert: 05.11.2003
|
erstellt am: 22. Jul. 2015 10:50 <-- editieren / zitieren --> Unities abgeben: Nur für kayex
Hallo, wenn's nur darum geht benutzerdefinierte Eigenschaften in's Teil zu bekommen würd ich das ohne die SWX-API machen. Schreib dir doch einfach ein VB-Script das direkt in die bnutzerdefinierten Eigenschafte auf dem file-System schreibt. Geht auch um Klassen schneller da die Teile nicht in SWX geöffnet werden müssen.
------------------ Grüße Jörg da ich weiß daß ich nichts weiß weiß ich immer noch mehr als die die nicht wissen daß sie nichts wissen (weiß nicht von wem) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wemasb Mitglied Quereinsteiger
Beiträge: 124 Registriert: 10.09.2012 SolidWorks 2018 Office 2010 AutoCAD 2007
|
erstellt am: 22. Jul. 2015 11:10 <-- editieren / zitieren --> Unities abgeben: Nur für kayex
|
wemasb Mitglied Quereinsteiger
Beiträge: 124 Registriert: 10.09.2012 SolidWorks 2018 Office 2010 AutoCAD 2007
|
erstellt am: 22. Jul. 2015 11:12 <-- editieren / zitieren --> Unities abgeben: Nur für kayex
|
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2776 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 22. Jul. 2015 13:17 <-- editieren / zitieren --> Unities abgeben: Nur für kayex
Dann schreib uns doch auch bitte auf was nun tatsächlich die Bedingungen sind. Vorher, was ist alles gegeben: SWX geöffnet? Teil(e), Baugruppe(n), Zeichnung(en) geöffnet? Tabelle geöffnet? Welche Informationen stehen wo in dieser Tabelle? Wie sollen die Informationen woher aus der Tabelle geholt werden. ... Laufzeit: Was soll passieren während das VBA, VBS, VB.net, C# what ever arbeitet? Nachher: Welche Datein sind noch offen? Welche ungespeichrt geschlossen? Welche sind schon gespeichert aber noch offen. ... z.B. Ich würde gern mit SolidWorks-VBA ein Programm schreiben dass bei geöffnetem Modell von diesem den Namen ermittelt, mit diesem Namen dann aus einer bereits geöffneten Tabelle (Name xyz.xls) in der Spalte XY nach diesem Namen sucht und den entsprechenden Zeilenindex ermittelt, wenn der Namen gefunden wurde soll der Wert in der Spalte XZ Zeile wie ermittelter Zeilenindex ausgelesen und im Modell in die benutzerdefinierte Eigenschaften "Neue Eigenschaft" eingetragen werden, wenn der Name nicht gefunden wurde soll eine Fehlermeldung erscheinen". Wenn eine Name gefunden wurde soll im anschluss das Modell gespeichert werden und das Makro beendet. Wenn keine übereinstimmung gefunden werden soll nur das Macro ohne speichern beendet werden usw. So wäre für mich eine gute Beschreibung und alleine durch die Aufgliederung kannst du mit Hilfe von Google oder der API Hilfe schon einiges Schritt für Schritt angehen. Gruß Bernd ------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht --- Staatlich anerkannte Deutschniete Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wemasb Mitglied Quereinsteiger
Beiträge: 124 Registriert: 10.09.2012 SolidWorks 2018 Office 2010 AutoCAD 2007
|
erstellt am: 22. Jul. 2015 15:25 <-- editieren / zitieren --> Unities abgeben: Nur für kayex
Vorher: -SWX geöffnet -Zeichnung geöffnet -Excel Tabelle geöffnet -Informationen stehen auf Tabelle "BESCHRIFTUNG-DXF" in den Zellen A1, A2, A3, A4 und A5 -die Werte aus diesen Zellen sollen in die benutzerdefinierte Eigenschaften BESCHRIFTUNG1, BESCHRIFTUNG2 usw kopiert werden Laufzeit: - ??? Nachher: -SWX Zeichnung soll offen bleiben, wird danach manuell in DXF-Format abgespeichert -Excel soll offen bleiben, es folgen noch weitere manuelle Aktionen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
teaser Mitglied Konstrukteur
Beiträge: 121 Registriert: 15.01.2008 Solidworks 2019, CDB
|
erstellt am: 22. Jul. 2015 18:03 <-- editieren / zitieren --> Unities abgeben: Nur für kayex
|
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2776 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 23. Jul. 2015 07:17 <-- editieren / zitieren --> Unities abgeben: Nur für kayex
Hallo Frank, Zitat: Wieso wird nicht der Taskmanager von Solidworks benutzt, der schreibt und überschreibt doch die Attribute automatisiert....
Geht das wirklich ohne Macro? Ich weiß nur das man in gewählten Elemente Werte eintragen lassen kann aber diese nicht aus einer anderen Quelle wie z.B. Excel holen kann sondern für die entsprechenden Dokumente händisch eintragen muß. Wenn wemasb aber wirklich immer die selben Werte eingetragen haben will dann wäre der Taskplaner wirklich eine Option. Diese Funktion ist aber glaube ich erst ab SWX Professional im Taskplaner verfügbar. Hallo wemasb, es wird doch langsam. Soll das Macro über die SWX-API oder Excel-API ausgeführt werden? Sollen die Werte stur heil immer für jedes Teil aus den Zellen A1-A5 ausgelesen werden? Soll die Zeichnung gespeichert werden? Gruß Bernd ------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht --- Staatlich anerkannte Deutschniete Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wemasb Mitglied Quereinsteiger
Beiträge: 124 Registriert: 10.09.2012 SolidWorks 2018 Office 2010 AutoCAD 2007
|
erstellt am: 23. Jul. 2015 10:00 <-- editieren / zitieren --> Unities abgeben: Nur für kayex
Hallo bk.sc, sowohl SWX-API als auch Excel-API, wäre mir beides Recht :-) und ja es sind stur diese 5 Zellen (A1-A5), die lasse ich von meiner Excel automatisch mit den passenden Werten füllen. Ich weiß nicht, ob das von Relevanz ist, aber die erwähnten benutzerdefinierten Eigenschaften sind schon vorhanden, müssten also nicht vom Makro angelegt werden. Anschließendes speichern wäre auch nett, muss aber nicht zwangsläufig sein, da anschließend eh noch ein Pack and Go mit umbennen erfolgt. An dieser Stelle übrigens ein Danke an alle, die mir helfen möchten, ich weiß das sehr zu schätzen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2776 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 23. Jul. 2015 12:47 <-- editieren / zitieren --> Unities abgeben: Nur für kayex
Hallo, mal dirty style ohne jegliche Überprüfung von irgendwas Hierfür muss natürlich der Verweis auf die Excel-Bibliothek aktiviert sein, sonst läuft nix. "Name_Tabelle.xls" und "Name_Mappe" mußt du natürlich auch vorher noch anpassen. Code:
Option ExplicitDim swApp As SldWorks.SldWorks Dim swDrw As SldWorks.ModelDoc2 Dim xlsApp As Object 'Excel Dim xlsWorkbook As Object Dim xlsWorksheet As Object Dim val1 As String Dim val2 As String Dim val3 As String Dim val4 As String Dim val5 As String Dim boolstatus As Boolean Dim lErrors As Long, lWarnings As Long Sub main() Set swApp = Application.SldWorks Set swDrw = swApp.ActiveDoc Set xlsApp = GetObject(, "Excel.Application") Set xlsWorkbook = xlsApp.workbooks("Name_Tabelle.xls") Set xlsWorksheet = xlsWorkbook.Worksheets("Name_Mappe") val1 = xlsWorksheet.range("A1").Value val2 = xlsWorksheet.range("A2").Value val3 = xlsWorksheet.range("A3").Value val4 = xlsWorksheet.range("A4").Value val5 = xlsWorksheet.range("A5").Value Set xlsApp = Nothing Set xlsWorkbook = Nothing Set xlsWorksheet = Nothing swDrw.CustomInfo2("", "BESCHRIFTUNG1") = val1 swDrw.CustomInfo2("", "BESCHRIFTUNG2") = val2 swDrw.CustomInfo2("", "BESCHRIFTUNG3") = val3 swDrw.CustomInfo2("", "BESCHRIFTUNG4") = val4 swDrw.CustomInfo2("", "BESCHRIFTUNG5") = val5 boolstatus = swDrw.ForceRebuild3(True) boolstatus = swDrw.Save3(swSaveAsOptions_Silent, lErrors, lWarnings) End Sub
Gruß Bernd ------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht --- Staatlich anerkannte Deutschniete Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wemasb Mitglied Quereinsteiger
Beiträge: 124 Registriert: 10.09.2012 SolidWorks 2018 Office 2010 AutoCAD 2007
|
erstellt am: 23. Jul. 2015 13:05 <-- editieren / zitieren --> Unities abgeben: Nur für kayex
habe dein Makro direkt unter SUB MAIN () hineinkopiert, die Zellen in Excel verändern (gerade gemerkt, dass ich mich in der Spalte vertan habe, sorry), den Namen der Excel Datei und den Namen der Tabelle eingefügt. Wenn ich es laufen lasse, passiert irgendwie gar nichts... keine Fehlermeldung, keine eingefügten Eigenschaften, einfach nichts Sub main()
Option Explicit Dim swApp As SldWorks.SldWorks Dim swDrw As SldWorks.ModelDoc2 Dim xlsApp As Object 'Excel Dim xlsWorkbook As Object Dim xlsWorksheet As Object Dim val1 As String Dim val2 As String Dim val3 As String Dim val4 As String Dim val5 As String Dim boolstatus As Boolean Dim lErrors As Long, lWarnings As Long Sub main() Set swApp = Application.SldWorks Set swDrw = swApp.ActiveDoc Set xlsApp = GetObject(, "Excel.Application") Set xlsWorkbook = xlsApp.workbooks("DATEN.xls") Set xlsWorksheet = xlsWorkbook.Worksheets("STEMPEL-DXF") val1 = xlsWorksheet.range("E1").Value val2 = xlsWorksheet.range("E2").Value val3 = xlsWorksheet.range("E3").Value val4 = xlsWorksheet.range("E4").Value val5 = xlsWorksheet.range("E5").Value Set xlsApp = Nothing Set xlsWorkbook = Nothing Set xlsWorksheet = Nothing swDrw.CustomInfo2("", "BESCHRIFTUNG1") = val1 swDrw.CustomInfo2("", "BESCHRIFTUNG2") = val2 swDrw.CustomInfo2("", "BESCHRIFTUNG3") = val3 swDrw.CustomInfo2("", "BESCHRIFTUNG4") = val4 swDrw.CustomInfo2("", "BESCHRIFTUNG5") = val5 boolstatus = swDrw.ForceRebuild3(True) boolstatus = swDrw.Save3(swSaveAsOptions_Silent, lErrors, lWarnings) End Sub Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2776 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 23. Jul. 2015 13:33 <-- editieren / zitieren --> Unities abgeben: Nur für kayex
Mach mal eins der beiden "Sub main()" raus, üblicherweise würde ich das über Option Explicit raushauen. Alternativ, könntest du auch einfach mal aus dem Macro-Editor das Macro mit F8 Zeilenweise durchgehen und schauen was er macht oder eben nicht macht. ------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht --- Staatlich anerkannte Deutschniete [Diese Nachricht wurde von bk.sc am 23. Jul. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wemasb Mitglied Quereinsteiger
Beiträge: 124 Registriert: 10.09.2012 SolidWorks 2018 Office 2010 AutoCAD 2007
|
erstellt am: 23. Jul. 2015 14:02 <-- editieren / zitieren --> Unities abgeben: Nur für kayex
|