2013-09-10 2 views
0
Sub FindInShapes1() 
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.TopLeftCell & 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 

Привет,Ошибка выполнения «1004» Указанное значение находится вне диапазона

я сделал выше макрос для поиска первенствовать формы в «crouded» листа, в тексте, написанном внутри. Макрос работает в новых книгах, но не в одном, мне нужно, было это продолжает показывать следующее сообщение:

"Run-Time error '1004' 
The specified value is out of range" 

и, как только я нажимаю на «Debug» он выделяет строку:

sTemp = shp.TextFrame.Characters.Text 

Что случилось?

Спасибо за вашу помощь Chiara

+0

ошибка '1004' - это своего рода уловка, поэтому на самом деле не указывает на фактическую проблему. То, что вы можете сделать, это поставить точку останова (используя F9) в строке 'sTemp = shp.TextFrame.Characters.Text', а затем нажать F5, пока не получите ошибку. Это скажет вам, какой объект Shape вызывает проблему - вполне возможно, что он является самым первым и что ваш код не обрабатывает ошибку - например, может быть, нет текста в объекте фигуры? –

ответ

0

Я думаю, что, поскольку нет никакого способа, чтобы проверить существование TextFrame в форме, вы должны игнорировать эту ошибку с помощью On Error Resume Next:

Sub FindInShapes1() 
Dim rStart As Range 
Dim shp As Shape 
Dim sFind As String 
Dim sTemp As String 
Dim Response 

On Error Resume Next 

sFind = InputBox("Search for?") 
If Trim(sFind) = "" Then 
    MsgBox "Nothing entered" 
    Exit Sub 
    End If 
    Set rStart = ActiveCell 
    For Each shp In ActiveSheet.Shapes 
     'If shp.TextFrame.Characters.Count > 0 Then 
     If InStr(LCase(sTemp), LCase(sFind)) <> 0 Then 
      shp.Select 
      Response = MsgBox(_ 
       prompt:=shp.TopLeftCell & 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 
     'End If 
     sTemp = shp.TextFrame.Characters.Text 

    Next 
    MsgBox "No more found" 
    rStart.Select 
    Set rStart = Nothing 
End Sub 

`

1

Там нет ничего плохого с кодом. Вы получите эту ошибку только в том случае, если активный лист защищен паролем.

Вы можете проверить это?

Также проверьте ниже URL из так

Excel macro "Run-time error '1004"

+0

Как я могу это проверить? Я имею в виду, файл, с которым я хочу работать, - это общий файл, но мне разрешено читать и писать на нем! – ChiaraCiani

+0

Я не получил эту ошибку, без 'On Error' (плохое кодирование, которое я знаю), я получил ** Type Mismatch ** –

+0

Отличный !!!!!! С включенной ошибкой возобновляет работу макрос !!!! спасибо, Филипп, ваша помощь была очень важна! ;-) – ChiaraCiani

1

Извините разорвать соглашение, но подобная ошибку я получаю:

The specified value is out of range 
Run-time error -2147024809 

В моем случае я просто возвращаю форму как часть собственности GET в стороне класса, который хранит Shape Object. Свойство работает для текстовых полей типа Shape Type, но держится при отправке строк Line Shapes. Как ниже. Я не могу использовать ошибку on, или не знаю, как из-за ошибки в End Property?

Public Property Get shp_Obj() As Shape 
    If prvt_int_Ordinal = 13 Them 

     MsgBox prvt_Shp_Shape.Name, , "prvt_Shp_Shape.Name" 



    Set shp_Obj = prvt_Shp_Shape 
    End If 

End Property 
Смежные вопросы