Excel 搜索形状中的文本
我想在Excel上搜索形状中的文本,在Excel.tips.net中找到了以下代码Excel 搜索形状中的文本,excel,vba,search,text,Excel,Vba,Search,Text,我想在Excel上搜索形状中的文本,在Excel.tips.net中找到了以下代码 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) = ""
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.TextFrame.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
我正在使用Excel 2010
谢谢你的帮助
Mattice这不是答案(但评论太多)
请尝试此操作并检查是否仍会弹出错误:
Sub testForError()
Dim shp As Shape, i As Long
On Error Resume Next
For Each shp In ActiveSheet.Shapes
i = i + 1
Debug.Print i & " " & shp.Type
Debug.Print i & " " & shp.TextFrame.Characters.Text
Debug.Print i & " " & shp.TextFrame2.TextRange.Text
Next
Debug.Print "finished"
End Sub
编辑如果出现错误,请尝试并告诉我:)
子FindInShape1()
将shp变暗为形状
将sFind设置为字符串
作为字符串的Dim sTemp
sFind=InputBox(“搜索?”)
如果微调(sFind)=“”,则MsgBox“未输入任何内容”:退出子菜单
出错时继续下一步
对于ActiveSheet.Shapes中的每个shp
Debug.Print shp.TopLeftCell.Address
sTemp=“”
sTemp=shp.TextFrame.Characters.Text
如果Len(sTemp)那么
如果仪表(1,sTemp,sFind,1),则
选择
如果MsgBox(shp.Name&vbCrLf&sTemp&vbCrLf&vbCrLf&“是否要继续?”,vbYesNo,“继续?”)vbYes,则退出Sub
如果结束
如果结束
下一个
MsgBox“找不到更多”
端接头
您忘记了在分配任何形状变量之前必须输入“set”
Set sTemp = shp.TextFrame.Characters.Text
嗯,每个形状都包含文本吗?@findwindow
shp.TextFrame.Characters.text
将导致大多数形状出现错误。。。如果没有错误,请继续下一步
我不确定如何在没有错误消息的情况下运行它。我尝试将shp.TextFrame.Characters.Text更改为shp.textfect.Text,但它不起作用。我运行了它,它似乎没有任何明显的效果。然后我运行了原始代码,错误仍然存在。谢谢你的邀请suggestion@MatticeVerhoeven在VBA窗口的直接窗口中应该有很多文本。。。最后一个输出应该是“已完成”。。。这告诉我们有一个不同的问题…我对VBA很陌生抱歉,我不确定直接窗口是什么。另外,我应该只运行上面的代码,还是将其包含到原始代码中?@MatticeVerhoeven作为一个额外的宏。。。在VBA窗口内,转到“查看=>>直接窗口”或只需按Ctrl+G。。。请尝试新的代码作为一个额外的宏(我仍然需要知道错误是否弹出,以及崩溃前的最后一次输出)…是的,我作为一个额外的宏运行,在直接窗口中有很多文本后跟“finished”。然后我再次运行原始代码,得到了相同的错误。这行代码捕获的是一个字符串
,其中的文本在形状中,而不是对象,因此Set
在这里不合适。
Sub FindInShape1()
Dim shp As Shape
Dim sFind As String
Dim sTemp As String
sFind = InputBox("Search for?")
If Trim(sFind) = "" Then MsgBox "Nothing entered": Exit Sub
On Error Resume Next
For Each shp In ActiveSheet.Shapes
Debug.Print shp.TopLeftCell.Address
sTemp = ""
sTemp = shp.TextFrame.Characters.Text
If Len(sTemp) Then
If InStr(1, sTemp, sFind, 1) Then
shp.Select
If MsgBox(shp.Name & vbCrLf & sTemp & vbCrLf & vbCrLf & "Do you want to continue?", vbYesNo, "Continue?") <> vbYes Then Exit Sub
End If
End If
Next
MsgBox "No more found"
End Sub
Set sTemp = shp.TextFrame.Characters.Text