Walter的工作表中包含许多文本框。他想在这些文本框中进行搜索以找到一些特定的文本,但是“查找并替换”似乎无法在文本框中查找文本。他想知道是否有一种方法可以搜索文本框。

沃尔特是对的;您找不到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_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(11282)适用于Microsoft Excel 2007和2010。您可以在以下旧版Excel菜单界面中找到该技巧的版本: