| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für CATIA & Co. | | |  | KISTERS 3DViewStation: Neuer Strukturvergleich ab sofort verfügbar, eine Pressemitteilung
|
Autor
|
Thema: Instanzen auflisten in Excel (1767 mal gelesen)
|
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
     
 Beiträge: 3437 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 03. Mai. 2012 14:36 <-- editieren / zitieren --> Unities abgeben:         
Hallo Zusammen, habe mir ein Makro aus dem Form an meine Bedürfnisse angepasst um das Gesamtgewicht meiner Baugruppe zu ermitteln. Soweit liest das Makro alle Parts und Produkte aus.(Parameter) Leider werden mehrfach verbaute Parts immer nur einmal ausgelesen,so das mein Messergebniss verfäscht wird. Wie kann ich alle Instanzen mit den jeweiligen Parametern auch nach Excel schreiben lasen? hat jemand Rat. Bitte um Nachsicht. Bin Programmieranfänger. Code: Sub CATMain()Dim i As Integer Dim prod As Product Dim m As Integer ' Exel öffnen Dim objXL On Error Resume Next Set objXL = GetObject(, "Excel.Application") If Err.Number <> 0 Then Err.Clear Set objXL = CreateObject("Excel.Application") Set oAWBook = objXL.Workbooks.Add End If On Error GoTo 0 objXL.Visible = True
'Berechnung m = 12 ' Zeile in Exel i = 0 p = 0 For i = 1 To CATIA.Documents.Count On Error Resume Next If (Right(CATIA.Documents.Item(i).Name, 7) = "CATPart") Then 'soll bessere Lösung sein funktioniert noch nicht 'If TypeName(CATIA.Documents.Item(i).Name) = PartDocument Set prod = CATIA.Documents.Item(i).Product 'Partname kann auch ausgegeben werden objXL.Cells(m, 2).Value = prod.PartNumber objXL.Cells(m, "a").Value = prod.Parameters.Item("Gewicht").ValueAsString objXL.Cells(m, "b").Value =prod.Parameters.Item("Benennung").ValueAsString p = p + 1 If Err.Number <> 0 Then Err.Clear End If m = m + 1 End If Next MsgBox "Es sind " & i - p & " Produkts und " & p & " Parts geöffnet", , "Info" End Sub
------------------ Gruß Uwe Auch Catia ist nur ein Mensch!  Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
       
 Beiträge: 12054 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 03. Mai. 2012 17:13 <-- editieren / zitieren --> Unities abgeben:          Nur für moppesle
Servus Das problem an deinem Makro ist, dass du nur die Collection der Dokumente durcharbeitest und nicht die Einzelteile/Unterbaugruppe des Produkts. Versuch es mal so (ungetestet): Code: Sub CATMain()Dim i As Integer Dim RootProd As Product Dim prod As Product Dim m As Integer ' Exel öffnen Dim objXL On Error Resume Next Set objXL = GetObject(, "Excel.Application") If Err.Number <> 0 Then Err.Clear Set objXL = CreateObject("Excel.Application") Set oAWBook = objXL.Workbooks.Add End If On Error GoTo 0 objXL.Visible = True
'Berechnung m = 12 ' Zeile in Exel i = 0 p = 0 Set RootProd = Catia.ActiveDocument.Product For i = 1 To RootProd.Products.Count On Error Resume Next Set prod = RootProd.Products.Item(i) If TypeName(prod.ReferenceDocument) = "PartDocument" then 'Partname kann auch ausgegeben werden objXL.Cells(m, 2).Value = prod.PartNumber objXL.Cells(m, "a").Value = prod.Parameters.Item("Gewicht").ValueAsString objXL.Cells(m, "b").Value =prod.Parameters.Item("Benennung").ValueAsString p = p + 1 If Err.Number <> 0 Then Err.Clear End If m = m + 1 End If Next MsgBox "Es sind " & i - p & " Produkts und " & p & " Parts geöffnet", , "Info" End Sub
Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
     
 Beiträge: 3437 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 03. Mai. 2012 21:50 <-- editieren / zitieren --> Unities abgeben:         
Hallo Bernd, jetzt bin ich aber stutzig. meine Variante findet alle Parts und listet sie auf. Code:
78825W01A_007 Hintere Abdeckung 9,98kg 78825W01A_006 Vordere Abdeckung 7,07kg 78825W01A_005 Gehäuse 7,18kg 78825W01A_004 Kolbenstange 5,31kg 78825W01A_003 Kolben 3,45kg 78825W01A_002 Gelenkflansch 6,78kg 78825W01A_001 Befestigungswinkel 4,83kg
Bei deiner Variante werden nicht alle aufgelistet.Zusätzlich finden sich Produkte denen fälschlicherweise Werte aus Parts zugewiesen werden (Z001 und Z002)
Code:
78825W01A_001 4,83kg Befestigungswinkel 78825W01A_002 6,78kg Gelenkflansch 78825W01A_Z001 3,45kg Kolben 78825W01A_Z002 7,18kg Gehäuse
Ich versteh nur Bahnhof Mein Problem ist, wenn ich nun z.B. die Kolbenstange zwei mal in meiner Produktstruktur habe,wird nur eines dafon aufgelistet. Hab mal das Produkt angehängt. ------------------ Gruß Uwe
Auch Catia ist nur ein Mensch! 
[Diese Nachricht wurde von moppesle am 15. Mai. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
       
 Beiträge: 12054 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 03. Mai. 2012 22:26 <-- editieren / zitieren --> Unities abgeben:          Nur für moppesle
Servus Uwe Bei deiner Version werden direkt alle geöffneten Dokumente (also auch in Unterbaugruppen) geprüft und die Masse ausgelesen. Bei meiner Variante wird dir Struktur des Produkt abgearbeitet, aber nur auf der ersten Ebene. Falls du die komplette Struktur benötigst muss du ein rekursives Makro verwenden (zB hier) Zusätzlich ist in meinem Script noch ein grober Fehler bei der Dokmententyp-Überprüfng. Die Zeile müsste: If TypeName(prod.ReferenceProduct.Parent) = "PartDocument" Then heißen. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. [Diese Nachricht wurde von bgrittmann am 03. Mai. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |