2016-01-25 3 views
0

У меня есть следующиеУсловный охранник IF Не (х = Empty) Тогда

Public Sub BreakAllLinks(ByRef aWkBook As Excel.Workbook) 
Dim Link As Variant 
Dim myLinks As Variant 

myLinks = aWkBook.LinkSources(Type:=Excel.xlLinkTypeExcelLinks) 
If Not (myLinks = Empty) Then 
    For Each Link In myLinks 
     aWkBook.BreakLink Name:=Link, Type:=Excel.xlLinkTypeExcelLinks 
    Next Link 
End If 

End Sub 'BreakAllLinks 

Если myLinks пусто, то он хорошо работает и позволяет избежать петли For Each но если myLinks содержит несколько ссылок, то я получаю следующее сообщение об ошибке

ошибка выполнения '13'

Что с If Not (myLinks = Empty) Then?

ответ

5

LinkSources возвращает либо Empty, либо массив.

Вы не можете сравнить массив с Empty с помощью оператора равенства.

documentation показывает правильный способ проверки результата - с использованием функции IsEmpty.

Функция выполнена успешно, независимо от типа значения, хранящегося в вашем Variant.
Если, например, у вас был Nothing, вы получили бы ошибку 91.
Или, если бы у вас была ссылка на объект, ваше сравнение попыталось бы получить default property сохраненного объекта и сравнить его с Empty.

Именно поэтому вы никогда не должны проверять на наличие = Empty и использовать только IsEmpty.

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