Autor
|
Thema: User-Selektion umbennen (6674 mal gelesen)
|
newmann Mitglied
Beiträge: 18 Registriert: 15.08.2011
|
erstellt am: 15. Aug. 2011 16:08 <-- editieren / zitieren --> Unities abgeben:
Hallo, habe ein Problem wo ich hoffe das mir jemand helfen kann mache gerade meine ersten Gehversuche mit VBA und bin schon am verzweifeln. Folgende Voraussetzungen; Ich habe ein Produkt (RootProdukt) in dem sich mehrere Unterelemente (Produkte, Parts, etc.) befinden. Vorhaben; Nun wähle ich über eine Userselektion ein/ mehrere Elemente (Part, Produkt) aus, dabei kann die Ebene wo sich dieses Element befindet unterschiedl. sein. Nun möchte ich den Instance-Namen der selektierten Elemente auslesen und an einer bestimmten Stelle einen zusätzl. Text mit anhängen. Das hat auch annährend funktioniert. nun das Problem; Wenn ein selektiertes Element nicht in der ersten Ebene des Rootproduktes liegt wird der Name nicht geändert. soweit ich mich in diesem Forum belesen habe hängt dies damit zusammen das von dem selektiertem Element das direkt übergeordnete Produkt aktiv sein muß. Leider weiß ich nicht wie ich das auf die Selektion anwende. Kann mir jemand den Quellcode dafür benennen. Für Hilfe wäre ich dankbar :-) Zum besseren Verständnis hier mein Quellcode wie ich in derzeit habe: Private Sub CommandButton_Click() Dim AnhangInstName As String AnhangInstName = "_" & "Zusatztext" Dim MyString Dim z As Integer Dim Usersel As Object Set Usersel = CATIA.ActiveDocument.Selection Usersel.Clear ' Variable für Auswahl-Filter (InputObjectType) festlegen Dim selPart As Part Dim selProd As Product Dim selComp As ProductDocument ' Auswahl-Filter für SelectElement3 (InputObjectType)definieren Dim eingabe(1) eingabe(0) = "Product" eingabe(1) = "Part" ' Interaktion mit User zur Selektion der Elemente MsgBox "Elemente selektieren." + Chr(10) + Chr(10) +, vbInformation Status = Usersel.SelectElement3(eingabe, "Bitte die Elemente selektieren", False, CATMultiSelTriggWhenUserValidatesSelection, False) 'Abbruch des Macros If (Status = "Cancel") Then MsgBox "Macro wird beendet" Exit Sub ' Ansonsten weiter mit User-Selektion ' Name vom Element auslesen ElseIf Status = "Normal" Then For z = 1 To Usersel.Count Set oItem = Usersel.Item(z) MyString = oItem.Value.Name ' Zeichenanzahl von links bis einschließlich dem "Punkt"ermitteln SuchZeichen = "." myposition = InStrRev(MyString, SuchZeichen, -1, 1) ' kompl. Zeichenanzahl des Elemente-Namen mylength = Len(MyString) ' String von links bis einschließlich "." beibehalten newstring = Left(MyString, myposition) ' neuen String vom Element definieren und zurückgeben oItem.Value.Name = newstring & "_" & AnhangInstName Next End If ' Selektion freigeben -------------------------------------------- Usersel.Clear End Sub Danke im voraus Gruß Matze
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
meisterlumpi Mitglied
Beiträge: 118 Registriert: 15.04.2011 Intel Core2 Quad Q6600 2.40 GHz | 4 GB RAM | Win7x64
|
erstellt am: 16. Aug. 2011 01:11 <-- editieren / zitieren --> Unities abgeben: Nur für newmann
|
newmann Mitglied
Beiträge: 18 Registriert: 15.08.2011
|
erstellt am: 16. Aug. 2011 06:52 <-- editieren / zitieren --> Unities abgeben:
Hi, Danke für den Hinweis..... Mmmhh, funktioniert aber leider nicht ganz. Ich kann mit dem Script nur Parts auswählen (keine Unterprodukte, Components) und auch eine Multi-Selektion ist nicht möglich (denke dafür muß eine Schleife eingebaut werden). Wie gesagt bin noch "Frischling" auf dem VBA-Gebiet . Kannst du mir helfen und sagen wie bzw. wo ich den Code entsprechend ändern muß oder muß hier dann ein anderer Ansatz her? Danke schonmal! Gruß Matze
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
meisterlumpi Mitglied
Beiträge: 118 Registriert: 15.04.2011 Intel Core2 Quad Q6600 2.40 GHz | 4 GB RAM | Win7x64
|
erstellt am: 16. Aug. 2011 10:09 <-- editieren / zitieren --> Unities abgeben: Nur für newmann
Hallo mit Little Cthulhu’s Script kannst du parts auf beliebigen Dokumentenebenen renamen. So würde das skript mit schleife aussehen, die parts müssen dabei vorm start des skripts ausgewählt sein.
Code: ' Little Cthulhu's Sctipt - http://www.catiav5forum.de/wbb3/wbb/index.php?page=Thread&postID=29885#post29885 Sub CATMain() Dim i As Integer ' retrieve selection for active document Dim varSelection Set varSelection = CATIA.ActiveDocument.Selection ''' set filter for objects to be selected ''Dim ArrSelectionFilter(1) ''ArrSelectionFilter(0) = "Part" ''ArrSelectionFilter(1) = "Product" '' ''Dim strSelResult As String ''strSelResult = varSelection.SelectElement2(ArrSelectionFilter, "Select part that needs to be renamed", False) ' if user selected part Dim selElement As SelectedElement Dim prtSelected As Part Dim prdSelected As Product Dim prdParent As Product Dim prdReference As Product Dim prdSource As Product Dim iProduct As Integer Dim strNewPartNumber As String If (varSelection.Count > 0) Then For i = 1 To varSelection.Count ' retrieve selected part Set selElement = varSelection.Item(i) ' check type of selected object (can be both Part and Product) If (TypeName(selElement.Value) = "Product") Then ' get product Set prdSelected = selElement.Value ' product selected retrieve part from it Set prtSelected = Nothing On Error Resume Next Set prtSelected = selElement.Value.ReferenceProduct.Parent.Part If (Err.Number <> 0) Or (prtSelected Is Nothing) Then Err.Clear 'MsgBox "Selected Product doesn't contain a part. Exiting...", vbCritical, "Wrong object" Exit Sub End If Else ' part selected, get it right from selection Set prtSelected = selElement.Value ' get Product that is associated with PartDocument that contains selected part Set prdSelected = selElement.LeafProduct End If ' now we want to find corresponding product from a productdocument that contains selected part product ' get parent product Set prdParent = Nothing On Error Resume Next Set prdParent = prdSelected.Parent.Parent If Not (prdParent Is Nothing) Then ' get associated product document Set prdReference = Nothing On Error Resume Next Set prdReference = prdParent.ReferenceProduct If Not (prdReference Is Nothing) Then ' get product associated with selected part product For iProduct = 1 To prdReference.Products.Count ' cycle through all products in product document Set prdSource = prdReference.Products.Item(iProduct) ' look for match of reference products If (prdSource.ReferenceProduct Is prdSelected.ReferenceProduct) _ And (prdSource.Name = prdSelected.Name) Then Set prdSelected = prdSource Exit For End If Next Else Err.Clear End If Else Err.Clear End If ' display dialog box to allow user to define new part number Dim strOriginalPartNumber As String strOriginalPartNumber = prdSelected.PartNumber strNewPartNumber = InputBox("Enter new part number for selected part: ", strOriginalPartNumber) ' retrieve entered name If (strNewPartNumber <> "Cancel") Then prdSelected.PartNumber = strNewPartNumber prdSelected.Name = prdSelected.PartNumber & ".ori" End If Next i End If End Sub
Zitat: Nun wähle ich über eine Userselektion ein/ mehrere Elemente (Part, Produkt) aus, dabei kann die Ebene wo sich dieses Element befindet unterschiedl. sein. Nun möchte ich den Instance-Namen der selektierten Elemente auslesen und an einer bestimmten Stelle einen zusätzl. Text mit anhängen.
mehrfach selektion mit products und parts die darin enthalten sind umzubenennen wird nicht ganz einfach. es gibt ne möglichkeit, die ist allerdings extrem rechenintesiv und daher nicht zu empfehlen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
meisterlumpi Mitglied
Beiträge: 118 Registriert: 15.04.2011 Intel Core2 Quad Q6600 2.40 GHz | 4 GB RAM | Win7x64
|
erstellt am: 16. Aug. 2011 11:18 <-- editieren / zitieren --> Unities abgeben: Nur für newmann
nochmal hallo alternative kannst du auch mein skript benutzen, das führt halt zunächst eine rekursive product erkennung durch, sprich bei wirklich großen baugruppen kann das 2-3 sekunden dauern. Allerdings ist es damit möglich beliebige products UND parts gleichzeitig zu renamen, egal wie viele und egal wo sie sich im product befinden (also ob Haupt-, Über-, oder Unterproduct). [Diese Nachricht wurde von meisterlumpi am 04. Sep. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
newmann Mitglied
Beiträge: 18 Registriert: 15.08.2011
|
erstellt am: 16. Aug. 2011 14:55 <-- editieren / zitieren --> Unities abgeben:
Hallo, habe mal dein Alternativ-Script ausprobiert (da schon Produkte/Parts ausgewählt werden sollten) und war fürs erste begeistert. Hatte gedacht das man mit der Such-Funktion und einer Schleife ans Ziel kommt aber auf so ein komplexes Modul/ Funktion wäre ich nie gekommen (hätte ich alleine nie geschafft). Also erstmal ein doppelten superdank .... aber irgenwie funktioniert das mit den Produkten bzw. Componenten nicht Das Makro läuft ohne Fehler durch aber manche Produkte/ Components werden nicht umbenannt (auch nicht bei Einzelselektion bzw. wenn diese in der 1. Ebene stehen)?? Ach ja,kann man die Selektion auch nach dem Makro-Aufruf durchführen (die Tools-Palette mit dem blauen "Beutel"). ...hoffe du kannst auch hier weiterhelfen..... Gruß Matze Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
meisterlumpi Mitglied
Beiträge: 118 Registriert: 15.04.2011 Intel Core2 Quad Q6600 2.40 GHz | 4 GB RAM | Win7x64
|
erstellt am: 17. Aug. 2011 02:01 <-- editieren / zitieren --> Unities abgeben: Nur für newmann
So dann, Produkte mit Komponenten machen die sache nochmal ein bisschen komplizierter, da man die nicht einfach umbenennen kann wie Produkte. und produkte die unter komponenten liegen auch nicht.. aber gehen tuts doch. weil ich ihn da leichter updaten kann hab ich den neuen code auf meine homepage gestellt. http://nj.riotdowntown.com/2011/06/obtain-the-structure-for-a-catproduct/ C_DocStructureObject und M_DocStructure stehen ganz oben auf der seite unter "Core Functions". das modul M_PartProductRename steht bisschen weiter unten unter "Usage/Examples". Alle drei Module/Klasse haben sich geändert, also die alten löschen und neu kopieren. (und immer die buttons benutzen um den code zu kopieren, sonst haste zeilennummer mit drin)
es ist immernoch so, dass die objekte vorm makro start selektiert sein müssen. Wenn du das makro erst starten willst und dann den user auffordern willst was auszuwählen würd ich das mit ner userform machen. Die würd ich dann vbModal anzeigen, also so, dass der user noch was auswählen kann wenn die userform auf ist. wenn er dann fertig ist würd ich den user einfach auf nen button klicken lassen um den durchlauf zustarten. (mit ner msgbox geht das leider nicht, da man die zuerst bestätigen muss bevor man was anderes auswählen kann.) ich hab eine do while schleife drin, mit ner abbruchbedinung von 100 durchläufen. wenn ihr also produkte habt mit mehr als 100 komponenten auf 100 ebenen untereinander dann muss man die zahl hochsetzten (oder mal über seine produktstruktur nachdenken). strZusatz = "_whatever" ist die variable, die jeweils an den namen angehangen wird, steht ganz oben im rename modul. wenn du strZusatz im code suchst findest du auch die stellen wo die namen geändert werden und kannst den code da anpassen wie du's haben willst.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
newmann Mitglied
Beiträge: 18 Registriert: 15.08.2011
|
erstellt am: 17. Aug. 2011 06:48 <-- editieren / zitieren --> Unities abgeben:
Hallo, habe es mal versucht aber irgendwie läuft er dabei auf den Fehler Runtime-Error '13': Type mismatch Wenn ich dann auf Debug gehe springt er in die Funktion; "Public Function FindParentProductDocument" auf die Zeile; "Set iProduct = iProduct.Parent.Parent" Habe es auch mit einem einfachen Produkt (nur 1 Part/ Produkt/Komponenete enthalten)probiert und nur eines davon selektiert mit dem gleichen Fehlerbild. Weißt du wo hier der "Hund begraben" liegt?? Gruß Matze Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
meisterlumpi Mitglied
Beiträge: 118 Registriert: 15.04.2011 Intel Core2 Quad Q6600 2.40 GHz | 4 GB RAM | Win7x64
|
erstellt am: 17. Aug. 2011 08:39 <-- editieren / zitieren --> Unities abgeben: Nur für newmann
probier mal im M_DocStructure modul die zeile Code: Public Function FindParentProductDocument(iProduct As Product) As ProductDocument
zuändern in
Code: Public Function FindParentProductDocument(iProduct) As ProductDocument
und die Zeile
Code: Public Function IsComp(iProduct As Product) As Boolean
in
Code: Public Function IsComp(iProduct) As Boolean
(ich habs grad nochmal mit einen produkt ausprobiert, also neues vba projekt gemacht und den code von der seite reinkopiert und lief einwandfrei.) Edit: du könntest auch noch probieren aus dem
Code: Loop While M_DocStructure.IsComp(iProduct)
ein
Code: Loop While M_DocStructure.IsComp(iProduct) = True
zumachen.[Diese Nachricht wurde von meisterlumpi am 17. Aug. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
newmann Mitglied
Beiträge: 18 Registriert: 15.08.2011
|
erstellt am: 17. Aug. 2011 10:04 <-- editieren / zitieren --> Unities abgeben:
Hallo, habe deine Änderungen eingebracht und jetzt eine neue Fehlermeldung/ Macroabbruch : Run-Time error Method 'SetImpl' of Objekt 'Documents' failed Debug-Zeile: With CATIA.Documents.Item(ParentProductFileName).Product.Products.Item(curProduct.Name) Muß ich vielelicht bei der Erstellung des VBA-Projektes anders vorgehen (habe bisher immer ein vorhandenes Macro genommen neu abgespeichert, alle Userforms/ Module, etc. gelöscht und mit Insert neu erstellt) wüßte auch nicht wie man sonst ein neues VBA-Projekt erzeugt. Denke aber das der Fehler damit nicht zusammenhängt, oder?? Anbei mal wie meine Struktur aussieht. in Modul1: lade ich die Userform Userform (mit einem CommandButton): beim clicken auf den Button wird der Quellcode von deinem M_PartProductRename gestartet. alles andere ist wie von dir beschrieben ist hier vielleicht schon ein Fehler?? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
meisterlumpi Mitglied
Beiträge: 118 Registriert: 15.04.2011 Intel Core2 Quad Q6600 2.40 GHz | 4 GB RAM | Win7x64
|
erstellt am: 17. Aug. 2011 10:29 <-- editieren / zitieren --> Unities abgeben: Nur für newmann
generell sollte man für neue projekte auch immer ein neues VBA projekt anlegen. So startet man auch wieder mit den standard einstellungen und übernimmt nicht die vom vorherigen projekt, wo man nur die module gelöscht hat. (weil du ja auch nicht unbedingt weißt was der ersteller des Projekts so alles geändert hat und was davon deinen code "behindern" wird) neues projekt erstellst du in CATIA -> ALT + F8 -> 'Makrobibliotheken' -> BibTyp auf 'VBA-Projekte' stellen -> 'Neue Bib erzeugen' über 'Vorhandene Bib hinzufügen' kannst du dann die runtergeladene catvba datei in deine bib "aufnehmen" usw. [Diese Nachricht wurde von meisterlumpi am 04. Sep. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
newmann Mitglied
Beiträge: 18 Registriert: 15.08.2011
|
erstellt am: 17. Aug. 2011 14:40 <-- editieren / zitieren --> Unities abgeben:
habe dein Macro heruntergeladen, ein "jungfreuliches" Produkt erstellt und nur ein Part eingefügt. Dieses selektiert und das Macro gestartet. Erhalte dann wieder die Fehlermeldung; Typ-Mismatch Error-Run Time Debug-Zeile: Set iProduct = iProduct.Parent.Parent wenn ich dann die oben von dir beschriebenen Modifikationen ausführe kommt wieder die Fehlermeldung/ Macroabbruch: Run-Time error Method 'SetImpl' of Objekt 'Documents' failed Debug-Zeile: With CATIA.Documents.Item(ParentProductFileName).Product.Products.Item(curProduct.Name) Scheinbar liegt das Problem doch woanders........seufz... zumal deine Ursprungsversion (mit dem Benennungsbug) ja wenigstens durchlief aber halt nicht das macht was ich wollte....seufz.... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
meisterlumpi Mitglied
Beiträge: 118 Registriert: 15.04.2011 Intel Core2 Quad Q6600 2.40 GHz | 4 GB RAM | Win7x64
|
erstellt am: 17. Aug. 2011 17:10 <-- editieren / zitieren --> Unities abgeben: Nur für newmann
Die codezeile, die bei dir den fehler auslöst wird eigentlich nur dann aufgerufen wenn auch eine komponente in der baugruppe vorhanden ist. anscheinend wird sie bei dir immer aufgerufen was vermuten lässt, dass der fehler in zeile 62 liegt: Code: If M_DocStructure.IsComp(ParentProduct) Then
IsComp überprüft ob das Product eine Komponente ist oder ein normales Produkt. dabei wird entweder wahr oder falsch zurückgegeben von der function. Ich gehe davon aus, dass die bei dir immer wahr zurückgibt.. das kannste einfach mal testen indem du im projekt ein neues modul mit folgendem code erstellst.
Code: Sub CATMain() Call M_DocStructure.CATMain Dim sel As Selection Set sel = CATIA.ActiveDocument.Selection Dim sel1 As Product Set sel1 = sel.Item(1).Value MsgBox M_DocStructure.IsComp(sel1) End Sub
Dann mal ein product selektieren und das modul starten. beim product sollte die msgbox "falsch" anzeigen. wenn du eine komponente auswählst sollte "wahr" angezeigt werden. und da die vorschläge die ich dir 4 posts drüber geschrieben hab nicht geholfen haben solltest du die wieder rückgängig machen. and den variablen typen scheints ja nicht gelegen zu haben. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
newmann Mitglied
Beiträge: 18 Registriert: 15.08.2011
|
erstellt am: 18. Aug. 2011 06:12 <-- editieren / zitieren --> Unities abgeben:
|
meisterlumpi Mitglied
Beiträge: 118 Registriert: 15.04.2011 Intel Core2 Quad Q6600 2.40 GHz | 4 GB RAM | Win7x64
|
erstellt am: 18. Aug. 2011 08:10 <-- editieren / zitieren --> Unities abgeben: Nur für newmann
folgendes (neues) modul könntest du noch probieren: Code: Sub CATMain() 'Call M_DocStructure.CATMain Dim sel As Selection Set sel = CATIA.ActiveDocument.Selection Dim sel1 As Product Set sel1 = sel.Item(1).Value MsgBox IsComp2(sel1) End Sub Public Function IsComp2(iProduct As Product) As Boolean 'On Error Resume Next Dim P1 As Product, P2 As Product IsComp2 = True Set P1 = iProduct.ReferenceProduct ' falls das Objekt keine Product ist, ist es auch ' keine Component If Err.Number <> 0 Then IsComp2 = False Exit Function End If ' For Each fDocument In pDocuments ' Set P2 = fDocument.Product For i = 1 To CATIA.Documents.Count Set P2 = CATIA.Documents.Item(i).Product If P1 Is P2 Then IsComp2 = False Exit For End If Next End Function
wie vorhin, "wahr" bei comp. "falsch" bei product und part. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
meisterlumpi Mitglied
Beiträge: 118 Registriert: 15.04.2011 Intel Core2 Quad Q6600 2.40 GHz | 4 GB RAM | Win7x64
|
erstellt am: 18. Aug. 2011 08:25 <-- editieren / zitieren --> Unities abgeben: Nur für newmann
falls das auch nicht funktioniert, dann ergänze mal diese funktion in dem modul was du grad erstellt hast (siehe meine antwort vor 5 min.) und änder die Zeile in der CATMain() entsprechend von Code: MsgBox IsComp2(sel1)
in
Code: MsgBox IsComp3(sel1)
____Code: Public Function IsComp3(iProduct As Product) As Boolean 'On Error Resume Next Dim P1 As Product, P2 As Product IsComp3 = True Set P1 = iProduct.ReferenceProduct ' falls das Objekt keine Product ist, ist es auch ' keine Component If Err.Number <> 0 Then IsComp3 = False Exit Function End If For i = 1 To CATIA.Documents.Count Set P2 = CATIA.Documents.Item(i).Product If P1.PartNumber = P2.PartNumber Then IsComp3 = False Exit For End If Next End Function
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
newmann Mitglied
Beiträge: 18 Registriert: 15.08.2011
|
erstellt am: 18. Aug. 2011 09:17 <-- editieren / zitieren --> Unities abgeben:
|
meisterlumpi Mitglied
Beiträge: 118 Registriert: 15.04.2011 Intel Core2 Quad Q6600 2.40 GHz | 4 GB RAM | Win7x64
|
erstellt am: 19. Aug. 2011 20:42 <-- editieren / zitieren --> Unities abgeben: Nur für newmann
Hier ist noch eine andere Funktion, die prüft ob Komponente oder nicht. Die hab ich jetzt auch in meinen code eingebaut, sprich falls die bei dir funktioniert kannste die VBA-PartProductRename.catvba nochmal runterladen und ausprobieren -> http://nj.riotdowntown.com/downloads/?did=3 ansonsten weiß ich ehrlich gesagt auch nicht mehr weiter, überall wo ich das makro ausprobiert hab bzw. ausprobieren hab lassen, hat es funktioniert. Welche Catia Version und Servicepack benutzt du eigentlich? Code:
Sub CATMain() Dim sel As Selection Set sel = CATIA.ActiveDocument.Selection Dim sel1 As Product Set sel1 = sel.Item(1).Value MsgBox IsComp2(sel1) End Sub'---------------------------- ' IsComp2 (by Little Cthulhu): ' - checks if product is a component ' - überprüft, ob das Produkt eine Komponente ist '========================================================= Public Function IsComp2(prdProductToCheck As Product) As Boolean ' check that product is not a root (otherwise it is definitely NOT component) If (TypeOf prdProductToCheck.Parent Is Application) Then ' it is a root product and NOT a component IsComp2 = False Else ' check refernce product (where it is located) ''If (prdProductToCheck.ReferenceProduct Is prdProductToCheck.ReferenceProduct.Parent.Product) Then If (prdProductToCheck.ReferenceProduct.PartNumber = prdProductToCheck.ReferenceProduct.Parent.Product.PartNumber) And _ (prdProductToCheck.ReferenceProduct.Name = prdProductToCheck.ReferenceProduct.Parent.Product.Name) Then IsComp2 = False Else IsComp2 = True End If End If End Function
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
newmann Mitglied
Beiträge: 18 Registriert: 15.08.2011
|
erstellt am: 22. Aug. 2011 06:25 <-- editieren / zitieren --> Unities abgeben:
Hi, also habe R19SP9 und als Betriebssystem Windows7 und somit 64bit-Catia und hier liegt glaube ich auch das Problem. Habe dein Macro an einem 32-bit XP-Rechner (32bit-Catia) ausprobieren lassen und es funktioniert einwandfrei Bei einem 64-bit XP-Rechner (64bit-Catia) ist das gleiche Problem wie bei mir und das Macro läuft auf einen Fehler. weißt du wo man die Einstellungen machen muß bzgl. des Unterschiedes zwischen 32 und 64 bit? Wie gesagt unter 32bit-Catia läuft das Macro perfekt und macht auch genau das was ich möchte . Jetzt müßte es halt 64-bit-lauffähig sein........ Ach ja deine Funktion liefert auch bei mir das richtige Ergebnis (Komponente =true; Part/Produkt = false). Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
meisterlumpi Mitglied
Beiträge: 118 Registriert: 15.04.2011 Intel Core2 Quad Q6600 2.40 GHz | 4 GB RAM | Win7x64
|
erstellt am: 22. Aug. 2011 09:08 <-- editieren / zitieren --> Unities abgeben: Nur für newmann
|
newmann Mitglied
Beiträge: 18 Registriert: 15.08.2011
|
erstellt am: 23. Aug. 2011 06:47 <-- editieren / zitieren --> Unities abgeben:
so aber jetzt.....also, Var-1: habe keine References gefunden welche mit "Missing" deklariert sind. Var-2: Auch das mit dem unter 32bit exportieren und unter 64bit importieren hat nichts gebracht (selbe Fehlermeldung wie vorher) Mit deinem 2. Zitat "Works fine on Win2003 server x64, both in R19 and R20 x64 releases." kann ich leider nichts anfangen, was ist damit gemeint?? Fazit: also erstmal ein Riesen-Dankeschön für deine Hilfe , habe dich hoffentlich nicht zu sehr genervt. Ein so komplexer Quellcode mit Functionen übersteigt halt noch mein "Einsteigerwissen". Daher hätte ich halt versucht über eine Schleife den jeweiligen Namen in der Selektion mit der Suchfunktion ausfindig zu machen und dann irgendwie das übergeordnete Produkt zu aktivieren..... dein Macro läuft ja wie gesagt auf 32 bit werde es also erstmal dabei belassen (auch wenn hier natürlich der Catia-Speicher schnell an seine Grenzen kommt)in der Hoffnung es irgendwann auch mal in 64 bit lauffähig zu bekommen. Danke und Gruß Matze Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
meisterlumpi Mitglied
Beiträge: 118 Registriert: 15.04.2011 Intel Core2 Quad Q6600 2.40 GHz | 4 GB RAM | Win7x64
|
erstellt am: 23. Aug. 2011 09:28 <-- editieren / zitieren --> Unities abgeben: Nur für newmann
"Works fine on Win2003 server x64, both in R19 and R20 x64 releases." soll heißen, dass das makro bei ihm in der 64bit catia version (R19 & R20) funktioniert hat. er benutzt zwar win2003 server x64 anstatt win7, aber ich kann nicht wirklich glauben, dass hier das problem liegt. Es nervt mich nur ein bisschen, dass es nicht funktioniert :-) Aber eine idee hab ich noch. Probiers mal mit folgendem makro.. das funktioniert ganz für sich alleine, sprich mach ein neues projekt nur mit einem modul mit diesem code (ohne M_Docstructure, etc..) vor dem starten wieder alles auswählen (was man will..). Code: Sub CATMain() '---------------------------- Dim extStr As String extStr = "__XYZ***___" '---------------------------- Dim i As Integer On Error Resume Next Dim ActiveDocument1 As Document Set ActiveDocument1 = CATIA.ActiveDocument If Err.Number <> 0 Then ' in case no open document was found ' ... Err.Clear End If Dim Selection1 As Selection Set Selection1 = ActiveDocument1.Selection ' check document type for active document Select Case TypeName(ActiveDocument1) Case Is = "ProductDocument" ' active document is a product For i = 1 To Selection1.Count With Selection1.Item(i) ' check selected element If TypeName(.Value) = "Product" Then Dim product1 As Product Set product1 = .Value If TypeName(product1.Parent.Parent) = "Application" Then ' if item is main document product1.PartNumber = product1.PartNumber & extStr Else ' if item is a subproduct Dim Product1Parent As Product Set Product1Parent = product1.Parent.Parent.ReferenceProduct Dim product2 As Product Set product2 = Product1Parent.Products.Item(product1.Name) product2.Name = product2.Name & extStr End If End If End With Next i Case Is = "PartDocument" ' active document is a part Dim partDocument3 As PartDocument Set partDocument3 = ActiveDocument1 Dim product3 As Product Set product3 = partDocument3.GetItem(ActiveDocument1.Part.Name) product3.PartNumber = product3.PartNumber & extStr Case Else ' active document is neither product nor part Call MsgBox("Macro only works with product- or part documents.", vbInformation) End Select If Err.Number <> 0 Then ' in case there was an error ' ... Err.Clear End If End Sub
gruß [Diese Nachricht wurde von meisterlumpi am 04. Sep. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
newmann Mitglied
Beiträge: 18 Registriert: 15.08.2011
|
erstellt am: 23. Aug. 2011 10:19 <-- editieren / zitieren --> Unities abgeben:
Oooh Held, ooh Held du großer Krieger vor deines Schatten-Angesicht, da knie ich nieder..... etc., etc. doppel, dreifach-supi ..................was lange währt wird letztendlich gut... was soll ich sagen es fuunnzt genau so wie ich es haben möchte..ganz ohne irgendein "gezicke".....kurz perfekt Danke dir vielmals.... hast du vielleicht einen Tip für mich wie ich an Lektüre herankomme, da ich feststellen mußte das mein Können/Wissen doch sehr weit hinten steht. Habe bisher nur Excel-VBA gefunden (da stammt mein Grundwissen her). Und das Catia-Script von "Ziethen" scheint mir nicht hilfreich, oder?? aber nochmal spitzen-Dank Gruß Matze Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
meisterlumpi Mitglied
Beiträge: 118 Registriert: 15.04.2011 Intel Core2 Quad Q6600 2.40 GHz | 4 GB RAM | Win7x64
|
erstellt am: 23. Aug. 2011 11:50 <-- editieren / zitieren --> Unities abgeben: Nur für newmann
|