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

投稿時間:2006/04/05(Wed) 16:52
投稿者名:けいな
Eメール:
URL :
タイトル:
動的配列がRedimされたかどうか
Dim test() as Integer
と動的配列を宣言して、プログラムのどこかでRedimされるものとします。

ここで、test()がRedimされたものなのかどうかを取得する方法をご存知な
かたいらっしゃいませんか?
つまり、一度Redimされたことのある配列なのかどうか。

過去にも同じ質問が出ているようですが、エラートラップするという結論
になっていました。
エラートラップはあまりスマートでは無い気がして・・・。
エラートラップは可読性がよくないのもありますし。

以上、よろしくお願いいたします!

投稿時間:2006/04/05(Wed) 17:05
投稿者名:YK
Eメール:
URL :
タイトル:
Re: 動的配列がRedimされたかどうか
こんにちは。
これで良いと思いますけど。

Bas.

Option Explicit

Public Declare Function SafeArrayGetDim Lib "oleaut32" _
   (ByVal pa As Long) As Long
  
Public Declare Sub GetMem4 Lib "msvbvm60" _
   (ByRef pa() As Any, ByRef Var As Long)

frm.

Private Sub Command1_Click()
    Dim a() As Long
    Dim L As Long

    ReDim a(4, 4)
    GetMem4 a, L
    If L <> 0 Then
        Debug.Print "次元は " & SafeArrayGetDim(L)
    Else
        Debug.Print "初期化されていません"
    End If
End Sub

投稿時間:2006/04/05(Wed) 17:39
投稿者名:けいな
Eメール:
URL :
タイトル:
Re^2: 動的配列がRedimされたかどうか
YKさん、ありがとうございます!!

なるほど・・・こんなAPI知らなかったです。
調べてみましたけど、あまり細かいことは分かりませんでした。
これは、指定された変数のアドレスを取ってくる・・・・?
とにかく、Redimされていないときに0が返ってくるのは確認できました。
それ以外のときに0が絶対に帰ってこないのならばこれで全然OKです。

ご協力、感謝します。