| |
| KISTERS 3DViewStation mit neuer Zerschneidefunktionen und erweitertem PMI-Support, eine Pressemitteilung
|
Autor
|
Thema: Aus Excel mit VBA eine Stückliste erstellen (6464 mal gelesen)
|
catiavba Mitglied
Beiträge: 9 Registriert: 21.05.2010 Catia V5R19 SP2 Windows XP Pro SP3 P4 2,8 Ghz, 2GB RAM
|
erstellt am: 21. Mai. 2010 20:33 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, bin auf der Suche nach einem VBA-Skript, welches mir erlaubt aus Excel heraus die Stückliste eines geöffneten Catia-product in Excel einzulesen. Später soll dann diese Stückliste noch erweitert werden, wie z.B. mit Gewicht, Volumen oder Material der Teile. Da ich noch neu im Umgang mit Catia bin, wäre ich über jede Hilfe sehr dankbar. viele Grüße, catiavba Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 22. Mai. 2010 09:47 <-- editieren / zitieren --> Unities abgeben: Nur für catiavba
Servus Willkommen im Forum Du könntest die Funktion ExractBOM verwenden und eine Stückliste zu Exportieren (siehe hier und V5Automation.chm) und diese dann ggf in Excel einzulesen/nachbearbeiten. Gruß Bernd PS: Bitte Systeminfo ausfüllen.
------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
catiavba Mitglied
Beiträge: 9 Registriert: 21.05.2010 Catia V5R19 SP2 Windows XP Pro SP3 P4 2,8 Ghz, 2GB RAM
|
erstellt am: 22. Mai. 2010 10:50 <-- editieren / zitieren --> Unities abgeben:
|
catiavba Mitglied
Beiträge: 9 Registriert: 21.05.2010 Catia V5R19 SP2 Windows XP Pro SP3 P4 2,8 Ghz, 2GB RAM
|
erstellt am: 29. Mai. 2010 11:49 <-- editieren / zitieren --> Unities abgeben:
Habe es nun getestet. Sieht ganz gut aus, die Textdatei wird erstellt. So wie ich das bisher sehe kann ich jedoch mit der Funktion nur eine Datei erstellen und diese anschließend wieder in Excel einlesen. Gibt es keine Möglichkeit, mit der ich auf die BOM wie auf ein Array zugreifen kann? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 29. Mai. 2010 12:18 <-- editieren / zitieren --> Unities abgeben: Nur für catiavba
Servus Alternativ kannst du das Product per Script durchsuchen und die gewünschten Parameter direkt in eine Array schreiben (siehe V5Automation.chm) Oder kann man mit der "ExractBOM" auch direkt ein Excel-File ausgeben? Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
catiavba Mitglied
Beiträge: 9 Registriert: 21.05.2010 Catia V5R19 SP2 Windows XP Pro SP3 P4 2,8 Ghz, 2GB RAM
|
erstellt am: 29. Mai. 2010 12:32 <-- editieren / zitieren --> Unities abgeben:
Habe es jetzt auch mal per Skript gelöst. Hier mal ein Excel-VBA Beispiel, welches die Namen der Teile die sich im aktiven Dokument befinden in eine Tabelle schreibt: Set CATIA = GetObject(, "CATIA.APPLICATION") Set activedoc = CATIA.ActiveDocument.Product AnzahlProducts = activedoc.Products.Count i = 1 For Y = 1 To AnzahlProducts tabelle1.Cells(Y, 1).Value = activedoc.Products.Item(i).Name i = i + 1 Next Y Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
catiavba Mitglied
Beiträge: 9 Registriert: 21.05.2010 Catia V5R19 SP2 Windows XP Pro SP3 P4 2,8 Ghz, 2GB RAM
|
erstellt am: 29. Mai. 2010 12:56 <-- editieren / zitieren --> Unities abgeben:
Eine Frage doch noch: Das Produkt besteht je meist aus mehreren Baugruppen. Diese haben wieder weitere Unterbaugruppen etc.... Um die BOM nachzubauen, muss das Skript bei jedem Item wieder in die Products-Hierarchie abtauchen und nach weiteren Items suchen und dann in der BOM die Menge erhöhen. Gibt es da eventuell schon etwas fertiges? Falls nicht werde ich das Skript weiter ausbauen müssen... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 29. Mai. 2010 13:17 <-- editieren / zitieren --> Unities abgeben: Nur für catiavba
Servus Such mal nach den Begriffen "Rekursion" und "rekursiv". Da gibt es schon genügend Scripte. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. [Diese Nachricht wurde von bgrittmann am 29. Mai. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
catiavba Mitglied
Beiträge: 9 Registriert: 21.05.2010 Catia V5R19 SP2 Windows XP Pro SP3 P4 2,8 Ghz, 2GB RAM
|
erstellt am: 29. Mai. 2010 13:44 <-- editieren / zitieren --> Unities abgeben:
Auf dem Weg bin ich schon. Habe folgendes Skript in dem Buch "Catia V5 - Makroprogrammierung mit VB" gefunden und die erste sub (wohl falsch) angepasst: ------------------------------------ Sub CATmain() Set CATIA = GetObject(, "CATIA.APPLICATION") Set activedoc = CATIA.ActiveDocument.Product Analysieren (activedoc) End Sub
Public Function Analysieren(P As Product) 'Name ausgeben MsgBox (P.PartNumber) 'Liste analysieren Dim PP As Products Dim I As Integer Set PP = P.Products I = 0 Do While I < PP.Count I = I + 1 Analysieren (PP.Item(I)) Loop End Function ------------------------------
Leider kommt immer die Meldung: "Objekt unterstützt diese Eigenschaft oder Methode nicht" (4. Zeile) Kann jemand etwas damit anfangen? Was ich immer noch nicht ganz verstehe, ist der Unterschied zwischen Excel-VBA und Catia-VBA. Im Kochbuch steht der Unterschied zu Excel-VBA sei, dass bei Excel-VBA: 1. Die Prozedur mit Sub A_GetV5Parameter() (und nicht mit Sub CatMain()) beginnt --> aber es ist doch egal wie ich meine Sub nenne, oder nicht? 2. V5 muss explizit als Objekt definiert werden: Set CATIA = GetObject(, "CATIA.APPLICATION") ...der Rest des Codes sei absolut gleich (...dennoch kommt die Fehlermeldung) PS: Das was ich Suche, habe ich eben für Solidworks gefunden, leider noch nicht für CATIA: http://ww3.cad.de/foren/ubb/Forum2/HTML/002304.shtml [Diese Nachricht wurde von catiavba am 29. Mai. 2010 editiert.]
[Diese Nachricht wurde von catiavba am 29. Mai. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 29. Mai. 2010 17:04 <-- editieren / zitieren --> Unities abgeben: Nur für catiavba
Servus Was ist bei dir die 4. Zeile? Gibt dir das "Watchfenster" eine Hinweis auf das Problem? Was machst du wenn ein Part in der Baugruppe eingebaut ist? Dann funktioniert PP.Products nicht. Such dir mal eine Vorlage-Script hier im Forum für Rekursion (zB hier oder hier) Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
catiavba Mitglied
Beiträge: 9 Registriert: 21.05.2010 Catia V5R19 SP2 Windows XP Pro SP3 P4 2,8 Ghz, 2GB RAM
|
erstellt am: 29. Mai. 2010 17:28 <-- editieren / zitieren --> Unities abgeben:
|
catiavba Mitglied
Beiträge: 9 Registriert: 21.05.2010 Catia V5R19 SP2 Windows XP Pro SP3 P4 2,8 Ghz, 2GB RAM
|
erstellt am: 29. Mai. 2010 17:37 <-- editieren / zitieren --> Unities abgeben:
|
catiavba Mitglied
Beiträge: 9 Registriert: 21.05.2010 Catia V5R19 SP2 Windows XP Pro SP3 P4 2,8 Ghz, 2GB RAM
|
erstellt am: 29. Mai. 2010 19:07 <-- editieren / zitieren --> Unities abgeben:
Habe den Code jetzt fertig. Danke bgrittmann . Falls es jemanden interessiert, hier der fertige Code: Dim y As Integer 'Zeilenzähler Dim xMenge 'Salte Menge Dim xName 'SPalte Name Dim xPartNumber 'Spalte PartNumber Sub CATMain() y = 1 xMenge = 1 xName = 2 xPartNumber = 3 Set CATIA = GetObject(, "CATIA.APPLICATION") Set oRoot = CATIA.ActiveDocument Set oProducts = oRoot.Product.Products Call SUB_ProdScan(oProducts) End Sub Sub SUB_ProdScan(oProducts) ySuche = 1 For I = 1 To oProducts.Count 'Über alle Teile der aktuellen Hirarchie If oProducts.Item(I).Products.Count > 0 Then 'Enthält Teil Kinder? Set oProductsUebergabe = oProducts.Item(I).Products Call SUB_ProdScan(oProductsUebergabe) 'Rekursiver Aufruf mit Übergabe der Kinder Else 'keine Kinder schonDrinn = False 'Schalter zurücksetzten ySuche = 1 'Suchzeile an den Anfang 'Schauen ob schon drinn, wenn ja Menge erhöhen Do While tabelle1.Cells(ySuche, xPartNumber) <> "" If tabelle1.Cells(ySuche, xPartNumber) = oProducts.Item(I).PartNumber Then tabelle1.Cells(ySuche, xMenge).Value = tabelle1.Cells(ySuche, xMenge).Value + 1 schonDrinn = True y = y - 1 Exit Do End If ySuche = ySuche + 1 Loop 'Wenn nich nicht drinn in nächste freie Zeile schreiben If schonDrinn = False Then tabelle1.Cells(y, xMenge).Value = 1 tabelle1.Cells(y, xName).Value = oProducts.Item(I).Name tabelle1.Cells(y, xPartNumber).Value = oProducts.Item(I).PartNumber End If y = y + 1 End If Next End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
leon0109 Mitglied
Beiträge: 21 Registriert: 20.08.2011 CATIA V5 R19 SP3 Win 7 Pro 64
|
erstellt am: 13. Dez. 2011 15:03 <-- editieren / zitieren --> Unities abgeben: Nur für catiavba
Hallo catiavba Dein Beitrag ist etwas älter aber hoffe dass du mir trotzdem helfen kannst. Ich bin Student und Neuling mit CATIA.Bin auf deinen Code gestoßen und so was ähnliches brauche ich auch. Habe dein Vorschlag getestet aber bei mir hat nicht funktioniert mit folgender Fehlermeldung: CNEXT - CATScriptErrorMessages - ScriptingERR_1002 --------------------------- Das Script "BOM.CATScript" ausführen. Die Scriptmaschine für CATScript hat den folgenden Fehler gemeldet:
Quelle: Laufzeitfehler in Microsoft VBScript Beschreibung: Das Objekt unterstützt diese Eigenschaft oder Methode nicht.: 'CATIA' Linie:14 Spalte: 4 Set CATIA = GetObject(, "CATIA.APPLICATION") Wo liegt das Problem? Arbeite mit CATIA V5 R19 SP3 Vielen Dank Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 13. Dez. 2011 18:12 <-- editieren / zitieren --> Unities abgeben: Nur für catiavba
Servus Das Script funktioniert (wenn ich den Titel des Themas richtig interpretiere) in VBA aus Excel heraus und nicht als CATScript. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |