3

VBA Excel 2010 で問題が発生しました。'Enclosure' というカスタム クラスを作成し、このインスタンスを作成して辞書に追加しました。
次に、キーをループして、キーが追加されたことを確認します。
エンクロージャークラスを抽出するのに問題があります。抽出サブのコードは次のとおりです。

Sub AddEnclosureItem(sItemToAdd As String, ByRef rdEnclosures As Scripting.Dictionary, dDebug As Boolean)

Dim TempEnclosure As Enclosure ' hold enclosure we pull

TempEnclosure = rdEnclosures(1)

End Sub

コンパイルしようとすると、「オブジェクト変数またはブロック変数が設定されていません」というメッセージが表示されます

続行する方法について何か考えはありますか?アイテムが特定のオブジェクトのものであることを示す辞書を宣言できる場所を読んだことがありますが、2010年には機能しません。推測できるのはそれだけです。または、エンクロージャーアイテムが出てくるときにキャストする方法。

4

1 に答える 1

1

オブジェクトを変数に割り当てるときは、Setキーワードを使用する必要があります。Setisの反対でLet、値 (オブジェクトではない) を変数に代入するために使用されます。このLetキーワードはオプションであり、ほとんど誰も使用していません。

Setandがある理由Letは、ほとんどのオブジェクトがデフォルト プロパティを持っているためです。つまり、プロパティなしでオプションを参照すると、デフォルト プロパティに格納されている値が返されます。Valueプロパティは、共通のデフォルト プロパティです。これ

x = Range("A1")

これと同じです

x = Range("A1").Value

これと同じです

Let x = Range("A1").Value

どれでもかまいません (私は 2 番目の方が好みですが)。xが Double または String の場合は問題xありませんが、Range オブジェクト変数の場合は Set を使用する必要があります

Set x = Range("A1")

キーワードを省略した場合Set、VBA は必要であると見なし、(既定の)プロパティをLetに割り当てようとします。DoubleまたはStringをRangeオブジェクト変数に割り当てようとしているため、「オブジェクト変数またはブロックが設定されていません」というエラーが発生します。Valuex

カスタム クラス モジュールにはおそらく既定値がないため、これは問題になりません。しかし、そうです。デフォルト値がない場合でも、Set を使用してオブジェクトを参照する必要があります。

于 2013-02-28T14:49:16.770 に答える