16
   Dim Result() As Variant

私のウォッチウィンドウでは、これは次のように表示されます

Expression | Value | Type
Result     |       | Variant/Variant()

以下を確認するにはどうすればよいですか。

   if Result is nothing then

また

   if Result is Not Set then

これは基本的に私が達成しようとしていることですが、最初のものは機能せず、2番目のものは存在しません。

4

5 に答える 5

10

イミディエイト ウィンドウでは、以下を使用できます。

?Result Is Nothing
?IsNull( Result )
?IsEmpty( Result )
?IsMissing( Result )

1 つ目は単に完全性のためです。Result はオブジェクトではないためResult Is Nothing、エラーがスローされます。次元化されていない配列を含む、Empty初期化されていないバリアント用です。.

(更新) いくつかの追加のチェックを行う際に、IsEmpty が宣言された配列 (Redim されているかどうかにかかわらず) で true を返すことは決してないことを発見しました。例外は 1 つだけです。私が見つけた唯一の例外は、配列が Public としてではなくモジュール レベルで宣言されている場合と、それをイミディエイト ウィンドウでチェックした場合のみです。

Missing関数またはサブルーチンに渡されるオプションの値の場合。を宣言することはできませんが、何も渡されない場合にtrue を返すOptional Foo() As Variantようなものを持つことができます。ParamArray Foo() As VariantIsMissing

したがって、配列が初期化されているかどうかを判断する唯一の方法は、以下をチェックするプロシージャを作成することです。

Public Function IsDimensioned(vValue As Variant) As Boolean
    On Error Resume Next
    If Not IsArray(vValue) Then Exit Function
    Dim i As Integer
    i = UBound(Bar)
    IsDimensioned = Err.Number = 0
End Function

ところで、このルーチン (または Jean-François Corbett によって投稿されたライブラリ) は、配列が次元化されてから消去された場合に false を返すことに注意してください。

于 2011-03-30T00:49:40.297 に答える
9

Chip Pearsonは、このようなことをテストするための一連の関数を含むmodArraySupportと呼ばれる便利なモジュールを作成しました。あなたの場合、あなたはを使用したいと思うでしょうIsArrayAllocated

Public Function IsArrayAllocated(Arr As Variant) As Boolean

この関数は、指定された配列が割り当てられている(空ではない)かどうかを示すTRUEまたはFALSEを返します。配列のTRUEを返します。静的配列、またはRedimステートメントで割り当てられた動的配列です。配列がまだReDimでサイズ設定されていない動的配列であるか、Eraseステートメントで割り当てが解除されている場合はFALSEを返します。この関数は基本的にArrayIsEmptyの反対です。例えば、

Dim V() As Variant
Dim R As Boolean
R = IsArrayAllocated(V)  ' returns false
ReDim V(1 To 10)
R = IsArrayAllocated(V)  ' returns true

使用される手法は、基本的に配列の境界をテストすることです(@Tim Williamsによって提案されています)が、追加の落とし穴があります。

即時ウィンドウでテストするには:

?IsArrayAllocated(Result)

ウォッチウィンドウでのテスト:これを行う方法はいくつかあります。たとえば、R[ウォッチタイプ]にウォッチを追加し、[値が変更されたときに中断]を選択します。

于 2011-03-30T07:50:50.323 に答える
-1

LBound配列の を確認します。エラーが発生した場合は、初期化されていません。

于 2011-03-30T01:24:33.837 に答える