| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS | | | | 3DEXPERIENCE Conference 2024 | München, eine Veranstaltung am 17.10.2024
|
Autor
|
Thema: API - Stückliste nach bestimmter Spalte sortieren (1548 / mal gelesen)
|
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: 18. Apr. 2018 21:34 <-- editieren / zitieren --> Unities abgeben:
Hallo, durch meine anderen Beiträge haben sicherlich schon einige mitbekommen, dass ich an einem Makro dran bin, welches Stücklisten in Zeichnungen aktualisieren soll. Unter anderem soll dieses Makro auch die Stückliste nach einer bestimmten Spalte sortieren, und zwar nach unserer Spalte "Zeichnungsnummer". Hierzu gibt es verschiedene Beispiele, unter anderem auch in der API-Hilfe. ( Sort Table Example (VBA) ) hier ein Auszug aus meinem Code: Code:
'nach Spalte 3 sortieren vTables = swBomFeat.GetTableAnnotations Set swBomTable = vTables(0) Set swSortData = swBomTable.GetBomTableSortData 'Geben Sie die literale Sortiermethode an swSortData.SortMethod = swBomTableSortMethod_Literal swSortData.ColumnIndex(0) = 2 ' primäre Sortierung in Spalte 3 swSortData.Ascending(0) = True ' aufsteigend sortieren swSortData.ColumnIndex(1) = -1 ' keine sekundäre Sortierung swSortData.Ascending(1) = True ' aufsteigend sortieren swSortData.ColumnIndex(2) = -1 ' keine tertiäre Sortierung swSortData.DoNotChangeItemNumber = False swSortData.SaveCurrentSortParameters = True 'gewählte Sortierung speichern boolstatus = swBomTable.Sort(swSortData) 'Sortieren
Dieser Code sollte nach der dritten Spalte sortieren (Spalte 1 = 0), und bei mir ist die dritte Spalte = "Zeichnungsnummer". Tut er auch, solange im Teil bzw. der Baugruppe nur eine Konfig vorhanden ist. Sobald eine weitere Konfig existiert, werden im Auswahlfenster weitere Sortieroptionen angeboten. Existierende Konfigs werden oberhalb von "Zeichnungsnummer" angezeigt. "Stk." Neue Konfigs werden ganz unten hinzugefügt. Siehe Bild 02 und 03. Lösche ich die Tabelle und erzeuge sie neu, werden die 3 "Stk." alle oberhalb von "Zeichnungsnummer" eingereiht. Dieses Verhalten führt dazu, dass "Zeichnungsnummer" ständig wechselnde Spaltenpositionen einnimmt. :D Nach der Spaltenüberschrift "Zeichnungsnummer" kann man so direkt nicht sortieren, es muss eine Ziffer angegeben werden. Ich würde gerne die Spaltenüberschriften aller swSortData.ColumnIndex(0) auslesen, um die richtige definieren zu können, aber ich weiß nicht wie, habe nichts entsprechendes gefunden? Weiß jemand von euch wie das gehen könnte, oder hat sonst irgend einen Lösungsansatz? Über den folgenden Code kann ich zwar die Spaltenüberschriften auslesen, aber diese Spalten-Nr. hat nichts mit der Sortier-Nr. zu tun.
Code:
ColumnTitle = SwTabAnn.GetColumnTitle(i) 'Textinhalt der gewünschten Spaltenüberschrift
Bin also etwas ratlos und ich denke, es ist evtl. ein Bug. 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 |
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: 19. Apr. 2018 08:55 <-- editieren / zitieren --> Unities abgeben: Nur für Andi Beck
Hallo Andi, keine Lösung von hier, aber vielleicht ein Hinweis oder zwei, die mir beim nachspielen deines Phänomens aufgefallen sind. Zum einen kann ich das nicht nachstellen, dass ich auf einmal zusätzliche Sortieroptionen angezeigt bekomme, wenn ich einer Baugruppe zusätzliche Konfigurationen gebe oder den Komponenten darin. Ich bekomme immer nur die "Spalten", die in meienr Stückliste auch drin sind. Damit dann zum Punkt 2: bei rumspielen ist mir aufgefallen, dass swTableAnn.GetColumnTitle(i) immer nur die sichtbaren Spalten ausgibt, bei der Sortierung aber alle SPalten, auch die ausgeblendeten berücksichtigt werden. Könnte es also sein, dass du in deiner Stückliste ein paar ausgeblendete Spalten drin hast, die zufällig alle die Dateieigenschaft "Stk." darstellen? Dann kann ich deine Anzeige auf provozieren und dann stimmt natürlich die Nummer von GetColumnTitle nicht mit der "echten" Spaltennummer inkl. der ausgeblendeten überein. Ob Spalten ausgeblendet sind müsstest du nachvollziehen können, wenn swTableAnn.ColumnCount und swTableAnn.TotalColumnCount unterschiedlich sind. Und mit
Code: ColCount = swTableAnn.TotalColumnCount For i = 0 To ColCount - 1 Debug.Print i & " hidden: " & swTableAnn.ColumnHidden(i) Next
bekommst du dann heraus, welche Spalten ausgeblendet sind, kannst dir das merken, wahlweise umrechnen oder einfach kurz alle Spalte einblenden, deine Sortierung jetzt nach der richtigen Nummer machen und anschließend die gemerkten wieder ausblenden. Vielleicht liegt es ja wirklich an ausgeblendeten Spalte Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de 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: 19. Apr. 2018 10:08 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von StefanBerlitz:
Vielleicht liegt es ja wirklich an ausgeblendeten Spalte
Hallo Stefan, und besten Dank für deine Ausführungen. Nein, wir haben keine ausgeblendeten Spalten, welche ich evtl. wieder einblenden könnte. Und ja, die Anzahl der Spalten sind bei mir auch unterschiedlich, wenn ich mehr als eine Konfig habe. Also je nachdem wo ich zähle, in der Tabelle oder in der Funktion Sortierung. Bei mir werden alle Spalten der Stückzahl von Konfigurationen mit der Überschrift "Stk." angezeigt. Das liegt an der Grundeinstellung wie im Bild zu sehen ist. Nehme ich diesen Haken raus , wird statt "Stk." eben die Standardeinstellung verwendet, also "01/Menge" und "02/Menge" usw. Diese werden mir aber ebenfalls alle im Sortierendialog angeboten, obwohl in der Zeichnung nur eine Konfig eingesetzt ist. sehr mysteriös, 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 |
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: 19. Apr. 2018 10:27 <-- editieren / zitieren --> Unities abgeben:
ich nochmal, wie zähle ich die Anzahl der möglichen Spalten in der Sortierfunktion? mein Code:
Code:
'Ermitteln der Anzahl von möglichen Sortierspalten Dim xSpalten As Long Dim xSpalte As Long xSpalten = 1 Do Until xSpalten = -1 'solange durch die Schleife, bis Ergebnis -1 ist xSpalte = xSpalten swSortData.ColumnIndex(0) = xSpalten + 1 xSpalten = swSortData.ColumnIndex(0) Loop
und wieder wech, Andi ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|