Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Definition der einzelnen Funktionen in einem Makro für Teileumbenennung

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  Definition der einzelnen Funktionen in einem Makro für Teileumbenennung (1647 mal gelesen)
bamigon
Mitglied
TZ

Sehen Sie sich das Profil von bamigon an!   Senden Sie eine Private Message an bamigon  Schreiben Sie einen Gästebucheintrag für bamigon

Beiträge: 6
Registriert: 09.02.2012

CATIA V5 R19 SP03
WinXP SP2
AMD 3800+ (2,4GHz)
4GB<P>bzw.<P>CATIA V5 R17
Win7 SP1 (64-Bit)
Intel i3 (2,4GHz)
4GB

erstellt am: 19. Mrz. 2013 00:20    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo zusammen,

ich hätte nach langer Zeit mal wieder eine Frage.
Ich habe aus dem Forum hier aus mehreren Makros ein passendes Makro für meine Anwendung zusammengebaut, welches auch (bis dato) einwandfrei funktioniert. Nur habe ich das "Problem", dass ich darüber eine Präsentation (vor Programmierlaien) halten muss/darf und mir nicht alle einzelnen Funktionen so ganz klar sind. Daher schreibe ich nun mal mein Makro hier rein mit den von mir angedachten Definitionen. Über eure Anmerkungen/Hilfen/Verbesserungen wäre ich dankbar.

----------------------------------------------
Sub Umbenennen(Produkt, alteBezeichnung, neueBezeichnung)
  'Start des Makros mit dem Namen Umbennen und den Variablen Produkt, alteBezeichnung, neueBezeichnung
  'in den meisten Fällen war dies kein Sub, sondern eine Function
  'Function gibt ja einen Wert zurück, braucht man hier aber nicht zwingend, oder?!

Set Aktuell = CATIA.ActiveDocument
  'aktuelle Baugruppe als aktive Baugruppe setzen

Set Auswahl = Aktuell.Selection
  'zuvor definierte, aktive Baugruppe komplett auswählen


Set Teilenummer = Produkt.ReferenceProduct
  'CATIA spezifische Bezeichnung für die Teilenummer als "Teilenummer" (Name frei wählbar) setzen

If InStr(Teilenummer.PartNumber, alteBezeichnung) Then
  'steht ein Wert in der Eingabezeile alteBezeichnung, dann

NeuerName = Replace(Teilenummer.PartNumber, alteBezeichnung, neueBezeichnung)
  'ersetze den Wert aus Eingabezeile alteBezeichnung durch den Wert in Eingabezeile neueBezeichnung und merke den Wert in NeuerName

Teilenummer.PartNumber = NeuerName
  'schreibe den gemerkten Wert in Teilenummer

End If

Set Alles = Produkt.Products
  'Alle Unterbaugruppen u. -teile zusammenzählen

Zaehler = Alles.Count
  'von zusammengezählte Zahl runterzählen

If Zaehler > 0 Then
  'Zahl noch größer als 1? dann

For i = 1 To Zaehler
  'Zaehler um 1 verringern
     
Umbenennen Alles.Item(i), alteBezeichnung, neueBezeichnung
  '???

Next
  'nächsten Durchlauf starten

End If

End Sub

Sub CATMain()
  '???

Set aktuellesProdukt = CATIA.ActiveDocument.Product  
  'gesamtes Produkt als aktiv setzen (blau unterlegt)

alteBezeichnung = InputBox("Ursprungsbezeichnung eingeben (alt)", "Teilenummer umbennen v1.0")
  'Eingabefenster für alteBezeichnung mit Fenstertext""

neueBezeichnung = InputBox("Neue Bezeichnung eingeben (neu)", "Teilenummer umbennen v1.0")  
  'Eingabefenster für neueBezeichnung mit Fenstertext""

Umbenennen aktuellesProdukt, alteBezeichnung, neueBezeichnung
  '???


End Sub
----------------------------------------------

Das mit dem Zähler habe ich so interpretiert, wie oben geschrieben, stimmt das, oder völliger bulls***?

Alle anderen Anmerkungen sind auch eher kritisch zu sehen! 

Ich bin euch im Voraus schon mal wahnsinnig dankbar für Rückmeldungen.

Grüße
bamigon

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

DasDon
Mitglied
Konstruktuer


Sehen Sie sich das Profil von DasDon an!   Senden Sie eine Private Message an DasDon  Schreiben Sie einen Gästebucheintrag für DasDon

Beiträge: 169
Registriert: 25.07.2011

R18 SP2. WIN

erstellt am: 19. Mrz. 2013 08:39    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für bamigon 10 Unities + Antwort hilfreich

Moin moin,
ich versuche mich mal ran   


Ein CATIA Makro fängt immer erst bei Sub CATMain() an...

danach wird das Objektvariable aktuellesProdukt mit dem satz
Set aktuellesProdukt = CATIA.ActiveDocument.Product   deklariert. und zwar von CATIA das Aktive Dokument welches ein Produkt ist.

    aktuellesProdukt
entspricht also ab nun an das geöffneten CATProduct.

jetzt werden die String Variablen alteBezeichnung & neueBezeichnung anhand eines Eingabefenster definiert und anschließend wird ein das unterprogramm Umbenennen ausgeführt welches die gerade definierten Variablen übergeben bekommt.

alteBezeichnung = InputBox("Ursprungsbezeichnung eingeben (alt)",
neueBezeichnung = InputBox("Neue Bezeichnung eingeben (neu)",
Umbenennen aktuellesProdukt, alteBezeichnung, neueBezeichnung

Zitat:
  'Start des Makros mit dem Namen Umbennen und den Variablen Produkt, alteBezeichnung, neueBezeichnung
  'in den meisten Fällen war dies kein Sub, sondern eine Function
  'Function gibt ja einen Wert zurück, braucht man hier aber nicht zwingend, oder?!

Nein. Das würde ich so nicht sagen. Start eines Sub Routine. Eine Funktion wäre hier nicht angebracht, welches wert willst du zurück bekommen? Das sub ändert die Werte des Produkts. nichts wird zurück gegeben.

Im neuen Sub Umbenennen wird dann das Objektvariable Aktuell als das Aktive Dokument gesetzt. Dies ist nötig da die Selection auf document ebene statt findet.
Das übergebene Produkt (vorher aktuellesProdukt ) wird nun in die Selektion hinzugefügt. Und wieder einmal als
Set Aktuell = CATIA.ActiveDocument
Set Auswahl = Aktuell.Selection

Diese Schritte sind aber total überflüssig den mit Aktuell & Auswahl  passiert hiernach nichts mehr!

Das Objektvariable  Teilenummer wird nun deklariert und bekommt den Wert von Produkt was ja vorher aktuellesProdukt war.
Set Teilenummer = Produkt.ReferenceProduct . Das ReferenceProduct ist für das überbenennen der Kinder nachher Sinnvoll.

dann wird NICHT geschaut ob ein Wert im alteBezeichnung steht, sondern geschaut ob der Wert von alteBezeichnung in dem Wert TeilNummer von dem Produkt Teilenummer steht.

Falls ja, wird der Wert gegen neueBezeichnung ausgetauscht.

  If InStr(Teilenummer.PartNumber, alteBezeichnung) Then
  NeuerName = Replace(Teilenummer.PartNumber, alteBezeichnung, neueBezeichnung)
  Teilenummer.PartNumber = NeuerName
End If

Dann wird geschaut wie viele Produkte unter dem Aktuellenbaugruppe hängen, falls mehr als 0 sind wird eine Schleife gestartet und jedes Kindprodukt wird and das Sub Umbenennen übergeben, wo deren TeileNummer wieder verglichen wird und ggf. ersetzt.


Set Alles = Produkt.Products
Zaehler = Alles.Count
If Zaehler > 0 Then
For i = 1 To Zaehler
   Umbenennen Alles.Item(i), alteBezeichnung, neueBezeichnung
Next
End If

Das Sub Umbenennen endet hiernach und das Programm setz sich wieder im CATMain fort. und zwar von da an wo es verlassen wurde. CATSub wird beendet.

Falls du "ganze" TeilleNummer suchts ist die Schleife
If Zaehler > 0 Then
For i = 1 To Zaehler
   Umbenennen Alles.Item(i), alteBezeichnung, neueBezeichnung
Next
End If

Überflüssig, denn ein Produkt kann nicht in sich slebst verbaut sein! bei teile vom TeileNummern geht macht es Sinn.

mMn könnte man das Makro schlanker schreiben. einiges is Überflüssig, aber die geschwindigkeit wird sich nicht verbessern.

Ich hoffe das hilft,

Gruß,
DasDon

[Diese Nachricht wurde von DasDon am 19. Mrz. 2013 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

bamigon
Mitglied
TZ

Sehen Sie sich das Profil von bamigon an!   Senden Sie eine Private Message an bamigon  Schreiben Sie einen Gästebucheintrag für bamigon

Beiträge: 6
Registriert: 09.02.2012

CATIA V5 R19 SP03
WinXP SP2
AMD 3800+ (2,4GHz)
4GB<P>bzw.<P>CATIA V5 R17
Win7 SP1 (64-Bit)
Intel i3 (2,4GHz)
4GB

erstellt am: 19. Mrz. 2013 21:01    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hey,

vielen vielen Dank für die schnelle uns sehr hilfreiche Antwort.

Falls noch Fragen meinerseits auftreten sollten, werde ich mich melden! 

Bis dahin...

Grüße

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

bamigon
Mitglied
TZ

Sehen Sie sich das Profil von bamigon an!   Senden Sie eine Private Message an bamigon  Schreiben Sie einen Gästebucheintrag für bamigon

Beiträge: 6
Registriert: 09.02.2012

CATIA V5 R19 SP03
WinXP SP2
AMD 3800+ (2,4GHz)
4GB<P>bzw.<P>CATIA V5 R17
Win7 SP1 (64-Bit)
Intel i3 (2,4GHz)
4GB

erstellt am: 21. Mrz. 2013 21:04    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Ich wieder!

Hab hier ein zweites Makro, das nun den Exemplarname an die Teilenummer anpasst.

Jedoch stehe ich wahnsinnig auf dem Schlauch. Hab nicht die geringste Ahnung, was genau das Programm bzw. die einzelnen Schritte so machen  Und auch hier hab ich die ehrenvolle Aufgabe das ganze zu Präsentieren! 

Wäre echt super hilfreich, wenn jmd. mir erklären könnte, was genau in den einzelnen Schritten gemacht wird un warum!?

hier der Code:

Sub CATMain()

Set aktuellesProdukt = CATIA.ActiveDocument.Product

Dim aktuelleProdukte As Products

Set aktuelleProdukte = aktuellesProdukt.Products

Umbenennen aktuelleProdukte

End Sub


Sub Umbenennen(Zaehler As Products)

Dim Teilenummer As String
Dim Exemplarname As String
Dim i As Long


For x = 1 to Zaehler.Count

Set Anpassen = Zaehler.Item(x)
Teilenummer = Anpassen.PartNumber
Exemplarname = Anpassen.Name

i=0

Do

On Error Resume Next

i = i+1

Anpassen.Name = Teilenummer & "." & i


If Err.Number = 0 Then

Umbenennen Zaehler.Item(x).ReferenceProduct.Products

Exit Do
ElseIf Err.Number = -2147467259 Then ' warum die Nummer???
Err.Clear
Err.Number = 0
Else
Exit Do
End If

Loop

If Anpassen.Products.Count > 0 Then

Umbenennen Anpassen.Products

End If

Next

End Sub

Nochmals Danke im Voraus für die Hilfe.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

DasDon
Mitglied
Konstruktuer


Sehen Sie sich das Profil von DasDon an!   Senden Sie eine Private Message an DasDon  Schreiben Sie einen Gästebucheintrag für DasDon

Beiträge: 169
Registriert: 25.07.2011

R18 SP2. WIN

erstellt am: 22. Mrz. 2013 09:13    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für bamigon 10 Unities + Antwort hilfreich

Moin moin,

ohne blöd zu klingen oder so, aber warum muss du sachen präsentieren von denen du keine Ahnung hast? Gibt es nicht jemanden der die makros geschribene hat und davon dann auch Ahnung hat?

Code:
Sub CATMain()
Set aktuellesProdukt = CATIA.ActiveDocument.Product
Dim aktuelleProdukte As Products
Set aktuelleProdukte = aktuellesProdukt.Products
Umbenennen aktuelleProdukte

Das Makro fängt wie immer im Sub CATMain an.

Den Objektvariable aktuelleProdukte wir als die Produkte des aktuellen in CATIA geöffneten Produkts deklariert. Also die Gruppe "Kinder" des CATProducts.
Anschließend wird das Sub Umbennen gestartet und die "Kinder" werde übergeben.

Code:
Sub Umbenennen(Zaehler As Products)
  Dim Teilenummer As String
  Dim Exemplarname As String
  Dim i As Long

  For x = 1 to Zaehler.Count
  Set Anpassen = Zaehler.Item(x)
  Teilenummer = Anpassen.PartNumber
  Exemplarname = Anpassen.Name


Jetzt wird eine schleife gestartet(for x = y to z next). Und zwar wird sie so oft durchlaufen wie es kinder gibt [aktuelleProdukte wurde übergeben und vom Zaehler  (Sub Umbenennen(Zaehler As Products)) "empfangen".]!
Anpassen wird als Kind dekelariert. x = 1 also erstes kind, x = 2 zweites kind etc.
Dann werden Tielenummer und Exemplarname deklariert. Sie bekommen die Werte vom Kind.

Dannach wird (im groben) das Naming der Teile angepasst und geschaut ob das Kind kinder hat, wenn ja, wird das Sub Umbennen mit dem Kinder des Kind ausgeführt.

Code:
Umbenennen Zaehler.Item(x).ReferenceProduct.Products

Exit Do
ElseIf Err.Number = -2147467259


Das Err.Number = -2147467259 ist der FehlerNummerCode (sprich Error Number) für das fehlen von kindern. (Die nummern kenne ich nicht, aber so wie das makro geschriben ist scheint es so zu sein). Kommt es zu einem Fehler bricht das Makro normaleweise ab. Mit On Error Resume Next wird das makro aufgefordert weiter zu arbeiten, trotz Fehler. Es ist nur zuempfehlen, wenn mann weiß das ein Fehler unter besondern umständen verursacht wird, man es aber abfangen kann.

Ich persönlich hätte hier eine wenn abfrage bevorzugt.
Wenn Kind.Kinder.Zählen > Null Dann Umbenennen mit KindesKinder


Das war so im groben was das Makro tut. Aber wie gesagt, vielleicht solltest du jemanden anderes finden der es präzentiert?

Gruß,
DasDon

[Diese Nachricht wurde von DasDon am 22. Mrz. 2013 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz