| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Tabelle auslesen und Werte in andere Tabelle übertragen (282 / mal gelesen)
|
Goose Mitglied Maschinenbautechniker / geb. Zerspanungsmechaniker Fachrichtung Frästechnik
Beiträge: 206 Registriert: 29.03.2007 IV2024 R2.1 CATIA V6 R2013x
|
erstellt am: 08. Apr. 2024 10:29 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, mit diesem Code hab ich den Inhalt der Tabelle "Herstelldaten ...." Spalte : / Reihe: ausgelesen. Im Nachgang würde ich den Wert gerne in die Tabelle "Stirnrad" übertragen. Kann mir jemand exemplarisch auflisten wie die hier funktionieren könnte!? Danke und Gruß Code: Sub Tabelleauslesen() Dim oDrawDoc As DrawingDocument Set oDrawDoc = ThisApplication.ActiveDocument Dim sheet1 As sheet Set sheet1 = oDrawDoc.Sheets("Blatt:1") Dim table As CustomTable Set table = sheet1.CustomTables.Item(1) ' Zeilen- und Spaltenindizes beginnen bei 1 Dim rowNumber As Long rowNumber = 4 ' Vierte Zeile Dim columnNumber As Long columnNumber = 3 ' Dritte Spalte ' Den Wert der Zelle in der angegebenen Zeile und Spalte abrufen Dim cellValue As String cellValue = table.Rows.Item(rowNumber).Item(columnNumber).value Debug.Print cellValue End Sub
[Diese Nachricht wurde von Goose am 08. Apr. 2024 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2505 Registriert: 15.11.2006 Windows 10 x64, AIP 2023
|
erstellt am: 08. Apr. 2024 14:23 <-- editieren / zitieren --> Unities abgeben: Nur für Goose
Moin Geht man davon aus, dass die Zieltabelle in der Realität auch die zweite Tabelle auf dem gleichen Blatt ist und die Spalten- und Zeilennummern gleich sind: Code:
Sub Tabelleauslesen() Dim oDrawDoc As DrawingDocument Set oDrawDoc = ThisApplication.ActiveDocument Dim sheet1 As sheet Set sheet1 = oDrawDoc.Sheets("Blatt:1") Dim table As CustomTable Set table = sheet1.CustomTables.Item(1) Dim ttable As CustomTable Set ttable = sheet1.CustomTables.Item(2) ' Zeilen- und Spaltenindizes beginnen bei 1 Dim rowNumber As Long rowNumber = 4 ' Vierte Zeile Dim columnNumber As Long columnNumber = 3 ' Dritte Spalte ' Den Wert der Zelle in der angegebenen Zeile und Spalte abrufen 'Dim cellValue As String 'cellValue = table.Rows.Item(rowNumber).Item(columnNumber).value 'Debug.Print cellValue Dim i as integer for i=rownumber to table.rows.count ttable.Rows.Item(i).Item(columnNumber).value = table.Rows.Item(i).Item(columnNumber).value i = i +1 next End Sub
------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Goose Mitglied Maschinenbautechniker / geb. Zerspanungsmechaniker Fachrichtung Frästechnik
Beiträge: 206 Registriert: 29.03.2007 IV2024 R2.1 CATIA V6 R2013x
|
erstellt am: 08. Apr. 2024 14:36 <-- editieren / zitieren --> Unities abgeben:
|
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2505 Registriert: 15.11.2006 Windows 10 x64, AIP 2023
|
erstellt am: 08. Apr. 2024 15:06 <-- editieren / zitieren --> Unities abgeben: Nur für Goose
Moin Ah ja, jetzt wo du es sagst... Wie oft kommt diese Übertragung vor? Bei einer einfachen Lösung würde ich die Itemnummern der Textboxen (zu finden unter SketchedSymbolDefinition.Sketch.TextBoxes) in der richtigen Reihenfolge in ein Array "aItems" schreiben. Quasi eine hart codierte Zuordnung welche Tabellenzelle in welches Textfeld soll. Arrays beginnen bei 0, aber wir schreiben ab Feld 3. Das davor leere Felder sind, ist egal. Die ignorieren wir beim Auslesen ebenso. Sähe dann so aus: aItems(0) = 0 aItems(1) = 0 aItems(2) = 0 aItems(3) = 0 aItems(4) = "Itemnummer der TextBox Modul" aItems(5) = "Itemnummer der TextBox Zähnezahl" aItems(6) = "Itemnummer der TextBox Bezugsprofil" ...usw. In der Schleife For i=3 to table.Rows.Count holen wir die Itemnummer über aItems(i) und schreiben die angeforderte Eingabe über SketchedSymbol.SetPromptResultText(SketchedSymbol.Definition.Sketch.TextBoxes(aItems(i)), table.Rows.Item(i).Item(columnNumber).value). Die kompiziertere Methode wäre jeder Textbox ein Attribut mit dem Zeilennamen aus der Quelltabelle (die müssen dann immer gleich sein) zu geben und den AttributeManager zu benutzen, um die jeweilige TextBox zu finden. Danach wieder mit SetPromptTextResult den Inhalt schreiben. ------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2505 Registriert: 15.11.2006 Windows 10 x64, AIP 2023
|
erstellt am: 08. Apr. 2024 22:20 <-- editieren / zitieren --> Unities abgeben: Nur für Goose
Moin Mal als Beispiel ein Entwurf. Mir ist gegen Ende der Liste nicht mehr klar welcher Wert der Tabelle zu welchem Feld im Symbol gehört. Ich habe daher mal nach Gutdünken die Felder soweit möglich zugeordnet. Kann gut sein, dass das nicht passt. Du musst, in irgendeiner Form eine Relation zwischen Tabellenzelle und Symbolfeld definieren. Wenn die Tabellenzeilen komplett andere Namen haben, leer sind oder auch mal ganz fehlen, wird es schwierig. Code:
Option ExplicitPrivate Sub Transfer() Dim aItems(38) As String aItems(1) = 178 '--- MO Modul aItems(2) = 179 '--- ZZ Zähnezahl aItems(3) = 180 '--- BZPV Bezugsprofil Verzahnung aItems(4) = 181 '--- EGW Eingrifsswinkel aItems(5) = 182 '--- SW Schrägungswinkel aItems(6) = 183 '--- FR Flankenrichtung aItems(7) = 184 '--- TD Teilkreisdurchmesser aItems(8) = 185 '--- GD Grundkreisdurchmesser aItems(9) = 186 '--- PVF Profilverschiebunsgfaktor aItems(10) = 187 '--- ZH Zahnhöhe aItems(11) = 188 '--- KA Kopfhöhenänderung aItems(12) = 189 ' -- Fußkreisdurchmesser aItems(13) = 190 ' -- Fußnutzkreisdurchmesser aItems(14) = 191 ' -- Fußformkreis aItems(15) = 192 '--- VQ Verzahnungsqualität aItems(16) = 193 '--- PG Prüfgruppe 'aItems(17) = 194 '--- ZD1 Zahndicke aItems(18) = 195 '--- ZDA1 Zahndicke oberes Abmaß aItems(19) = 196 '--- ZDA2 Zahndicke unteres Abmaß aItems(17) = 197 '--- ZDS Zahndickensehne aItems(20) = 198 '--- ZDSH Höhe über der Sehne aItems(21) = 199 '--- MZZ Messzähnezahl aItems(22) = 200 '--- ZWG Zahnweite Größtmaß aItems(23) = 201 '--- ZWK Zahnweite Kleinstmaß aItems(25) = 202 '--- DPG Diam. Prüfmaß - Größtmaß aItems(26) = 203 '--- DPK Diam. Prüfmaß - Kleinstmaß aItems(24) = 204 '--- MRD Messrollendurchmesser 'aItems(28) = 205 '--- ZFWA Zweiflanken Wälzabstand aItems(27) = 206 '--- VDFS1 Verdreh.-Flankenspiel min. aItems(28) = 207 '--- VDFS2 Verdreh.-Flankenspiel max. aItems(32) = 208 '--- SNR Sachnummer Gegenrad aItems(32) = 209 '--- Zähnezahl Gegenrad aItems(29) = 210 '--- AAG Achsabstand im Gehäuse 'aItems(34) = 211 '--- AAT Achsabstandtoleranz aItems(30) = 212 '--- LA Wälzlänge LA aItems(31) = 213 '--- LF Wälzlänge LF 'aItems(37) = 214 '--- GA Wälzlänge ga aItems(33) = 215 '--- EA ergänzende Angaben Dim oApp As Inventor.Application Set oApp = ThisApplication
Dim oDrawDoc As DrawingDocument Set oDrawDoc = oApp.ActiveDocument Dim oSkS As SketchedSymbol For Each oSkS In oDrawDoc.ActiveSheet.SketchedSymbols If oSkS.Name = "Stirnrad" Then Exit For Next If oSkS Is Nothing Then Exit Sub Dim sheet1 As Sheet Set sheet1 = oDrawDoc.Sheets("Blatt:1") Dim table As CustomTable Set table = sheet1.CustomTables.Item(1) ' Zeilen- und Spaltenindizes beginnen bei 1 Dim columnNumber As Long columnNumber = 3 ' Dritte Spalte Dim columnNumber2 As Long columnNumber2 = 4 ' Dritte Spalte Dim sValue As String Dim oTB As TextBox Dim i As Integer Dim j As Integer j = 1 For i = 1 To table.Rows.Count 'Spalte 3 sValue = table.Rows.Item(i).Item(columnNumber).Value Set oTB = oSkS.Definition.Sketch.TextBoxes(aItems(j)) j = j + 1 Call oSkS.SetPromptResultText(oTB, sValue) 'Spalte 4 '- nur wenn in der Zelle etwas drin steht '- ggf. xxx o.ä. für keinen Wert sValue = "" sValue = table.Rows.Item(i).Item(columnNumber2).Value If Not sValue = "" Then Set oTB = oSkS.Definition.Sketch.TextBoxes(aItems(j)) j = j + 1 Call oSkS.SetPromptResultText(oTB, sValue) End If Next End Sub
------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Goose Mitglied Maschinenbautechniker / geb. Zerspanungsmechaniker Fachrichtung Frästechnik
Beiträge: 206 Registriert: 29.03.2007 IV2024 R2.1 CATIA V6 R2013x
|
erstellt am: 09. Apr. 2024 07:57 <-- editieren / zitieren --> Unities abgeben:
Vielen Dank für die „fertige Arbeit“. Die Zeilennamen der Quelltabelle sind immer gleich. Daher werde ich mal versuchen ob ich die von Dir angesprochene „kompliziertere Methode“ umgesetzt bekomme. Unities sind raus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2505 Registriert: 15.11.2006 Windows 10 x64, AIP 2023
|
erstellt am: 09. Apr. 2024 08:46 <-- editieren / zitieren --> Unities abgeben: Nur für Goose
Moin Wenn du mit Attributen experimentieren willst, schau mal ob sich der AttributeHelper (Link) noch installieren lässt. Damit kann man sehr gut Attribute sehen, erstellen, ändern und löschen. Inventor selbst bietet keine GUI dafür. Wenn die Namen in der Quelltabelle immer gleich sind, kann man die als Attribut in die jeweilige TextBox schreiben. Damit hättest du eine eindeutige Zuordnung. Dann wären auch die Probleme der abweichenden Reihenfolge und leeren/fehlenden Einträge erledigt. ------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Goose Mitglied Maschinenbautechniker / geb. Zerspanungsmechaniker Fachrichtung Frästechnik
Beiträge: 206 Registriert: 29.03.2007 IV2024 R2.1 CATIA V6 R2013x
|
erstellt am: 10. Apr. 2024 13:49 <-- editieren / zitieren --> Unities abgeben:
|