Excel VBA - инициализация пустых типов пользователей и обнаружение пустых значений - PullRequest
1 голос
/ 06 апреля 2009

Я создал определенный пользователем тип, который будет содержать некоторые данные, которые я буду использовать для заполнения своей формы. Я использую массив этого пользовательского типа и изменяю его размер по мере извлечения данных с внешнего сервера.

Для того, чтобы моя программа была легче усваиваться, я начал разбивать ее на подпрограммы. Однако, когда моя программа инициализирована, я не могу сказать, когда был инициализирован конкретный массив, и поэтому я не могу быть уверен, что могу вызвать функцию размера, чтобы проверить, пуст ли массив.

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

Ответы [ 5 ]

5 голосов
/ 06 апреля 2009

В дополнение к решению isempty (массив) -

If IsNull(array) then 

   msgbox "array is empty"

End If
2 голосов
/ 06 апреля 2009

AFAIK, вы не можете проверить, был ли инициализирован пользовательский тип перед его отправкой в ​​качестве аргумента в процедуру / функцию.

Я цитирую этот пример из справки VBA


Type StateData
    CityCode(1 To 100) As Integer     ' Declare a static array.
    County As String * 30
End Type

Поле округа инициализируется некоторым значением, которое можно использовать как базовое значение. Если пользователь устанавливает это поле явно, это означает, что оно содержит некоторое значение и остается неинициализированным, в противном случае.

например,

Sub main()
    Dim example As StateData
    MsgBox IsInitialized(example)

    Dim example2 As StateData
    example2.County = "LA"
    MsgBox IsInitialized(example2)
End Sub
Function IsInitialized(arg As StateData) As Boolean
    Dim initCounty As String * 30
    IsInitialized = (arg.County <> initCounty)
End Function
1 голос
/ 06 апреля 2009

Попробуйте:

dim v

if isempty(v) then
    msgbox "is empty"
end if
0 голосов
/ 06 марта 2014

Если вам нужно проверить, был ли весь динамический массив пользовательских типов инициализирован или нет (не только конкретный элемент) в VBA, то это может быть невозможно напрямую (так как ни одна из функций IsEmpty и т. Д. Не работает с пользовательскими типами) , Однако вы можете легко реструктурировать свою программу, чтобы она возвращала массив пользовательских типов размера 0, чтобы указать, что ничего не было прочитано / инициализировано.

Private Function doStuff() As customType()
    Dim result() As customType

    ' immediately size it to 0 and assing it as result
    ReDim result(0)
    doStuff = vysledek

    ' do real stuff, ... premature "Exit Function" will return an array of size 0
    ' possibly return initialized values
End Function

' then you can all
If (UBound(tabulky) = 0) Then
    MsgBox "Nope, it is not initialized."
End If
0 голосов
/ 06 апреля 2009
If myObjectVariable is Nothing

должен работать, чтобы определить, был ли объект инициализирован.

Редактировать: "ничто" работает, если это объект переменная:

Dim blah As Object
If blah Is Nothing Then
    MsgBox "blah is nothing!"
End If

Dim foo as variant
If IsEmpty(foo) Then
    MsgBox "foo is empty!"
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...