Tabellen in Zeichnungsdatei anordnen

Mit diesem Code kann man alle Tabellen in einer Zeichnungsdatei des aktuellen Blattes, an den in der Variable ColumsToSplit eingetragenen Spalten trennen und vertikal anordnen.

Option Explicit
Dim swApp As SldWorks.SldWorks
Dim swModel As ModelDoc2
Dim swDrawing As DrawingDoc
Dim swTableAnnotation As TableAnnotation
Dim swNextTableAnnotation As TableAnnotation
Dim swAnnotation As Annotation
Dim swView As View
Dim ColumnsToSplit As Variant
Dim PositionValues As Variant
Dim i As Integer, j As Integer
Dim TotalHeight As Double
Dim RowCount As Integer
Dim StartPositionX As Double, StartPositionY As Double
Dim Direction As Integer
Sub main()
    ColumnsToSplit = Array(1, 5) 'Nach welchen Spalten soll geteilt werden.
    Direction = -1 'Das Vorzeichen steuert die Richtung der Verteilung der Tabellen: - nach unten, + nach oben
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swDrawing = swModel
    Set swView = swDrawing.GetFirstView
    Do While Not swView Is Nothing
        i = 0
        TotalHeight = 0
        Set swTableAnnotation = swView.GetFirstTableAnnotation
        If Not swTableAnnotation Is Nothing Then
            RowCount = swTableAnnotation.RowCount
            For j = 1 To RowCount
                TotalHeight = TotalHeight + swTableAnnotation.GetRowHeight(j)
            Next j
            Set swAnnotation = swTableAnnotation.GetAnnotation
            PositionValues = swAnnotation.GetPosition
            StartPositionX = PositionValues(0)
            Do
                Set swNextTableAnnotation = swTableAnnotation.Split(swTableSplitLocations_e.swTableSplit_BeforeColumn, ColumnsToSplit(i))
                Set swAnnotation = swNextTableAnnotation.GetAnnotation
                PositionValues = swAnnotation.GetPosition
                StartPositionY = PositionValues(1)
                swAnnotation.SetPosition2 StartPositionX, PositionValues(1) + TotalHeight * Direction, PositionValues(2)
                i = i + 1
                Set swTableAnnotation = swNextTableAnnotation
            Loop While i <= UBound(ColumnsToSplit)
        End If
        Set swView = swView.GetNextView
    Loop
End Sub

Kommentare 2

  • Sehr geehrter Herr Hornemann,
    mit viel Interesse verfolge ich Ihre Lehrgänge auf YouTube, ich bin begeistert.
    Sie suchen nach neuen Themen für zukünftige Projekte?
    Sie haben hier ein Beispiel, welches Tabellen in Zeichnungen behandelt.

    Ich habe selber ein Makro für Stücklisten in Zeichnungen geschrieben, welches folgende Aufgaben abarbeitet:
    1. Durch alle Zeichenblätter gehen und nach Stücklisten suchen
    2. Die Ansicht identifizieren, welche für die Stückliste zuständig ist und diese aktualisieren
    3. Nach Spalte „Zeichnungsnummer“ sortieren
    4. Zeilen unten anfügen, für Komponenten, welche aus der Stückliste ausgeschlossen sind
    5. Die Stückliste bzgl. Spaltenbreite und Zeilenhöhe optimieren (AutoFit)

    Ich kann Ihnen das Makro gerne zur Verfügung stellen.

    Leider habe ich mehrere Probleme, für die ich keine optimale Lösung gefunden habe.
    Zu 3.
    Unter bestimmten Voraussetzungen (mehrere Konfigs, Umstellung der Mengenspalte) lässt sich die Spalte „Zeichnungsnummer“ nicht eindeutig identifizieren und danach sortieren.
    Dieses Thema wurde hier diskutiert:
    https://ww3.cad.de/foren/ubb/Forum2/HTML/031359.shtml

    Zu 4.
    Die eingefügten Zeilen sind nicht Bidirektional, haben keine Verknüpfung zur Komponente, da dumme Texte eingefügt sind. Bei Veränderungen wird somit nicht aktualisiert.
    Dieses Thema wurde hier diskutiert:
    https://ww3.cad.de/foren/ubb/Forum2/HTML/035010.shtml

    Zu 5.
    Hier habe ich keinen passenden Befehl wie in Excel-VBA gefunden.
    xlWs.UsedRange.EntireColumn.AutoFit
    Weil ich keinen passenden Befehl gefunden habe, habe ich ein umfangreiches annähern an das Optimum gebastelt, was aber nicht wirklich zufrieden stellt.
    Dieses Thema wurde hier diskutiert:
    https://ww3.cad.de/foren/ubb/Forum2/HTML/031311.shtml

    Evtl. haben Sie Interesse an dieser Problematik für ein zukünftiges Projekt und finden bessere Ansätze als ich.

    Mit freundlichen Grüßen
    Andreas Beck

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert