| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| myCAD 2024 Visiativ-Kundentag in Rosenheim, eine Veranstaltung am 29.10.2024
|
Autor
|
Thema: Zeichnung erstellen aus Dokumenteigenschaften .slddrw (3447 mal gelesen)
|
GrafZahl81 Mitglied Konstrukteur
Beiträge: 50 Registriert: 12.09.2011
|
erstellt am: 15. Sep. 2011 13:45 <-- editieren / zitieren --> Unities abgeben:
Hallo, Da ich nun seit mehreren Stunden an einem Problem hänge was sicherlich durch meine fehlende Kenntnis herrührt konnte ich einfach nicht anders und wollte euch fragen ob ihr mir Tipps und Radschläge geben könntet?? Sinn Des Makros soll sein: ich habe z.B. zwei Dateien, die eine mit Konfigurationen und die andere ohne. Innerhalb dieser befinden sich schon die Konfigurationsspeziefischen Eigenschaften. (Eigenschaftsname=Zeichnungsnummer; Werte/Textausdruck=3206.75-24000.01:16(4)) diese Zahlenfolge steht nun schon in der entsprechenden Zeichnung (verlinkt über "Modell in Ansicht, das in Blatteigenschaften definiert ist"). Mein Problem ist es nun, das ich eine Zeichnung (bis dato existert keine) erstellen will die entsprechend der Konfiguration eine Nummer enthält z.B. 3206.75-24000.01:16(4)_Deckel.slddrw und 3206.75-24000.01:16(4)_Deckel.pdf (Deckel soll der Name des Ursprungteiles sein. wie man nun noch sieht ist die Zahlenfolge mit einem : getrennt der ( ich hoffe über "Datei = Replace(Datei, ":", "-")") leider arbeite ich schon den ganzen tag daran und bis dato ist nichts sinnvolles entstanden....und ich habe schon vielerlei Wege versucht Ich würde mich extrem darüber freuen wenn ihr mir helfen könnten mfg Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GrafZahl81 Mitglied Konstrukteur
Beiträge: 50 Registriert: 12.09.2011
|
erstellt am: 15. Sep. 2011 17:46 <-- editieren / zitieren --> Unities abgeben:
hmm, schade das mir hierbei keiner helfen kann/will.... also wie gesagt, ich hab schon ne Weile versucht auf Grundlage einiger Forenbeiträge nen Makro zu schreiben nur da mir die Kenntnisse im Programmieren fehlen (hatten JavaScript im Studium) waren die einzigen Erfolge Kopfschmerzen und nen Koffeinschock....:-( Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GrafZahl81 Mitglied Konstrukteur
Beiträge: 50 Registriert: 12.09.2011
|
erstellt am: 15. Sep. 2011 17:59 <-- editieren / zitieren --> Unities abgeben:
|
GrafZahl81 Mitglied Konstrukteur
Beiträge: 50 Registriert: 12.09.2011
|
erstellt am: 16. Sep. 2011 08:42 <-- editieren / zitieren --> Unities abgeben:
sooo, bins mal wieder (fetzt wirklich sich selber zu kommentieren :-) ) zumindest hab ich mal wieder versucht das Makro mit Hilfe der im Forum dargestellten Markros zu erstellen und naja schaut selbst, es macht noch nicht das was ich wirklich will... Dim swApp As Object Dim DrawingDoc As Object Dim Sheet As Object Dim vConfigName As Variant Dim Model As Object Dim Titel As String Dim Datei As String Dim DXFDatei As String Dim PDFDatei As String Dim temp As String Dim Pfad As String Dim DXFPfad As String Dim SLDDRWPfad As String Dim msgtxt As String Dim MyPropMan As CustomPropertyManager Dim i As Long Dim AnzahlBl As Long Dim Errors As Long Dim Warnings As Long Dim Part As Object Dim Artikelnr As String Const CIArtikelnr = "SWFormatGröße" 'Dateieigenschaft Dim Record As Variant Dim n As Integer Dim SheetName As String Const swDocDRAWING = 3 Sub main() Set swApp = CreateObject("SldWorks.Application") Set DrawingDoc = swApp.ActiveDoc msgtxt = "" If (DrawingDoc.GetType <> swDocDRAWING) Then ' wenn keine Zeichnung aktiv wird das Makro wieder beendet MsgBox "Nur für Zeichnungen geeignet" Exit Sub End If ' die Anzahl der Blätter holen, und dann in der Schleife eines nach ' dem anderen Abspeichern. Dazu ein Handle auf das aktuelle Blatt holen AnzahlBl = DrawingDoc.GetSheetCount Set Sheet = DrawingDoc.GetCurrentSheet temp = DrawingDoc.GetPathName ' da wir nur den Pfad brauchen alles andere abtrennen For i = Len(temp) To 1 Step -1 If Mid$(temp, i, 1) = "\" Then Pfad = Left(temp, i) Exit For End If Next i SheetName = Sheet.GetName For i = 1 To AnzahlBl - 1 DrawingDoc.SheetPrevious Set Sheet = DrawingDoc.GetCurrentSheet If (SheetName = Sheet.GetName) Then Exit For End If Next i Set swApp = Application.SldWorks Set Part = swApp.ActiveDoc If Part Is Nothing Then MsgBox "Kein Solidworks-Dokument geöffnet!", vbInformation, "Save As PDF" End End If If Part.GetType() <> swDocDRAWING Then MsgBox "Geöffnetes Dokument ist keine Zeichnung!", vbInformation, "Save As PDF" End End If Artikelnr = Part.CustomInfo2("", CIArtikelnr) If Trim(Artikelnr) = "" Then MsgBox "Keine Dateieigenschaft " + CIArtikelnr + " gefunden!" End If Datei = SLDDRWPfad & Datei & Artikelnr & ".slddrw" Datei = Replace(Datei, "*", "-") If (DrawingDoc.SaveAs4(Datei, swSaveAsCurrentVersion, swSaveAsOptions_Silent, _ Errors, Warnings)) Then msgtxt = msgtxt & "SolidWorks Dokument erfolgreich gespeichert: " & Datei & Chr$(10) & Chr$(13) Else MsgBox "FEHLER BEIM SPEICHERN VON " & Datei & Chr$(10) & Chr$(13) msgtxt = msgtxt & "*** FEHLER bei: " & Datei & Chr$(10) & Chr$(13) End If ' und noch die Zusammenfassung übers Speichern ausgeben MsgBox msgtxt End Sub Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
dopplerm Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3627 Registriert: 11.02.2005 Win 10 SWX 2019 SP 5.0
|
erstellt am: 16. Sep. 2011 09:06 <-- editieren / zitieren --> Unities abgeben: Nur für GrafZahl81
|
GrafZahl81 Mitglied Konstrukteur
Beiträge: 50 Registriert: 12.09.2011
|
erstellt am: 16. Sep. 2011 09:24 <-- editieren / zitieren --> Unities abgeben:
Danke Martin, bin grad fleißig am stöbern....klar kennt man die eine oder andere Seite nur manche Infos habe ich bis dato noch nicht durch geguckt.... nochmal zur Aufgabe des Makros: egal ob ich eine Teil mit mehreren Konfigurationen oder nur einer habe, es werden in den Konfigurationsspeziefischen Eigenschaften Werte übergeben z.B. Zeichnungsnummer (so wird auch die Konfiguration selber bezeichnet fals vorhanden) zumindest soll das Makro den Name der Konfiguration nutzen und die Zeichnung abspeichern ("Konfigurationsname"_"Dateiname des Ursprungteiles".slddrw) da in manchen fällen die Nummer der Konfiguration Sonderzeichen enthält sollen diese mit z.B. einem Unterstrich ersetzt werden.... so ich hoffe manch einer versteht nun mein Anliegen und kann mir vielleicht auch helfen zu dem geschriebenen Makro ist noch zu sagen das "SWFormatGröße" nur ein Test war ob er überhaupt was ausliest Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
dopplerm Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3627 Registriert: 11.02.2005 Win 10 SWX 2019 SP 5.0
|
erstellt am: 16. Sep. 2011 11:27 <-- editieren / zitieren --> Unities abgeben: Nur für GrafZahl81
|
GrafZahl81 Mitglied Konstrukteur
Beiträge: 50 Registriert: 12.09.2011
|
erstellt am: 16. Sep. 2011 11:30 <-- editieren / zitieren --> Unities abgeben:
|
GrafZahl81 Mitglied Konstrukteur
Beiträge: 50 Registriert: 12.09.2011
|
erstellt am: 16. Sep. 2011 11:56 <-- editieren / zitieren --> Unities abgeben:
neuer versuch neues Glück so nun ist nen Makro entstanden bei denen so mancher nur den Kopf schütteln würde, zumindest erstellt es erstmal eine Datei nur bei mehrmaligem Aufrufen verlängert sich der Dateiname :-( weiterhin wird der Dateiname nicht eingefügt und es sind mit Sicherheit nen Haufen ungenutzter befehle enthalten ' ********************************************************************** ' * Makro benennt alle Blätter einer Zeichnung um, dazu wird der ' * Konfigurationsname des Modells in der Zeichenansicht genutzt, die ' * auch für die benutzerdefinierten Eigenschaften in den ' * Blatteigenschaften eingestellt ist ' * ' * 22.05.2007 Stefan Berlitz (stefan.berlitz@solidworks.cad.de) ' * http://solidworks.cad.de ' * http://swtools.cad.de ' * ' ********************************************************************** Dim swApp As Object Dim DrawingDoc As Object Dim Sheet As Object Dim Viewname As String Dim View As Object Dim ConfigName As String Dim i As Long Dim AnzahlBl As Long Dim SheetNames As Variant Dim vConfigName As Variant Dim Model As Object Dim Titel As String Dim Datei As String Dim SLDDRWDatei As String Dim temp As String Dim Pfad As String Dim DXFPfad As String Dim SLDDRWPfad As String Dim msgtxt As String Dim MyPropMan As CustomPropertyManager Dim Errors As Long Dim Warnings As Long Dim Part As Object Dim Artikelnr As String Const CIArtikelnr = "refconfig" 'Dateieigenschaft Dim Record As Variant Dim n As Integer Dim SheetName As String ' Konstante aus swconst.bas Const swDocDRAWING = 3 Sub main() ' an SolidWorks anhängen Set swApp = CreateObject("SldWorks.Application") ' prüfen, ob überhaupt ein Dokument offen ist ... Set DrawingDoc = swApp.ActiveDoc If DrawingDoc Is Nothing Then MsgBox "Kein Dokument offen" Exit Sub End If ' ... und ob das auch eine Zeichnung ist If (DrawingDoc.GetType <> swDocDRAWING) Then MsgBox "Nur für Zeichnungen sinnvoll" Exit Sub End If ' einen Loop über alle Blätter, dazu die Anzahl der Blätter holen, ' und dann in der Schleife eines nach dem anderen abklappern AnzahlBl = DrawingDoc.GetSheetCount SheetNames = DrawingDoc.GetSheetNames For i = 0 To AnzahlBl - 1 ' das nächste Blatt aktivieren If DrawingDoc.ActivateSheet(SheetNames(i)) Then ' aktuelles Blatt holen Set Sheet = DrawingDoc.GetCurrentSheet ' Namen zurücksetzen ConfigName = "???" ' den Viewnamen aus den Blatteigenschaften auslesen Viewname = Sheet.CustomPropertyView ' dann den passenden View suchen,d er erste View ist immer das Blatt selbst Set View = DrawingDoc.GetFirstView ' wenn der Viewname "Standard" ist wird der erste View genommen If Viewname = "Standard" Then ' also die Konfig aus dem Modell des ersten Views holen Set View = View.GetNextView ConfigName = View.ReferencedConfiguration Else ' ansonsten die View suchen, deren Namen angegeben ist While Not View Is Nothing If View.GetName2 = Viewname Then ConfigName = View.ReferencedConfiguration End If Set View = View.GetNextView Wend End If ' So, jetzt haben wir den Namen der Konfiguration, die jetzt in ' den Blattnamen eintragen ' eigentlich müsste hier noch geprüft werden, ob es schon ein Blatt ' mit diesem Namen gibt, denn sonst klappt das Umbenennen nicht Sheet.SetName (ConfigName) End If Next i 'speichert nun die Datei mittels ConfigName ab Datei = SLDDRWPfad & Datei & ConfigName & ".slddrw" 'entfernt das Sonderzeichen ":" und ersetzt es durch ein "-" Datei = Replace(Datei, ":", "-") If (DrawingDoc.SaveAs4(Datei, swSaveAsCurrentVersion, swSaveAsOptions_Silent, _ Errors, Warnings)) Then msgtxt = msgtxt & "SolidWorks Dokument erfolgreich gespeichert: " & Datei & Chr$(10) & Chr$(13) Else MsgBox "FEHLER BEIM SPEICHERN VON " & Datei & Chr$(10) & Chr$(13) msgtxt = msgtxt & "*** FEHLER bei: " & Datei & Chr$(10) & Chr$(13) End If ' und noch die Zusammenfassung übers Speichern ausgeben MsgBox msgtxt End Sub Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GrafZahl81 Mitglied Konstrukteur
Beiträge: 50 Registriert: 12.09.2011
|
erstellt am: 16. Sep. 2011 12:18 <-- editieren / zitieren --> Unities abgeben:
|
GrafZahl81 Mitglied Konstrukteur
Beiträge: 50 Registriert: 12.09.2011
|
erstellt am: 26. Sep. 2011 11:10 <-- editieren / zitieren --> Unities abgeben:
Soo, nun schreib ich mir mal wieder ne eigene Nachricht, vielleicht könnte mir jemand mal damit behilflich sein das ich beim mehrfachen Aufrufen des Makros sich der Dateiname verlängert....würde mich echt freuen wenn jemand eine Antwort hätte mfg Stefan 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: 26. Sep. 2011 12:14 <-- editieren / zitieren --> Unities abgeben: Nur für GrafZahl81
Hallo Stefan, du hast in dem Makro, was oben als letztes gepostet ist, den Dateinamen so zusammengesetzt: Code: 'speichert nun die Datei mittels ConfigName ab Datei = SLDDRWPfad & Datei & ConfigName & ".slddrw"
D.h. der Dateiname muss bei mehrmaligem Aufruf immer länger werden. SolidWorks hält sich das Makro ja im Editor, deswegen solltest du alle Variablen zu beginn nicht nur deklarieren (DIm Datei as string) sondern auch noch initialisieren - das mach ich z.B. in meinem Teil des Code mit Configname = "???".Da du "Datei" gar nicht initialisierst, es aber wohl im ersten Durchang klappt, würde ich den Teil doch einfach weglassen und nur schreiben
Code: Datei = SLDDRWPfad & ConfigName & ".slddrw"
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 |
GrafZahl81 Mitglied Konstrukteur
Beiträge: 50 Registriert: 12.09.2011
|
erstellt am: 26. Sep. 2011 12:21 <-- editieren / zitieren --> Unities abgeben:
Danke für deine schnelle Antwort, wie du siehst bin ich ja nu kein Experte was Makros betrifft. Mein Gedanke war das ich mit "Datei" den ursprünglichen Dateiname des Teils aufrufe und dieser somit vor "ConfiName" steht und sich die erstellte Zeichnung nun aus "Dateiname"+"Configname"+".slddrw" zusammen setzt....leider geht das nicht...und daran tüftel ich nun schon ne Weile :-( mfg Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 2580 Registriert: 02.10.2006 Firma: SW 2024-3.1 + PDM Prof. Windows 10 Pro 64bit, i9-11900 32 GbRAM, Quadro P2200 Home: SW 2023-5.0 Passungstabelle von Heinz Windows 11 Pro 64bit, i7-12700K, 32 GbRAM, GeForce GTX 1050Ti Samsung C34H892, 3440x1440 Pixel
|
erstellt am: 26. Sep. 2011 19:33 <-- editieren / zitieren --> Unities abgeben: Nur für GrafZahl81
Hallo Stefan, ich weiß nicht ob dir das weiterhilft, aber in diesem Thread habe ich mein Schriftfeldmakro veröffentlicht. http://ww3.cad.de/foren/ubb/Forum2/HTML/022779.shtml Was man dem Makro nicht ansieht aber was es unter anderem dennoch leistet. - Es trägt zunächst erst mal Dateieigenschaften sowohl in die benutzerdefinierten als auch in die Konfigurationsspezifischen Eigenschaften ein. - ist ein Teil bzw. eine Baugruppe geöffnet, das noch nicht gespeichert wurde, kommt man beim beenden des Makros automatisch zum Speichern unter. - ist eine Zeichnung geöffnet, wird beim Öffnen des Makros überprüft, ob der bisherige Speichername mit der Konfiguration in der Zeichnung zusammenhängt. Wenn nicht, kommt eine Meldung. (Dies ist sinnvoll, wenn ich eine bestehende Zeichnung mit z.B. Konfig 01 lade, und anschließend auf Konfig 02 switche. Normalerweise speichere ich dann persönlich unter einem neuen Namen ab. Falls ich dies aber vergesse, und nur speichern drücke, ist die falsche Konfig gespeichert.) - ist eine Zeichnung geladen die noch nicht gespeichert wurde oder eine neue Konfig enthält, wird automatisch beim beenden des Makros unter einem neuen Namen gespeichert. Und zwar nach der Logik "Dateiname" des Parts bzw. der Baugruppe + "-" + "Konfigname" + ".slddrw" Gespeichert wird unter dem selben Pfad des Parts bzw. der Baugruppe. Diese letzte Funktion könnte für dich Interessant sein. Wenn du Lust hast, schau rein. Uns spart das ne Menge Kleinarbeit. Grüße, Andi ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |