Пустые значения

Статус
Закрыто для дальнейших ответов.

EugenLi

Участник
Топикстартер
Сообщения
106
Реакции
0
Господа, скриптописатели! Кто нибудь сталкивался с ситуацией, когда в некоторых случаях значение может быть недоступно? Я сттолкнулся с этим ковыряя PrinterPresets.
Вот пример: PrinterPresets.Item(1).PPD - в случае его НЕиспользования будет выдавать ошибку (<The property is not applicable in the current state.>). Как отслеживать эту "ПУСТОТУ"?
 

Shlyapa

Участник
Сообщения
4 838
Реакции
1
Ответ: Пустые значения

Вот такие вещи можно найти в Help-е по VB.
Empty Property

True if the specified bookmark is empty. An empty bookmark marks a location (a collapsed selection); it doesn't mark any text. Read-only Boolean.

Note An error occurs if the specified bookmark doesn't exist. Use the Exists property to determine whether the bookmark exists.

Example
This example determines whether the bookmark named "temp" exists and whether it is empty.

If ActiveDocument.Bookmarks.Exists("temp") = True Then
If ActiveDocument.Bookmarks("temp").Empty = True Then _
MsgBox "The Temp bookmark is empty"
End If

IsEmpty Function Example

This example uses the IsEmpty function to determine whether a variable has been initialized.

Dim MyVar, MyCheck
MyCheck = IsEmpty(MyVar) ' Returns True.

MyVar = Null ' Assign Null.
MyCheck = IsEmpty(MyVar) ' Returns False.

MyVar = Empty ' Assign Empty.
MyCheck = IsEmpty(MyVar) ' Returns True.

IsNull Function

Returns a Boolean value that indicates whether an expression contains no valid data (Null).

Syntax

IsNull(expression)

The required expression argument is a Variant containing a numeric expression or string expression.

Remarks

IsNull returns True if expression is Null; otherwise, IsNull returns False. If expression consists of more than one variable, Null in any constituent variable causes True to be returned for the entire expression.

The Null value indicates that the Variant contains no valid data. Null is not the same as Empty, which indicates that a variable has not yet been initialized. It is also not the same as a zero-length string (""), which is sometimes referred to as a null string.

Important Use the IsNull function to determine whether an expression contains a Null value. Expressions that you might expect to evaluate to True under some circumstances, such as If Var = Null and If Var <> Null, are always False. This is because any expression containing a Null is itself Null and, therefore, False.

IsNull Function Example
This example uses the IsNull function to determine if a variable contains a Null.

Dim MyVar, MyCheck
MyCheck = IsNull(MyVar) ' Returns False.

MyVar = ""
MyCheck = IsNull(MyVar) ' Returns False.

MyVar = Null
MyCheck = IsNull(MyVar) ' Returns True.

Извиняюсь, если не правильно понял вопрос.
 

vbatushev

20 лет на форуме
Сообщения
2 242
Реакции
1 227
Ответ: Пустые значения

Вопрос, как я понимаю, не в том, чтобы "отследить пустоту", а в том, чтобы не обламываться на ошибке.
В таком случае стоит проштудировать документацию о процедуре On Error и объекте Err.
Вот в качестве примера кусочек кода, который создает символьный стиль. Однако может произойти ситуация, что таковой стиль существует, а значит, скрипт выдаст ошибку и не сможет продолжать работу.
Код:
Err.Clear ' Очищаем объект Err, на всякий случай :)
' Сообщает интерпретатору, что ломимся на следующую строку,
' если возникнет ошибка
On Error Resume Next
' Если ошибка возникла, значит, стиль уже был создан,
' присваиваем нашей переменной ссылку на этот стиль
    Set myCStyle = myID.ActiveDocument.CharacterStyles.Item("sZamNoBreakSpace")
' Если же у нас нет такого стиля, создаем его
If Err.Number <> 0 Then
    Set myCStyle = myID.ActiveDocument.CharacterStyles.Add
    myCStyle.Name = "sZamNoBreakSpace"
End If
Err.Clear 'Не забываем очистить объект Err
' На всякий случай :)
 

EugenLi

Участник
Топикстартер
Сообщения
106
Реакции
0
Ответ: Пустые значения

Shlyapa сказал(а):
Извиняюсь, если не правильно понял вопрос.

Да нет, это я не верно сформулировал - действительно, мне не ПУСТОТУ нужно было отслеживать, а ошибку обращения к значению переменной. Соответственно, через Error все получилось. А IsEmpty и IsNull - это для проверки "пустого значения" СУЩЕСТВУЮЩЕЙ переменной.

Всем спасибо!
 

Shlyapa

Участник
Сообщения
4 838
Реакции
1
Ответ: Пустые значения

Однако, если явно создать переменную объектного типа, то неявно создаются и перменные-свойства объекта. Разве нет?
 

vbatushev

20 лет на форуме
Сообщения
2 242
Реакции
1 227
Ответ: Пустые значения

А если объекта нет? Попытка создать ссылку на него приводит к ошибке.
 

Shlyapa

Участник
Сообщения
4 838
Реакции
1
Ответ: Пустые значения

vbatushev сказал(а):
А если объекта нет? Попытка создать ссылку на него приводит к ошибке.
По-моему, это уже стиль программирования: либо проверка данных перед их использованием, либо обработка ошибок. Либо в зависимости от предполагаемой ресурсоёмкости того или иного варианта — ежели в цикле всякий раз проверять корректность данных, вместо того, чтобы реагированть только на ошибки, ресурсоёмкость будет выше. Но это в цикле, а если нет? Тут может и не быть существенной разницы.
 
Статус
Закрыто для дальнейших ответов.