2015-03-10 6 views
0

У меня есть электронная таблица, которая содержит несколько гиперссылок, некоторые из которых являются формами. Я пытаюсь пройти через них, чтобы увидеть, где каждый из них указывает, чтобы позже удалить некоторые из них. Для гиперссылок, содержащихся в клетках, следующий цикл работал:Как ссылаться на гиперссылки формы с помощью Excel VBA

Sub a() 
    Dim ws As Worksheet, hl As Hyperlink, o As Shape 

    For Each ws In Worksheets 
    For Each hl In ws.Hyperlinks 
     Debug.Print hl.Address 
    Next 
    Next 
End Sub 

Но это, кажется, пропустить все гиперссылки, происходящие из форм или других объектов.

Есть ли способ, которым я могу контактировать с ними? Я пробовал такие вещи, как:

Sub a() 
    Dim ws As Worksheet, hl As Hyperlink, o As Shape 


    For Each ws In Worksheets 
    For Each o In ws.Shapes 
     For Each hl In o.Hyperlinks 
     Debug.Print hl.Address 
     Next 
    Next 
    Next 
End Sub 

Но это дает мне сообщение об ошибке выполнения 91 на debug.print линии. Гуглинг не дает мне ничего. Итак, есть ли у кого-нибудь из вас представление о том, как печатать адреса?

ответ

3

A Shape не имеет свойства .Hyperlinks, только .Hyperlink, и вы получите от него ошибку, если нет связанной гиперссылки, поэтому вам нужен обработчик ошибок. Например:

 On Error Resume Next 
     Set hl = o.Hyperlink 
     On Error GoTo 0 
     If Not hl Is Nothing Then 
      Debug.Print hl.Address 
      set hl = Nothing 
     End If 
+0

А, я вижу. Я также попытался с 'o.HyperLink.Address', но также получил ошибку. Я должен был подумать, что это сделает, если не найдет гиперссылку. Пробовав ваше решение, похоже, что в других объектах есть ошибочные гиперссылки, кроме форм. Не могли бы вы узнать, какие объекты могут содержать их? – eirikdaude

+0

* Ничего * в слое чертежа листа - это форма - в чем проблема? – Rory

+0

В листе есть некоторые сломанные ссылки, но я не могу понять, где они находятся (видимо, не в «Worksheets.Hyperlinks» или «Shape.Hyperlink'). Причина, по которой я хочу знать, чем является родительский объект ссылок, заключается в том, что я * могу * хотеть удалить родительский объект, в зависимости от того, что это такое. Просто использовал «Hyperlink.Address», чтобы определить, удалось ли мне найти объекты или нет. – eirikdaude

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