Autor
|
Thema: Catproduct und catpart aus excel umbenennen (2765 mal gelesen)
|
veniceline Mitglied Konstrukteur
Beiträge: 6 Registriert: 17.07.2010
|
erstellt am: 17. Jul. 2010 18:46 <-- editieren / zitieren --> Unities abgeben:
Hallo Zusammen, ich habe ein Makro in Excel laufen, mit diesem kann ich verschiedene Punkte von Excel nach Catia V5 laden, aus der Excel Tabelle, worauf Catia selbständig die entsprechende Geometrie erzeugt. Das Makro wird in Excel gestartet und nicht in Catia. Das funktioniert auch alles ganz wunderbar. Jetzt möchte ich das selbe Makro erweitern und veranlassen das das CatProdukt mit seinen angehängten Catparts umbenannt wird, nach dem die neue Geometrie erzeugt wurde. Die Umbenennung soll temporär erfolgen ohne eine save us funtion etc... Praktisch soll nur die Umbenennung im aktiven Catiafenster passieren ohne ein save. Wie das Produkt + die 3 Parts benannt werden steht in 2 verschiedenen Spalten im Excel, dort ist die Benennung hinterlegt. Das Makro im Excel funktioniert so, das es die Werte aus der vorher aktivierten Zeile liest (ansonsten Fehlermeldung). ich bin nicht der VBA *****, deswegen hier mein Posting... vielleicht kann mir jemand hier helfen, hab schon gesucht, es gibt einiges, aber nichts passendes für mich gefunden. vielen dank schon einmal .)) hier noch codeschnipsel aus meinem makro, damit man weis wie man ansetzen könnte die umbenennung soll wie gesagt mit diesem makro erfolgen, nicht durch ein zweites
Code:
Dim version, makroname Sub Erz_teil() version = "0.01" makroname = "Erz_teil" On Error Resume Next 'CONNECTION WITH CATIA V5 Set Catia = GetObject(, "CATIA.Application") Set activedoc = Catia.ActiveDocument If Err.Number <> 0 Then MsgBox "Es ist kein CATIA Dokument geöffnet", 16, makroname + " " + version Exit Function End If If TypeName(activedoc) <> "ProductDocument" Then MsgBox "Es ist kein .CATProduct geöffnet", 16, makroname + " " + version Exit Function End If On Error GoTo 0 'check ob eingelesenes und aktives Produkt ein Part mit der Kennung "VERLAUFNEU" hat Set oProd = activedoc.Product Set oColl = oProd.Products n = oColl.Count For i = 1 To n Set aktPart = oColl.Item(i) Set oParams = aktPart.Parameters On Error Resume Next Set myParam = oParams.Item("Kennung") If Err.Number <> 0 Then sKleitung = "NOK" Else On Error GoTo 0 If myParam.Value = "VERLAUFNEU" Then Set oPartLeitung = aktPart sKleitung = "OK" Exit For End If End If Next If sKleitung <> "OK" Then MsgBox "Kein aktuelles Catiafile gefunden oder veraltet", vbCritical Exit Function End If ' parameter aus excel bestimmen und nach CATIA schreiben ' lesen der aktuellen Zeile If Selection.Rows.Count <> 1 Then MsgBox "Bitte eine Zeile selektieren", vbOKOnly Exit Function End If aktZeile = Selection.Row ' setzen der Parameter ' setzen des Parameters Rahmencode sValue = Cells(aktZeile, 52).Value ' wenn Spannung L (fuer Luft) beinhaltet ist der bock schmal If InStr(1, sValue, "L", vbBinaryCompare) Then sRahmenc = "L" Else sRahmenc = "S" End If Err.Clear oParams.Item("Spannungscode").Value = sRahmenc If Err.Number <> 0 Then MsgBox "Fehler beim Setzen des Parameters Spannungscode", vbCritical End If Err.Clear ' setzen des Parameters Winkelcode sValue = Cells(aktZeile, 41).Value Err.Clear oParams.Item("TWinkelcode").Value = sValue If Err.Number <> 0 Then MsgBox "Fehler beim Setzen des Parameters Winkelcode", vbCritical End If Err.Clear ' setzen des Parameters x-Schluessel dblValue = Cells(aktZeile, 46).Value Err.Clear oParams.Item("X-Position_Schluessel").Value = dblValue If Err.Number <> 0 Then MsgBox "Fehler beim Setzen des Parameters X-Position_Schluessel", vbCritical End If Err.Clear' update catia On Error Resume Next activedoc.Product.Update ' lesen des laengen wertes aus dem catia modell On Error GoTo 0 ' lesen des Parameters Gesamtlaenge Err.Clear dblValue = oParams.Item("Gesamtlaenge").Value Cells(aktZeile, 64).Value = dblValue If Err.Number <> 0 Then MsgBox "Fehler beim Lesen der Gesamtlaenge ", vbCritical End If Err.Clear '+++++++++++++++++++++++++++++++++++++++++++++ ' Abschluss an Anwender MsgBox "Das Makro ist nun beendet", vbInformation, makroname + " " + version End Function Function setCATParameter(sParmnam) End Function
das makro funktioniert so, wie gesagt möchte es erweitern wie oben beschrieben.
es soll immer nur ein Product und 3 dazugehörige Parts umbenannt werden. danke! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
zoltan.bekesi Mitglied
Beiträge: 321 Registriert: 22.10.2006 Job: CATIA V5R19 / XP 32bit MS Office 2003 Microstation V8 2004 Edition DELL Precision M6300
|
erstellt am: 18. Jul. 2010 09:24 <-- editieren / zitieren --> Unities abgeben: Nur für veniceline
Hallo Veniceline, wo das Kode genau reinpasst (wo du die Name am einfachsten bestimmen kannst), kannst nur du entscheiden. Umbenennen geht wie folgt: ActiveDoc, PartNumber: Catia.ActiveDocument.Product.PartNumber = "Neue_Name" Part unter ActiveDoc, PartNumber:ActDoc.Products.Item(i).ReferenceProduct.Parent.Product.PartNumber = "Neue_Name_Part_" & cstr(i) Part unter ActiveDoc, InstanceName:ActDoc.Products.Item(i).Name = "InstanceName." & cstr(i) wobei letzteres die Links zwischen den Parts/Products kaputt macht, es sei den es wird aus CatScript ausgeführt. Ich hoffe, es hilft dir weiter. Gruß, Zoltán Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
veniceline Mitglied Konstrukteur
Beiträge: 6 Registriert: 17.07.2010
|
erstellt am: 19. Jul. 2010 19:58 <-- editieren / zitieren --> Unities abgeben:
danke zoltan, wenn ich Code: ActiveDoc, PartNumber: Catia.ActiveDocument.Product.PartNumber = "Neue_Name" Part unter ActiveDoc, PartNumber:ActDoc.Products.Item(i).ReferenceProduct.Parent.Product.PartNumber = "Neue_Name_Part_" & cstr(i) Part unter ActiveDoc, InstanceName:ActDoc.Products.Item(i).Name = "InstanceName." & cstr(i)
in mein Excel Visual Basic Makro kopiere und will es dann ausführen, springt der Debugger auf und meckert, das der Code nicht i.O. ist Fehler beim Kompilieren: Sub, Function oder Property erwartet ein anderes mal sagte er Doppeldeklarationen sind nicht erlaubt... irgendwas hab ich wohl übesehen, aber danke dir, vielleicht weis ja noch wer hier einen guten Tipp Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 19. Jul. 2010 20:17 <-- editieren / zitieren --> Unities abgeben: Nur für veniceline
Servus Das kann ja nicht funktionieren, war ja nur eine kurze Vorstellung der Grundbefehle. Bei dir könnte es so aussehen (nicht getestet): Code: ...Set oProd = activedoc.Product oProd.PartNumber = "Neue_Name" Set oColl = oProd.Products n = oColl.Count For i = 1 To n Set aktPart = oColl.Item(i) oColl.ReferenceProduct.Parent.Product.PartNumber = "Neue_Name_Part_" ....
Oder je nach dem wo du die Parts und Products umbenennen willst.Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
veniceline Mitglied Konstrukteur
Beiträge: 6 Registriert: 17.07.2010
|
erstellt am: 19. Jul. 2010 20:31 <-- editieren / zitieren --> Unities abgeben:
hallo Bernd, erstmal danke, ich probiere es nochmal aus und melde mich dann hier wieder^^ Du fragst wo ich die Parts und Products umbenennen will? Das tue ich immer im aktiven Catia Fenster im Hintergrund von Excel. Dort muss ein Product mit 3 angehangenen Parts umbenannt werden. Der Name ist dann immer der gleiche und unterscheidet sich beispielsweise nur durch ein "NeuerName_1" "NeuerName_2" etc..., wobei der Wert von "NeuerName" aus einer aktiven Excelspalte gelesen werden soll. In Catia selbst soll im aktiven Fenster dann die neue Namesdeklaration wie oben beschrieben stehen - temporär - ohne ein absichern der Namen. Das wird dann manuell erledigt. Ich möchte mir praktisch ersparen die neuen Namen manuell in Catia unter "Eigenschaften" von Product und Parts per Hand reinzutippseln^^ ich probiere das mal aus und melde mich vielen dank schon ein mal im Voraus
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
veniceline Mitglied Konstrukteur
Beiträge: 6 Registriert: 17.07.2010
|
erstellt am: 20. Jul. 2010 20:30 <-- editieren / zitieren --> Unities abgeben:
|
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 20. Jul. 2010 20:50 <-- editieren / zitieren --> Unities abgeben: Nur für veniceline
Servus [klugschei**modus]Nee, hatte ich nicht vergessen. Deshalb auch "..." am Ende, da es in den bestehenden Code eingefügt wird[/klugschei**modus] Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
veniceline Mitglied Konstrukteur
Beiträge: 6 Registriert: 17.07.2010
|
erstellt am: 24. Jul. 2010 12:27 <-- editieren / zitieren --> Unities abgeben:
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|