Attribute VB_Name = "Rename_Body_mit_Parameter"
' Makro:        Rename_Body_mit_Parameter
' Version:      1.0
' Catia Level:  V5R19
' UIL:          English (User Interface Language)
' Autor:        Christian Obholzer
' E-Mail:       ch.obholzer@aon.at
' Erstellt:     27.09.2010
' Zweck:        Bodyname wird dem Parameterwert gleichgesetzt
'-----------------------------------------------------------------------------------
' Änderungen:   28.09.2010, Daniel Frauenrath (DanielFr.)
'               Änderung der Variablennamen, HSOSynchronized, lokale Variablen, Auswertung der interaktiven Selektion
'               Datum, Name
'               Hier wird die Änderung angegeben
'-----------------------------------------------------------------------------------

Option Explicit
    

    
Sub CATMain()

    '***Deklarationen
    '###Alle Deklarationen benötigst du nur in der Routine selbst. Deshalb würde ich sie auch nur lokal deklarieren
    '###objDokument spiegelt nicht den Sinn wieder für die Variable (es sind ja Fenster = Windows)
    Dim objWindows As Windows
    Dim objDoc As Document
    '###Wenn du bei jeder Variable deinen Typ als Prefix vornanstellst dann auch hier ;-)
    Dim objSel As Object
    Dim strSel As String
    Dim objPart As Part
    '###Wenn du bei jeder Variable deinen Typ als Prefix vornanstellst dann auch hier ;-)
    Dim objParameters As Parameters
    Dim strParameter As StrParam
    '###Eindeutige Namen für Variablen verwenden
    Dim strSearchFilter(0)
    strSearchFilter(0) = "Body"

    On Error GoTo Fehler
    
    '***Deklarationen


    '***Abfrage nach geöffnetem Dokument
    Set objWindows = CATIA.Windows
    If objWindows.Count = 0 Then
        '###Hier wird keine Zuweisung an eine Variable benötigt! (nur ein Button)
        MsgBox "Es ist kein Dokument geöffnet." & vbNewLine & _
                "Das Makro kann nicht ausgeführt werden und wird beendet.", vbCritical + vbOKOnly, "Kein Dokument offen"
        Exit Sub
    End If

    '***Auslesen der Dokumentart
    Set objDoc = CATIA.ActiveDocument
    '###Hier brauchst du nicht erst den Typ an eine Variable übergeben um den Dokumententyp auszuwerten
    '###Das erhöht die Performance da die Variable nicht im Arbeitsspeicher gespeichert werden muss
    If TypeName(objDoc) <> "PartDocument" Then
        MsgBox "Dieses Dokument ist kein Part." & vbNewLine & _
                "Das Makro kann nicht ausgeführt werden und wird beendet.", vbCritical + vbOKOnly, "Falscher Dokumententyp"
        Exit Sub
    End If
    
    '###Hier kannst du die schon zugewiesene Variable objDoc verwenden
    Set objSel = objDoc.Selection
    '###Vorselektion löschen um das Ergebniss nicht zu verfaelschen
    objSel.Clear
    Set objPart = objDoc.Part
    Set objParameters = objPart.Parameters
    
    '***Element suchen
    '###Performanceerhöhung der Suche ab R19 (notwendig!!!)
    CATIA.HSOSynchronized = False
    objSel.Search ("Knowledgeware.Parameter.Name=Bodyname, all")
    CATIA.HSOSynchronized = True
    
    If objSel.Count = 0 Then
        '***Parameter erstellen
        Set strParameter = objParameters.CreateString("", "")
        strParameter.Rename "Bodyname"
        strParameter.Value = "CAD.de"
    Else
        '***Parameter ansprechen
        Set strParameter = objParameters.Item("Bodyname")
    End If
    
    '***Element selektieren
    strSel = objSel.SelectElement2(strSearchFilter, "Wählen Sie einen Body aus", False)
    
    '###Hier musst du die interaktive Selektion noch auswerten sonst gibt es Laufzeitfehler bei der nächsten Zeile (Anwender bricht ab, etc.)
    If strSel = "Normal" Then
        '***Element umbenennen
        objSel.Item(1).Value.Name = strParameter.Value
        objSel.Clear
    Else
        MsgBox "Abbruch der Selektion durch Anwender", vbExclamation, "Abbruch der Selektion"
        objSel.Clear
        Exit Sub
    End If
    
    '###Part updaten nicht vergessen
    objPart.Update
    
Exit Sub

'***Fehlerbehandlung: Ausgabe der Fehlernummer und Fehlerbeschreibung
Fehler:
    Box = MsgBox("Fehlernummer: " & Err.Number & vbNewLine & _
    "Fehlerbeschreibung: " & Err.Description, vbCritical + vbOKOnly, "Fehler")
    
End Sub

