Text in Textboxen suchen und hervorheben
Schritt-für-Schritt-Anleitung
- Öffne deine Excel-Datei und stelle sicher, dass du auf dem ersten Tabellenblatt bist, wo sich die Strings in einer Spalte befinden.
- 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
- 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
- Speichere deine Arbeit und schließe den VBA-Editor.
- 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
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.