Suchen von Text in Textfeldern (Microsoft Excel)
Walter hat ein Arbeitsblatt mit mehreren Textfeldern. Er möchte diese Textfelder durchsuchen, um einen bestimmten Text zu finden, aber Suchen und Ersetzen scheint nicht in der Lage zu sein, Text in Textfeldern zu finden. Er fragt sich, ob es eine Möglichkeit gibt, Textfelder zu durchsuchen.
Walter hat recht; Sie können keinen Text in Textfeldern in Excel finden. Um dies zu testen, haben wir eine brandneue Arbeitsmappe geöffnet, eine einzelne Phrase darin eingefügt („meine Nachricht“) und dann zufälligen Text und Zahlen in andere Zellen des Arbeitsblatts eingefügt. Wenn das Textfeld nicht ausgewählt war, wurde Strg + F gedrückt, um nach „Meine Nachricht“ zu suchen. Excel berichtete pflichtbewusst, dass der Text im Textfeld nicht gefunden werden konnte, obwohl er sich noch genau dort befand.
Glücklicherweise können Sie mithilfe eines Makros in einem Textfeld nach Text suchen. Jedes Textfeld in einem Arbeitsblatt gehört zur Shapes-Sammlung. Sie müssen also nur jedes Mitglied der Sammlung durchgehen und prüfen, ob es den gewünschten Text enthält. Hier ist ein Makro, das zur Eingabe einer Suchzeichenfolge auffordert und diese dann in den Textfeldern sucht.
Sub FindInShape1() Dim rStart As Range Dim shp As Shape Dim sFind As String Dim sTemp As String Dim Response sFind = InputBox("Search for?") If Trim(sFind) = "" Then MsgBox "Nothing entered" Exit Sub End If Set rStart = ActiveCell For Each shp In ActiveSheet.Shapes sTemp = shp.TextFrame.Characters.Text If InStr(LCase(sTemp), LCase(sFind)) <> 0 Then shp.Select Response = MsgBox( _ prompt:=shp.Name & vbCrLf & _ sTemp & vbCrLf & vbCrLf & _ "Do you want to continue?", _ Buttons:=vbYesNo, Title:="Continue?") If Response <> vbYes Then Set rStart = Nothing Exit Sub End If End If Next MsgBox "No more found" rStart.Select Set rStart = Nothing End Sub
Dieses Makro durchsucht alle Formen im Arbeitsblatt, nicht nur die Textfelder. Wenn Sie Ihre Suche lieber auf Textfelder beschränken möchten, können Sie die TextBoxes-Auflistung anstelle der Shapes-Auflistung durchlaufen. so oder so wird gut funktionieren.
Beachten Sie auch, dass dieser Ansatz jedes Mal beendet wird, wenn passender Text gefunden wird (der Fall des Textes spielt keine Rolle) und Sie fragt, ob Sie fortfahren möchten. Möglicherweise möchten Sie stattdessen ein Makro, das einfach den passenden Text in Textfeldern markiert. Dies kann mit einem kürzeren Makro erfolgen, wie hier gezeigt:
Sub FindInShape2() Dim shp As Shape Dim sFind As String Dim sTemp As String Dim iPos As Integer Dim Response sFind = InputBox("Search for?") If Trim(sFind) = "" Then MsgBox "Nothing entered" Exit Sub End If sFind = LCase(sFind) For Each shp In ActiveSheet.Shapes sTemp = LCase(shp.TextFrame.Characters.Text) iPos = InStr(sTemp, sFind) If iPos > 0 Then With shp.TextFrame.Characters(Start:=iPos, _ Length:=Len(sFind)).Font .ColorIndex = 3 .Bold = True End With End If Next MsgBox "Finished" End Sub
Dieses Makro hebt den gefundenen Text mit einer fetten, roten Schrift hervor. Wenn Sie fertig sind, möchten Sie den Text wahrscheinlich wieder in normalen Text ändern. Sie können dies mit dem folgenden Makro tun:
Sub ResetFont() Dim shp As Shape For Each shp In ActiveSheet.Shapes With shp.TextFrame.Characters.Font .ColorIndex = 0 .Bold = False End With Next End Sub
_Hinweis: _
Wenn Sie wissen möchten, wie die auf dieser Seite (oder auf einer anderen Seite der ExcelTips-Websites) beschriebenen Makros verwendet werden, habe ich eine spezielle Seite vorbereitet, die hilfreiche Informationen enthält.
ExcelTips ist Ihre Quelle für kostengünstige Microsoft Excel-Schulungen.
Dieser Tipp (11281) gilt für Microsoft Excel 97, 2000, 2002 und 2003.
Eine Version dieses Tippes für die Multifunktionsleistenoberfläche von Excel (Excel 2007 und höher) finden Sie hier: