Attribute VB_Name = "Delete_Details"
' Makro:        Delete_Details
' Version:      1.0
' Catia Level:  V5R19
' UIL:          English (User Interface Language)
' Autor:        Christian Obholzer
' E-Mail:       ch.obholzer@aon.at
' Erstellt:     23.03.2011
' Zweck:        Es werden alle nicht verwendeten Details gelöscht
'-----------------------------------------------------------------------------------
' Änderungen:   Datum, Name
'               Hier wird die Änderung angegeben
'               Datum, Name
'               Hier wird die Änderung angegeben
'-----------------------------------------------------------------------------------

Option Explicit
    
    '***Deklarationen
    Public objDoc As Document
    
Sub CATMain()

    '***Deklarationen
    Dim objWindows As Windows
    Dim strTyp As String
    Dim objSel As Object
    Dim intI As Integer
    Dim strDetailname As String
    Dim objDetail As Object

    '***Fehlerroutine einschalten
    On Error GoTo Fehler
    
    '***Abfrage nach geöffnetem Dokument
    Set objWindows = CATIA.Windows
    If objWindows.Count = 0 Then
        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
    strTyp = TypeName(objDoc)
    If strTyp <> "DrawingDocument" Then
        MsgBox "Dieses Dokument ist kein Drawing." + vbNewLine + _
        "Das Makro kann nicht ausgeführt werden und wird beendet.", vbCritical + vbOKOnly, "Falscher Dokumententyp"
        Exit Sub
    End If

    Set objSel = objDoc.Selection
    '***Vorselektion löschen um das Ergebnis nicht zu verfälschen
    objSel.Clear

    '***Performanceerhöhung der Suche
    CATIA.HSOSynchronized = False
    '***Element suchen
    objSel.Search "CATDrwSearch.DrwDetail, all"
    CATIA.HSOSynchronized = True
    
    '***Schleife rückwärts durchlaufen
    For intI = objSel.Count To 1 Step -1
        '***Componentname definieren
        strDetailname = objSel.Item(intI).Value.Name
        '***Element ansprechen
        Set objDetail = objSel.Item(intI).Value
        
        '***Function aufrufen
        Second_Search strDetailname, objDetail, intI
        
        '***Performanceerhöhung der Suche
        CATIA.HSOSynchronized = False
        '***Element suchen
        objSel.Search "CATDrwSearch.DrwDetail, all"
        CATIA.HSOSynchronized = True
    Next
    
    '***Meldung an User
    MsgBox "Makro wurde erfolgreich beendet.", vbInformation + vbOKOnly, "Makro erfolgreich beendet"
        
Exit Sub

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


Public Function Second_Search(strDetailname, objDetail, intI)

    '***Deklarationen
    Dim objSel_Second_Search As Object
    
    Set objSel_Second_Search = objDoc.Selection
    '***Vorselektion löschen um das Ergebnis nicht zu verfälschen
    objSel_Second_Search.Clear
            
    '***Performanceerhöhung der Suche
    CATIA.HSOSynchronized = False
    '***Element suchen
    objSel_Second_Search.Search "CATDrwSearch.DrwDitto.Name=" & strDetailname & "* ; all"
    CATIA.HSOSynchronized = True

    If objSel_Second_Search.Count = 0 Then
        '***Element zur Selektion hinzufügen
        objSel_Second_Search.Add objDetail
        '***Element löschen
        objSel_Second_Search.Delete
    End If

    objSel_Second_Search.Clear
    
End Function
