У Уолтера есть рабочий лист с несколькими текстовыми полями. Он хотел бы выполнить поиск в этих текстовых полях, чтобы найти конкретный текст, но «Найти и заменить» не может найти текст в текстовых полях. Он задается вопросом, есть ли способ поиска в текстовых полях.

Уолтер прав; вы не можете найти текст, расположенный в текстовых полях в 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 [Поиск текста в текстовых полях].