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
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
Hallo Herr Beck,
das Makro würde ich sehr gerne nehmen und es mit Freude weiterentwickeln.
Gruß
Bernd Hornemann