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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | 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