Поиск текста в текстовых полях

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

Уолтер прав; вы не можете найти текст, расположенный в текстовых полях в 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 ("Искать?") Если Trim (sFind) = "" Then MsgBox "Ничего не введено" Выход из подпункта End If Set rStart = ActiveCell For Each shp In ActiveSheet.Shapes sTemp = shp.TextFrame.Characters.Text If InStr  (LCase (sTemp), LCase (sFind))  0 Затем shp.Select Response = MsgBox (_ prompt: = shp.Name & vbCrLf & _ sTemp & vbCrLf & vbCrLf & _ "Хотите продолжить?", _  Кнопки: = vbYesNo, Title: = "Continue?") Если ответ  vbYes Then Set rStart = Nothing Exit Sub End If End If Next MsgBox "Больше не найдено" rStart.Select Установить rStart = NothingEnd 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  для? ") Если Trim (sFind) =" "Then MsgBox" Ничего не введено "Exit Sub End If sFind = LCase (sFind) For Each shp In ActiveSheet.Shapes sTemp = LCase (shp.TextFrame.Characters.Text) iPos = InStr  (sTemp, sFind) Если iPos> 0, то с shp.TextFrame.Characters (Start: = iPos, _ Length: = Len (sFind)). Font .ColorIndex = 3. 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.TextFrame.Characters.Font .ColorIndex = 0 .Bold = False  Завершить с помощью NextEnd Sub 

Оцените статью
Frestage.ru
Добавить комментарий