SolidWorks MakroMania - DXF speichern alle Blätter

SolidWorks MakroMania ist eine Beispielsammlung einiger Makros, die Ihnen eine Vorstellung davon geben soll, was man auch schon mit Makros in SolidWorks alles anstellen kann. Der Code des Makros sollte so gut dokumentiert sein, dass Sie damit ohne weitere Anleitung verstehen, was gemacht wird.

< voriges
MakroMania
Übersicht


nächstes >

Nummer 05
DXF speichern alle Blätter

Download
ZIP, 1 KB

Ich übernehme keine Haftung für die korrekte Funktion der Routinen oder irgendwelcher Schäden bei der Anwendung dieser Beispiele. Das gesamte Risiko trägt der Benutzer selbst. - Sorry, muss sein.

Es ist ziemlich lästig, wenn mehrblättrige Zeichnungen als DXF oder DWG abgespeichert werden sollen, da jedes Blatte einzeln aktiviert und dann abgespeichert werden muss, da kommen schnell ein paar Dutzend Mausklicks zusammen.

Hier folgt nun ein Beispiel, wie so etwas auch automatisiert werden kann; wenn da einige umständliche Mechanismen drin sind liegt es daran, dass ich es so geschrieben habe, dass es auch noch auf dem "alten" VB3-System von vor SolidWorks 2001 laufen soll.

' **********************************************************************
' * Makro erzeugt aus dem aktiven Zeichnungsdokument für alle Blätter
' * eine DXF Datei im Verzeichnis der Zeichnung. Es werden alle Blätter
' * unter dem Namen kombiniert mit dem Blattnamen abgespeichert.
' *
' * 05.04.2001 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 Titel As String
Dim Datei As String
Dim temp As String
Dim pfad As String
Dim msgtxt As String

Dim i As Long
Dim AnzahlBl As Long
Dim SheetName As String

Const swDocDRAWING = 3

Sub main()

    Set SwApp = CreateObject("SldWorks.Application")
    Set DrawingDoc = SwApp.ActiveDoc

    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

    ' damit die DXF anschließend im Verzeichnis der Zeichnung gespeichert werden
    ' muss der Pfad ermittelt werden. Ansonsten werden die DXFs im Verzeichnis
    ' des Makro gespeichert. Wenn man ein Sammelverzeichnis hat kann man das 
    ' natürlich auch einfach direkt angeben 
    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

    ' wenn mehr als ein Blatt da ist könnte es sein, dass wir nicht auf
    ' Blatt 1 sind. In einem Makro müssen wir jetzt einen Trick machen, um
    ' auf das erste Blatt zurückzukommen.
    ' Dazu immer wieder ein Blatt zurückspringen und dabei den Blattnamen
    ' vergleichen; wenn der gleich bleibt haben wir das erste Blatt erreicht.
    SheetName = Sheet.GetName
    For i = 1 To AnzahlBl - 1
        DrawingDoc.SheetPrevious
        Set Sheet = DrawingDoc.GetCurrentSheet
        If (SheetName = Sheet.GetName) Then
            Exit For
        End If
        SheetName = Sheet.GetName
    Next i

    ' jetzt sind wir garantiert auf dem ersten Blatt und können jetzt eins
    ' nach dem anderen Abspeichern
    msgtxt = ""
 
    For i = 1 To AnzahlBl

        ' nur den Dokumentnamen holen (der in der Titelzeile von SolidWorks
        ' angezeigt wird)
        Titel = DrawingDoc.GetTitle
        MsgBox DrawingDoc.GetPathName
        ' und die Endung mit dem .slddrw abschneiden, wenn vorhanden
        If (InStr(Titel, ".sld") > 0) Then
           Datei = Left(Titel, InStr(Titel, ".sld") - 1)
        Else
           Datei = Titel
        End If
        ' wir wollen alle Blätter als DXF mit den eingestellten Optionen abspeichern
        ' hier könnte auch z.B. einfach durch Umbenennen der Endung das Blatt als
        ' DWG (".dwg") oder TIFF (".tif") gespeichert werden. dabei werden aber
        ' jeweils die aktuellen Exportparameter benutzt, also würden z.B. alle
        ' TIFFs in derselben Größe abgespeichert.
        Datei = pfad & Datei & ".dxf"

        ' dann erfolgt das Speichern, die Parameter sind:
        ' DrawingDoc.SaveAs2 ( newName, unused, saveAsCopy, silent )
        ' wenn alles geklappt hat, wird eine 0 zurückgeliefert, ansonsten ein
        ' Wert ungleich 0
        If (DrawingDoc.SaveAs2(Datei, 0, True, False)) Then
            MsgBox "FEHLER BEIM SPEICHERN VON " & Datei & Chr$(10) & Chr$(13)
            msgtxt = msgtxt & "*** FEHLER bei: " & Datei & Chr$(10) & Chr$(13)
        Else
            msgtxt = msgtxt & "erfolgreich gespeichert: " & Datei & Chr$(10) & Chr$(13)
        End If

        ' und wenn noch Blätter kommen dieses aktivieren
        If AnzahlBl > i Then
            DrawingDoc.SheetNext
        End If
    Next i

    ' und noch die Zusammenfassung übers Speichern ausgeben
    MsgBox msgtxt
End Sub


Zurück zum Seitenanfang

hr.gif (4491 Byte)

counter Kritik und Anregungen bitte an Stefan Berlitz. Letzte Änderung dieser Seite am Donnerstag, 01. Februar 2007 17:40