Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Text in Textbox finden

Text in Textbox finden
26.05.2017 21:39:30
Marcel
hallo,
Folgendes möchte ich tun:
: auf Tabellenblatt 1 steht einen Spalte, in jeder Zelle befindet sich ein String
: bei Doppelclick auf Zelle soll dieser String in den Textboxen auf den folgenden Steiten gesucht werden.
: bei Match soll die textbox einen roten Hintergund bekommen.
das was ich geschrieben habe, funktioniert leider nicht zuverlässig, sobald ich ander userforms hinzufüge und dannach wieder eine Textbox, sucht das Programm nicht in den neu erstellten Textboxen
hier das File:
https://www.herber.de/bbs/user/113814.xls
Gibt es ideen hierzu?
Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Text in Textbox finden
27.05.2017 02:47:21
fcs
Hallo Marcel,
probiere es mal mit dem nachfolgen angepassten Makro.
Die Neunummerierung der Textboxen hab ich mal in ein separates Makro gepackt.
Gruß
Franz
Option Explicit
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
'Variablen deklarieren
Dim Suchbegriff As String, Textfeldtext As String
Dim found As String
Dim i As Integer, ifound1st As Integer
Dim shp As Shape
Dim ws As Worksheet
'Bei einem Laufzeitfehler zur Fehlerbehandlung springen
On Error GoTo Fehler
'Hintergrundfarbe in Spalte entfernen
Columns(Target.Column).Interior.ColorIndex = xlNone
'Suchbegriff merken und gewaehlte Zelle mit gelb hinterlegen
With Target
Suchbegriff = .Value
.Interior.ColorIndex = 6
End With
Application.ScreenUpdating = False
found = "no"
For i = 2 To ActiveWorkbook.Worksheets.Count
Set ws = Worksheets(i)
With ws
.Select
'For Each-Schleife zum Ansprechen aller in dem Tabellenblatt eingesetzten Shapes
For Each shp In ws.Shapes
'prüfen ob Shape = Textbox
If shp.Type = msoTextBox Then
Textfeldtext = ""
With shp.Fill
'Bei dem Textfeld die Hintergrundfarbe zurücksetzen
.ForeColor.SchemeColor = 1
.Visible = msoTrue
'Den Text aus dem Textfeld auslesen und in Variable "Textfeldtext" schreiben
Textfeldtext = shp.TextFrame.Characters.Text
'Wenn der Suchbegriff in dem Textfeld vorkommt (hier über die Funktion "InStr" realisiert,
'ab dem ersten Buchstaben den Text mit dem Suchbegriff vergleicht)
If InStr(1, Textfeldtext, Suchbegriff, 1) Then
If found = "no" Then ifound1st = i
found = "yes"
'Hintergrundfarbe in rot ändern
.ForeColor.SchemeColor = 10
.Visible = msoTrue
shp.TopLeftCell.Select 'Zelle zum Shape selektieren
End If
End With
End If
Next shp
End With
Next i
If found = "no" Then
Cancel = True
Worksheets(1).Activate
MsgBox "Suchbegriff """ & Suchbegriff & """ nicht gefunden!"
Else
Worksheets(ifound1st).Select
Application.ScreenUpdating = True
With ActiveWindow
.ActiveCell.Show
End With
End If
Fehler:
With Err
Select Case .Number
Case 0 'alles ok
Case Else
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description
End Select
End With
Application.ScreenUpdating = True
End Sub
Sub Textboxen_neu_nummerieren()
'Textboxen neu nummerieren
Dim i As Integer, iCount as Integer
Dim ws As Worksheet, shp As Shape
Application.ScreenUpdating = False
For i = 2 To ActiveWorkbook.Worksheets.Count
Set ws = Worksheets(i)
With ws
iCount = 0
'Temporären Namen/Nummer ergeben
For Each shp In ws.Shapes
'prüfen ob Shape = Textbox
If shp.Type = msoTextBox Then
iCount = iCount + 1
shp.Name = "tempTextBox" & Format(iCount, "000")
End If
Next
'"temp" bei den Namen wieder entfernen
For Each shp In ws.Shapes
'prüfen ob Shape = Textbox
If shp.Type = msoTextBox Then
shp.Name = Mid(shp.Name, 5)
End If
Next
End With
Next
End Sub

Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Text in Textboxen suchen und hervorheben


Schritt-für-Schritt-Anleitung

  1. Öffne deine Excel-Datei und stelle sicher, dass du auf dem ersten Tabellenblatt bist, wo sich die Strings in einer Spalte befinden.
  2. Füge das VBA-Makro in den VBA-Editor ein:
    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
    • Klicke mit der rechten Maustaste auf "VBAProject (DeinWorkbookName)" und wähle "Einfügen" > "Modul".
    • Kopiere und füge das folgende Makro in das Modul ein:
Option Explicit
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
    'Variablen deklarieren
    Dim Suchbegriff As String, Textfeldtext As String
    Dim found As String
    Dim i As Integer, ifound1st As Integer
    Dim shp As Shape
    Dim ws As Worksheet
    'Bei einem Laufzeitfehler zur Fehlerbehandlung springen
    On Error GoTo Fehler
    'Hintergrundfarbe in Spalte entfernen
    Columns(Target.Column).Interior.ColorIndex = xlNone
    'Suchbegriff merken und gewaehlte Zelle mit gelb hinterlegen
    With Target
        Suchbegriff = .Value
        .Interior.ColorIndex = 6
    End With
    Application.ScreenUpdating = False
    found = "no"
    For i = 2 To ActiveWorkbook.Worksheets.Count
        Set ws = Worksheets(i)
        With ws
            .Select
            'For Each-Schleife zum Ansprechen aller in dem Tabellenblatt eingesetzten Shapes
            For Each shp In ws.Shapes
                'prüfen ob Shape = Textbox
                If shp.Type = msoTextBox Then
                    Textfeldtext = ""
                    With shp.Fill
                        'Bei dem Textfeld die Hintergrundfarbe zurücksetzen
                        .ForeColor.SchemeColor = 1
                        .Visible = msoTrue
                        'Den Text aus dem Textfeld auslesen und in Variable "Textfeldtext" schreiben
                        Textfeldtext = shp.TextFrame.Characters.Text
                        'Wenn der Suchbegriff in dem Textfeld vorkommt
                        If InStr(1, Textfeldtext, Suchbegriff, 1) Then
                            If found = "no" Then ifound1st = i
                            found = "yes"
                            'Hintergrundfarbe in rot ändern
                            .ForeColor.SchemeColor = 10
                            .Visible = msoTrue
                            shp.TopLeftCell.Select 'Zelle zum Shape selektieren
                        End If
                    End With
                End If
            Next shp
        End With
    Next i
    If found = "no" Then
        Cancel = True
        Worksheets(1).Activate
        MsgBox "Suchbegriff """ & Suchbegriff & """ nicht gefunden!"
    Else
        Worksheets(ifound1st).Select
        Application.ScreenUpdating = True
        With ActiveWindow
            .ActiveCell.Show
        End With
    End If
Fehler:
    With Err
        Select Case .Number
        Case 0 'alles ok
        Case Else
            MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description
        End Select
    End With
    Application.ScreenUpdating = True
End Sub
  1. Füge das zweite Makro für die Neunummerierung der Textboxen ein:
Sub Textboxen_neu_nummerieren()
    'Textboxen neu nummerieren
    Dim i As Integer, iCount As Integer
    Dim ws As Worksheet, shp As Shape
    Application.ScreenUpdating = False
    For i = 2 To ActiveWorkbook.Worksheets.Count
        Set ws = Worksheets(i)
        With ws
            iCount = 0
            'Temporären Namen/Nummer ergeben
            For Each shp In ws.Shapes
                'prüfen ob Shape = Textbox
                If shp.Type = msoTextBox Then
                    iCount = iCount + 1
                    shp.Name = "tempTextBox" & Format(iCount, "000")
                End If
            Next
            '"temp" bei den Namen wieder entfernen
            For Each shp In ws.Shapes
                If shp.Type = msoTextBox Then
                    shp.Name = Mid(shp.Name, 5)
                End If
            Next
        End With
    Next
End Sub
  1. Speichere deine Arbeit und schließe den VBA-Editor.
  2. Teste die Funktionalität, indem du auf eine Zelle im ersten Tabellenblatt doppelklickst. Die Texte in den Textboxen werden durchsucht und die entsprechenden Textboxen erhalten einen roten Hintergrund, wenn ein Treffer gefunden wird.

Häufige Fehler und Lösungen

  • Problem: Die Textboxen werden nicht gefunden.

    • Lösung: Stelle sicher, dass alle Textboxen korrekt benannt sind. Nutze das Makro zur Neunummerierung der Textboxen, um sicherzustellen, dass alle Textboxen erfasst werden.
  • Problem: Das Makro läuft nicht oder gibt Fehlermeldungen aus.

    • Lösung: Überprüfe den Code auf Tippfehler und stelle sicher, dass du die richtige Excel-Version verwendest, da einige Funktionen in älteren Versionen möglicherweise nicht verfügbar sind.

Alternative Methoden

Eine alternative Methode besteht darin, die Suchen-Funktion von Excel zu verwenden. Du kannst den Suchbegriff in das Suchfeld eingeben und die Ergebnisse manuell suchen. Dies ist jedoch nicht so effizient wie die Verwendung von VBA, besonders wenn du viele Textboxen hast.


Praktische Beispiele

Angenommen, du hast folgende Strings in deiner Excel-Tabelle:

  • "Hallo Welt"
  • "Excel ist mächtig"
  • "VBA macht Spaß"

Wenn du auf "Excel ist mächtig" doppelklickst, wird das Makro die Textboxen durchsuchen und diejenige, die diesen Text enthält, rot hinterlegen.


Tipps für Profis

  • Verwende Kommentare im Code: Dadurch kannst du den Code besser verstehen und schneller Änderungen vornehmen.
  • Backup erstellen: Sichere deine Excel-Datei, bevor du VBA-Code hinzufügst oder änderst, um Datenverlust zu vermeiden.
  • Nutze die VBA-Dokumentation: Bei Unklarheiten über bestimmte Funktionen hilft die offizielle Excel VBA-Dokumentation.

FAQ: Häufige Fragen

1. Frage: Wie kann ich das Makro anpassen, wenn ich mehr als zwei Tabellenblätter habe? Antwort: Das Makro ist bereits so konzipiert, dass es durch alle Arbeitsblätter iteriert. Du musst lediglich sicherstellen, dass der Code korrekt in jedes relevante Modul eingefügt wird.

2. Frage: Funktioniert das Makro in Excel Online? Antwort: Nein, das Makro funktioniert nur in der Desktop-Version von Excel, da VBA in Excel Online nicht unterstützt wird.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige