Поиск текста в текстовых полях (Microsoft Excel)
У Уолтера есть рабочий лист с несколькими текстовыми полями. Он хотел бы выполнить поиск в этих текстовых полях, чтобы найти конкретный текст, но «Найти и заменить» не может найти текст в текстовых полях. Он задается вопросом, есть ли способ поиска в текстовых полях.
Уолтер прав; вы не можете найти текст, расположенный в текстовых полях в Excel. Чтобы проверить это, мы открыли новую книгу, поместили в нее одну фразу («мое сообщение»), а затем поместили произвольный текст и числа в другие ячейки на листе. Затем, когда текстовое поле не выбрано, была нажата Ctrl + F для поиска «мое сообщение». Excel послушно сообщил, что не может найти текст, даже если он все еще был там, в текстовом поле.
К счастью, вы можете искать текст в текстовом поле с помощью макроса. Каждое текстовое поле на листе принадлежит коллекции Shapes, поэтому все, что вам нужно сделать, это пройти по каждому члену коллекции и посмотреть, содержит ли он желаемый текст. Вот макрос, который запрашивает строку поиска, а затем ищет ее в текстовых полях.
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
Этот макрос просматривает все фигуры на листе, а не только текстовые поля. Если вы предпочитаете ограничить поиск только текстовыми полями, вы можете перемещаться по коллекции TextBoxes вместо коллекции Shapes; в любом случае будет работать нормально.
Также обратите внимание, что этот подход останавливается каждый раз, когда он находит соответствующий текст (регистр текста не имеет значения) и спрашивает вас, хотите ли вы продолжить. Вместо этого вам может понадобиться макрос, который просто помечает соответствующий текст в текстовых полях. Это можно сделать с помощью более короткого макроса, как показано здесь:
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
Этот макрос подчеркивает расположенный текст жирной линией, а затем делает его жирным. Когда вы закончите, вы, вероятно, захотите снова изменить текст на обычный текст. Это можно сделать с помощью следующего макроса:
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
_Примечание: _
Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.
link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера]
.
ExcelTips — ваш источник экономичного обучения Microsoft Excel.
Этот совет (11282) относится к Microsoft Excel 2007 и 2010. Вы можете найти версию этого совета для более старого интерфейса меню Excel здесь:
link: / excel-Finding_Text_in_Text_Boxes [Поиск текста в текстовых полях]
.