Pergunta

Eu criei um tipo definido pelo usuário para conter alguns dados que eu vou usar para preencher o meu formulário. Estou utilizando uma matriz desse tipo definido pelo usuário, e eu redimensionar essa matriz como eu extrair dados de um servidor off-site.

A fim de fazer o meu programa mais fácil de digerir, eu já começaram a dividi-lo em sub-rotinas. No entanto, quando o meu programa é inicializado, não posso dizer quando uma matriz específico foi inicializado, e por isso não pode estar certo que eu posso chamar uma função tamanho para ver se a matriz está vazia.

Existe uma maneira para inicializar um tipo de usuário vazia ou detectar um tipo de utilizador nulo? Atualmente, estou embutir-lo e eu preferiria uma solução mais elegante.

Foi útil?

Solução

AFAIK, você não pode verificar se o tipo definido pelo usuário foi inicializado antes de ser enviada como um argumento para uma função / procedimento.

Estou citando esse exemplo de VBA ajuda


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

campo

The County é inicializado com algum valor, que você pode usar um valor base. Se o usuário define este campo de forma explícita, isso significa que ele possui algum valor e permanece não inicializado, caso contrário.

para por exemplo.

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

Outras dicas

Além isempty (matriz) solução -

If IsNull(array) then 

   msgbox "array is empty"

End If

Tente:

dim v

if isempty(v) then
    msgbox "is empty"
end if
If myObjectVariable is Nothing

deve funcionar para detectar se um objeto foi inicializado.

Edit: "não é nada" funcionar, se for um objeto variável:

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

Se você precisa verificar se toda a matriz dinâmica de tipos personalizados foi inicializado ou não (não elemento apenas particular) em VBA, então isso pode não ser possível diretamente (como nenhum dos IsEmpty etc. funções de obras em tipos personalizados) . No entanto, você pode ser capaz de facilmente reestruturar seu programa para retornar um array de tipos personalizados de tamanho 0 para indicar que nada foi lido / inicializado.

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top