Walter tiene una hoja de trabajo que tiene varios cuadros de texto. Le gustaría buscar en esos cuadros de texto para encontrar un texto específico, pero Buscar y reemplazar no parece capaz de encontrar texto en los cuadros de texto. Se pregunta si hay alguna forma de buscar en los cuadros de texto.

Walter tiene razón; no puede encontrar texto ubicado en cuadros de texto en Excel. Para probar esto, abrimos un nuevo libro de trabajo, colocamos una sola frase en él («mi mensaje»), y luego colocamos texto y números aleatorios en otras celdas de la hoja de trabajo. Luego, con el cuadro de texto no seleccionado, se presionó Ctrl + F para buscar «mi mensaje». Excel debidamente informó que no pudo encontrar el texto, a pesar de que todavía estaba allí, en el cuadro de texto.

Afortunadamente, puede buscar texto en un cuadro de texto mediante una macro. Cada cuadro de texto de una hoja de trabajo pertenece a la colección Shapes, por lo que todo lo que necesita hacer es recorrer cada miembro de la colección y ver si contiene el texto deseado. Aquí hay una macro que solicita una cadena de búsqueda y luego la busca en los cuadros de texto.

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

Esta macro examina todas las formas de la hoja de trabajo, no solo los cuadros de texto. Si prefiere limitar su búsqueda a solo cuadros de texto, puede recorrer la colección TextBoxes en lugar de la colección Shapes; de cualquier manera funcionará bien.

Observe también que este enfoque se detiene cada vez que encuentra un texto coincidente (el caso del texto no importa) y le pregunta si desea continuar. En cambio, es posible que desee una macro que simplemente marque el texto coincidente en los cuadros de texto. Esto se puede hacer con una macro más corta, como se muestra aquí:

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

Esta macro subraya el texto ubicado con una línea gruesa y luego lo pone en negrita. Cuando haya terminado, probablemente desee volver a cambiar el texto a texto normal. Puede hacerlo utilizando la siguiente 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: _

Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios ExcelTips), he preparado una página especial que incluye información útil.

link: / excelribbon-ExcelTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador].

ExcelTips es su fuente de formación rentable en Microsoft Excel.

Este consejo (11282) se aplica a Microsoft Excel 2007 y 2010. Puede encontrar una versión de este consejo para la interfaz de menú anterior de Excel aquí:

link: / excel-Finding_Text_in_Text_Boxes [Encontrar texto en cuadros de texto].