Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Textfeld suchen und löschen, aber nur auf aktuellem Blatt

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:  Textfeld suchen und löschen, aber nur auf aktuellem Blatt (1916 mal gelesen)
n4426
Mitglied
CAx-Administration, Technischer Zeichner (Maschinen- und Anlagentechnik)


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

Beiträge: 65
Registriert: 17.01.2003

erstellt am: 15. Nov. 2011 15:50    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

Hi,

ich hab ein kleines VBA-Makro (ich glabu, denn hab ich hier irgendwo gefunden), dass mir in einer Drawing nach einem Textfeld-Namen sucht und dieses dann lösht. Das funktiniert soweit auch super, nur hab ich jetzt das Problem, das wenn das Textfeld auf Blatt 01 und Baltt 02 vorhanden ist, dieses auf beiden gelöscht wird. Es soll aber nur von dem aktiven Blatt gelöscht werden. Das Textfeld befindet sich im Backround.

Code:
Public Function DeletTxtFeld(varTextfeldName As String)

    Dim intDocObj As Document
    Dim intWindowsObj As Windows
    Dim intObjTypeStr As String
    Dim intTextBoxNameStr As String
   
    intTextBoxNameStr = varTextfeldName
   
   
    '***Background View zugänglich machen
    Dim intSheetObj As DrawingSheet
    Dim intBckViewObj As DrawingView
   
    Set intDocObj = CATIA.ActiveDocument
   
    Set intSheetObj = intDocObj.Sheets.ActiveSheet
    Set intBckViewObj = intSheetObj.Views.Item(2)
   
   
'***Suche erstellen
    Dim intSelObj As Selection
    Dim intSearchStringStr As String
    Dim intMessageStr As String
    Dim i As Integer
    Dim intTextfieldArr() As DrawingText
    ReDim intTextfieldArr(0)
    Dim intArrayCounterInt As Integer
    Dim intMultiTextfieldMsgState As VbMsgBoxResult
   
    Set intSelObj = intDocObj.Selection
    intSelObj.Clear
    intArrayCounterInt = 1
   
    intSearchStringStr = "(Name=" & intTextBoxNameStr & " & " & "CATDrwSearch.DrwText),all"
    intSelObj.Search intSearchStringStr ' "(Name='TEST.1' & CATDrwSearch.DrwText),all"
    If intSelObj.Count = 0 Then
        intMessageStr = "NoFieldFound"
    ElseIf intSelObj.Count = 1 Then
        If intSelObj.Item(1).Value.Parent.Parent.Name = "Background View" Then
            intSelObj.Delete
            intSelObj.Clear
            intMessageStr = "TextfieldDeleted"
        Else
            intMessageStr = "NoFieldFound"
            intSelObj.Clear
        End If
    ElseIf intSelObj.Count > 1 Then
        For i = 1 To intSelObj.Count
       
            If intSelObj.Item(i).Value.Parent.Parent.Name = "Background View" Then
                ReDim Preserve intTextfieldArr(intArrayCounterInt)
                Set intTextfieldArr(intArrayCounterInt) = intSelObj.Item(i).Value
                intArrayCounterInt = intArrayCounterInt + 1
            End If
        Next
        If UBound(intTextfieldArr) = 0 Then
            intMessageStr = "NoFieldFound"
            intSelObj.Clear
        ElseIf UBound(intTextfieldArr) = 1 Then
            intSelObj.Clear
            intSelObj.Add intTextfieldArr(1)
            intSelObj.Delete
            intMessageStr = "TextfieldDeleted"
        ElseIf UBound(intTextfieldArr) > 1 Then
            'intMultiTextfieldMsgState = MsgBox("Es wurden mehrer Textfelder mit dem eingegebenen Namen im Blatthintergrund gefunden!" + Chr(10) + _
            '                                    "Wollen Sie alle Textfelder löschen?", vbQuestion + vbYesNo, "Mehrere Textfelder gefunden")
            'If intMultiTextfieldMsgState = vbNo Then
            '    intMessageStr = "NoDeleting"
            'Else
                intSelObj.Clear
                For i = 1 To UBound(intTextfieldArr)
                    On Error Resume Next
                    intSelObj.Add intTextfieldArr(i)
                    On Error GoTo 0
                Next
                intSelObj.Delete
                intSelObj.Clear
                intMessageStr = "MultiTextfieldDeleted"
            'End If
        End If
    End If
   
    End Function


Hat einer von euch da vieleicht eine Idee zu, wie man den Code so anpasst ?

------------------
MfG

N4426

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

bgrittmann
Moderator
Konstrukteur


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

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 15. Nov. 2011 18:32    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 n4426 10 Unities + Antwort hilfreich

Servus
Ich sehe da zwei Lösungsmöglichkeiten:
- Background selektieren, und mit der Suche nur im Hintergrund suchen/selektieren lassen.
- eine Schleife über alle Texte im Background laufen lassen,  falls der Name des Textes dem Suchkriterium entspricht der Selektion hinzuzufügen, selektierte Elemente löschen.

EDIT: Beispiel zur 1, Lösung ungetestet):

Code:
Public Function DeletTxtFeld(varTextfeldName As String)

    Dim intDocObj As Document
    Dim intObjTypeStr As String   
 
    '***Background View zugänglich machen
    Dim intSheetObj As DrawingSheet
    Dim intBckViewObj As DrawingView
 
    Set intDocObj = CATIA.ActiveDocument
 
    Set intSheetObj = intDocObj.Sheets.ActiveSheet
    Set intBckViewObj = intSheetObj.Views.Item(2)
 
 
    '***Background selektieren
    Dim intSelObj As Selection
    Set intSelObj = intDocObj.Selection

    intSelObj.add intBckViewObj

    '***Suche erstellen
    Dim intSearchStringStr As String
 
    intSearchStringStr = "(Name=" & varTextfeldName & " & " & "CATDrwSearch.DrwText),sel"
    intSelObj.Search intSearchStringStr
 
    intSelObj.Delete
    intSelObj.Clear
 
    End Function


Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

[Diese Nachricht wurde von bgrittmann am 15. Nov. 2011 editiert.]

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



Mitarbeiter im Bereich Zerspanung, CNC (m/w/d)

Wuxi Lead Intelligent Equipment Co., Ltd. ("LEAD"), gegründet im Jahr 1999, ist ein führender Hersteller von Ausrüstung und Anlagen für verschiedene Branchen. Wir konzentrieren uns auf acht Geschäftsfelder, darunter Lithium-Ionen-Batterien, Photovoltaik, 3C, Logistik, Automobilproduktion, Wasserstoffenergie, Laserpräzisionsbearbeitung und "Machine Vision".

LEAD ist bekannt für seine ...

Anzeige ansehenMetallhandwerk
n4426
Mitglied
CAx-Administration, Technischer Zeichner (Maschinen- und Anlagentechnik)


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

Beiträge: 65
Registriert: 17.01.2003

erstellt am: 16. Nov. 2011 19:10    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

Hi Bernd,

ich habs gestern dann noch so gelöst.

Code:
Public Function DeletTxtFeld(varTextfeldName As String, varSheetName As String)
    Dim intDocObj As Document
    Dim intWindowsObj As Windows
    Dim intObjTypeStr As String
    Dim intTextBoxNameStr As String
   
    intTextBoxNameStr = varTextfeldName
   
   
    '***Background View zugänglich machen
    Dim intSheetObj As DrawingSheet
    Dim intBckViewObj As DrawingView
   
    Set intDocObj = CATIA.ActiveDocument
   
    Set intSheetObj = intDocObj.Sheets.ActiveSheet
    Set intBckViewObj = intSheetObj.Views.Item(2)
   
   
'***Suche erstellen
    Dim intSelObj As Selection
    Dim intSearchStringStr As String
    Dim intMessageStr As String
    Dim i As Integer
    Dim intTextfieldArr() As DrawingText
    ReDim intTextfieldArr(0)
    Dim intArrayCounterInt As Integer
    Dim intMultiTextfieldMsgState As VbMsgBoxResult
   
    Set intSelObj = intDocObj.Selection
    intSelObj.Clear
    intArrayCounterInt = 1
   
    intSearchStringStr = "(Name=" & intTextBoxNameStr & " & " & "CATDrwSearch.DrwText),all"
    intSelObj.Search intSearchStringStr ' "(Name='TEST.1' & CATDrwSearch.DrwText),all"
    If intSelObj.Count = 0 Then
        intMessageStr = "NoFieldFound"
    ElseIf intSelObj.Count = 1 Then
    MsgBox "eins"
   

        If intSelObj.Item(1).Value.Parent.Parent.Name = "Background View" And intSelObj.Item(1).Value.Parent.Parent.Parent.Parent.Name = varSheetName Then
            'intSelObj.Delete
            intSelObj.Clear
            intMessageStr = "TextfieldDeleted"
        Else
            intMessageStr = "NoFieldFound"
            intSelObj.Clear
        End If
    ElseIf intSelObj.Count > 1 Then
        For i = 1 To intSelObj.Count

            If intSelObj.Item(i).Value.Parent.Parent.Name = "Background View" And intSelObj.Item(i).Value.Parent.Parent.Parent.Parent.Name = varSheetName Then
                ReDim Preserve intTextfieldArr(intArrayCounterInt)
                Set intTextfieldArr(intArrayCounterInt) = intSelObj.Item(i).Value
                intArrayCounterInt = intArrayCounterInt + 1
            End If
        Next
        If UBound(intTextfieldArr) = 0 Then
            intMessageStr = "NoFieldFound"
            intSelObj.Clear
        ElseIf UBound(intTextfieldArr) = 1 Then
            intSelObj.Clear
            intSelObj.Add intTextfieldArr(1)
            intSelObj.Delete
            intMessageStr = "TextfieldDeleted"
        ElseIf UBound(intTextfieldArr) > 1 Then
            'intMultiTextfieldMsgState = MsgBox("Es wurden mehrer Textfelder mit dem eingegebenen Namen im Blatthintergrund gefunden!" + Chr(10) + _
            '                                    "Wollen Sie alle Textfelder löschen?", vbQuestion + vbYesNo, "Mehrere Textfelder gefunden")
            'If intMultiTextfieldMsgState = vbNo Then
            '    intMessageStr = "NoDeleting"
            'Else
                intSelObj.Clear
                For i = 1 To UBound(intTextfieldArr)
                    On Error Resume Next
                    intSelObj.Add intTextfieldArr(i)
                    On Error GoTo 0
                Next
                intSelObj.Delete
                intSelObj.Clear
                intMessageStr = "MultiTextfieldDeleted"
            'End If
        End If
    End If
   
    End Function


Trozdem Danke für deine Hilfe.

------------------
MfG

N4426

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