[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2004/10/27(Wed) 14:53
投稿者名:East
URL :
タイトル:
ユーザー定義型配列のErase
はじめまして。
ユーザー定義型の配列を使用しています。
この変数をEraseしてあるかどうかを判断したいときはどうすればよいのでしょうか?

オブジェクトなら Is Nothing
Variantなら VarType() = vbNull
などのように判断することはできないのでしょうか?

判断するメソッドを作成して
そのなかにErrが起きているか判断するとか、そんな方法しか思いつきません。

以上 よろしくお願いします

投稿時間:2004/10/28(Thu) 12:07
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re: ユーザー定義型配列のErase
ちなみに、SafeArrayAllocDescriptor APIを使うと、
LBound/UBoundしてもエラーにならない「空の配列」を作れたりします。
(Eraseされてしまえば、やはりLBoundでエラーになってしまいますけれどね)


> この変数をEraseしてあるかどうかを判断したいときはどうすればよいのでしょうか?
一応、APIで判定する方法もありますが…エラートラップするのが簡単かと思います。

Option Explicit

Private Type MyUserDefinedType
    X As Long
End Type

Private Declare Sub RtlMoveMemory Lib "kernel32" _
    (ByRef Destination As Long, _
     ByRef Source() As MyUserDefinedType, _
     Optional ByVal Length As Long = 4&)

Private Sub Form_Load()
    Dim UDT() As MyUserDefinedType
    Dim L As Long

    RtlMoveMemory L, UDT
    Debug.Print IIf(L = 0, "初期化前", "初期化済")

    ReDim UDT(2)
    RtlMoveMemory L, UDT
    Debug.Print IIf(L = 0, "初期化前", "初期化済")
    
    Erase UDT
    RtlMoveMemory L, UDT
    Debug.Print IIf(L = 0, "初期化前", "初期化済")
End Sub