Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 搜索形状中的文本_Excel_Vba_Search_Text - Fatal编程技术网

Excel 搜索形状中的文本

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) = ""

我想在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) = "" 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