Búsqueda de texto en cuadros de texto (Microsoft Excel)
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]
.