Я недавно пытался переопределить функцию доступа Nz(Value, [ValueIfNull])
в Excel, потому что я нахожу ее довольно полезной, но она отсутствует в Excel (поскольку я нашел мое разочарование при перемещении нескольких полезных функций) , Функция доступа Nz проверяет Value
- если это значение равно null, оно возвращает ValueIfNull
(в противном случае оно возвращает Value
). В Access это полезно для проверки значения поля ввода (среди нескольких других вещей):Определить функцию, которая может принимать нулевой параметр
If Nz(myTextBox.Value, "") = "" Then
MsgBox "You need to enter something!"
End If
прокатного собственные Nz
функции не кажется сложным:
Public Function Nz(value As Variant, Optional valueIfNull As Variant = "") As Variant
If IsNull(value) Then
Nz = valueIfNull
Else
Nz = value
End If
End Function
Но как только я пытаюсь назовите его тем, что на самом деле является нулевым, Excel жалуется на него в вызывающей строке (Run-time error '91': Object variable or With block not set
, что, как я понимаю, примерно эквивалентно NullReferenceException
на других языках), прежде чем попасть в тело функции Nz. Например, Nz(someObj.Value, "")
будет работать только в том случае, если someObj.Value
не является нулевым (функция полностью отключается).
Я пропустил некоторые детали VBA здесь? Исходя из таких языков, как VB.NET, это кажется очень запутанным - я понимаю, что ссылки на объекты просто адресованы реальному объекту, находящемуся в памяти, и поэтому обход ссылки (а не объекта) не должен вызывать проблемы (пока вы не попытаетесь на самом деле что-то делать с несуществующим объектом, конечно). Например, для:
Dim myObj As SomeObject
SomeMethod(myObj) 'the call itself is fine
Public Sub SomeMethod(SomeObject obj)
myObj.DoSomething() 'but *here* it would crash
End Sub
Как вы можете создавать субтитры и функции в VBA, которые будут принимать нулевой параметр?
Краткое примечание: учитывая, что я могу более или менее реплицировать 'Nz' в Excel с помощью' Iif' вместо этого, но вопрос о определении функций, которые принимают нулевые параметры в целом, а не в качестве исправления для этого конкретного случая - это просто полезный сценарий – Kai
вы хотите работать с вариантами или объектами? –