Walter ha un foglio di lavoro che contiene un numero di caselle di testo. Vorrebbe cercare in quelle caselle di testo per trovare del testo specifico, ma Trova e sostituisci non sembra in grado di trovare il testo nelle caselle di testo. Si chiede se esiste un modo per cercare nelle caselle di testo.

Walter ha ragione; non è possibile trovare il testo che si trova nelle caselle di testo in Excel. Per verificarlo, abbiamo aperto una cartella di lavoro nuova di zecca, inserito una singola frase (“il mio messaggio”) e quindi inserito del testo e dei numeri casuali in altre celle del foglio di lavoro. Quindi, con la casella di testo non selezionata, è stato premuto Ctrl + F per cercare “il mio messaggio”. Excel ha doverosamente riferito di non riuscire a trovare il testo, anche se era ancora lì, nella casella di testo.

Fortunatamente, puoi cercare del testo in una casella di testo utilizzando una macro. Ogni casella di testo in un foglio di lavoro appartiene alla raccolta Shapes, quindi tutto ciò che devi fare è scorrere ogni membro della raccolta e vedere se contiene il testo desiderato. Ecco una macro che richiede una stringa di ricerca e quindi la cerca nelle caselle di testo.

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.TextFrame2.TextRange.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

Questa macro esamina tutte le forme nel foglio di lavoro, non solo le caselle di testo. Se preferisci limitare la ricerca alle sole caselle di testo, puoi scorrere la raccolta TextBoxes invece della raccolta Shapes; in entrambi i casi funzionerà bene.

Si noti, inoltre, che questo approccio si interrompe ogni volta che trova il testo corrispondente (il caso del testo non ha importanza) e ti chiede se vuoi continuare. Potresti, invece, volere una macro che contrassegni semplicemente il testo corrispondente nelle caselle di testo. Questo può essere fatto con una macro più breve, come mostrato qui:

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.TextFrame2.TextRange.Characters.Text)

iPos = InStr(sTemp, sFind)

If iPos > 0 Then             With shp.TextFrame2.TextRange.Characters(Start:=iPos, _               Length:=Len(sFind)).Font                 .UnderlineStyle = msoUnderlineHeavyLine                 .Bold = True             End With         End If     Next     MsgBox "Finished"

End Sub

Questa macro sottolinea il testo individuato utilizzando una linea pesante e quindi lo rende in grassetto. Quando hai finito, probabilmente vorrai riportare il testo al testo normale. Puoi farlo utilizzando la seguente macro:

Sub ResetFont()

Dim shp As Shape

For Each shp In ActiveSheet.Shapes         With shp.TextFrame2.TextRange.Characters.Font             .UnderlineStyle = msoNoUnderline             .Bold = False         End With     Next End Sub

_Nota: _

Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.

ExcelTips è la tua fonte di formazione economica su Microsoft Excel.

Questo suggerimento (11282) si applica a Microsoft Excel 2007 e 2010. Puoi trovare una versione di questo suggerimento per la vecchia interfaccia del menu di Excel qui: