Excel VBA - Inicializace Prázdné uživatel zadá a detekci hodnoty Null

hlasů
1

Vytvořil jsem uživatelem definované typ, který má obsahovat určité údaje, které budu používat naplnit svůj tvar. Jsem využívající řadu tímto uživatelským definovaný typ, a já velikost, že pole, když jsem vytáhnout data ze serveru off-site.

Aby byl můj program stravitelnější, jsem začal ji rozdělit do podprogramů. Nicméně, když se můj program inicializuje, nemohu říct, kdy se určitá pole byla inicializována, takže nemohu být jistý, že mohu volat funkci velikosti, aby zjistili, zda je pole prázdné.

Existuje způsob, jak inicializovat prázdné typ uživatele nebo odhalení null typ uživatele? V současné době jsem hard-kódování ji a já bych přednost elegantní řešení.

Položena 06/04/2009 v 15:49
zdroj uživatelem
V jiných jazycích...                            


5 odpovědí

hlasů
5

Kromě IsEmpty roztok (array) -

If IsNull(array) then 

   msgbox "array is empty"

End If
Odpovězeno 06/04/2009 v 16:23
zdroj uživatelem

hlasů
2

Pokud vím, není možné zjistit, zda uživatelem definovaný typ se inicializuje před tím, než byl poslán jako argument k postupu / funkce.

Cituji tento příklad z VBA nápovědu


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

Pole County se inicializuje na nějakou hodnotu, kterou můžete použít na základní hodnotu. V případě, že uživatel nastaví toto pole explicitně, to znamená, že má nějakou hodnotu a zůstává neinicializované jinak.

pro např

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
Odpovězeno 06/04/2009 v 17:03
zdroj uživatelem

hlasů
1

Snaž se:

dim v

if isempty(v) then
    msgbox "is empty"
end if
Odpovězeno 06/04/2009 v 16:05
zdroj uživatelem

hlasů
0

Potřebujete-li zkontrolovat, zda je celá dynamická škála uživatelských typů se inicializuje nebo ne (nejen konkrétní prvek) ve VBA, pak to nemusí být přímo (jako nikdo z IsEmpty apod funkce pracuje na vlastních typů). Nicméně byste měli být schopni snadno restrukturalizovat svůj program vrátit řadu typů uživatelských velikosti 0 až naznačuje, že se nic číst / inicializaci.

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
Odpovězeno 06/03/2014 v 18:08
zdroj uživatelem

hlasů
0
If myObjectVariable is Nothing

by měl fungovat zjistit, zda objekt byl inicializován.

Edit: „nic“ funguje, pokud se jedná o objekt proměnná:

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
Odpovězeno 06/04/2009 v 15:53
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more