無効なオブジェクト変数が参照されています。 このエラーが発生する原因は複数あります。
型を指定せずに変数が宣言されました。 型を指定せずに変数が宣言されている場合、既定で
Object
型になります。たとえば、
Dim x
で宣言された変数は、Object;
型になり、Dim x As String
で宣言された変数は、String
型になります。ヒント
Option Strict
ステートメントでは、結果がObject
型となる暗黙の型指定が許可されません。 型を省略すると、コンパイル時エラーが発生します。 「Option Strict ステートメント」を参照してください。Nothing
に設定されているオブジェクトを参照しようとしています。正しく宣言されていない配列変数の要素にアクセスしようとしています。
たとえば、
products() As String
として宣言された配列では、配列products(3) = "Widget"
の要素を参照しようとした場合に、エラーがトリガーされます。 配列には要素がなく、オブジェクトとして扱われます。ブロックが初期化される前に、
With...End With
ブロック内のコードにアクセスしようとしています。With
ステートメントのエントリ ポイントを実行して、With...End With
ブロックを初期化する必要があります。
注意
Visual Basic または VBA の以前のバージョンでは、このエラーは、Set
キーワードを使用せずに変数に値を代入する (Set x = "name"
ではなく x = "name"
) ことによってもトリガーされていました。 Set
キーワードは、Visual Basic .Net では無効になりました。
このエラーを解決するには
ファイルの先頭に次のコードを追加して、
Option Strict
をOn
に設定します。Option Strict On
プロジェクトを実行すると、エラー一覧に、型を使用せずに指定された任意の変数についてのコンパイラ エラーが表示されます。
Option Strict
を有効にしない場合、コードで、型を使用せずに指定されたすべての変数 (Dim x As String
ではなくDim x
) を検索し、目的の型を宣言に追加します。Nothing
に設定されているオブジェクト変数を参照していないことを確認してください。 コードでキーワードNothing
を検索し、オブジェクトを参照した後までオブジェクトがNothing
に設定されないように、コードを修正します。配列変数にアクセスする前に、それらの次元が設定されていることを確認してください。 最初に配列を作成するときに次元を割り当てる (
Dim x() As String
ではなくDim x(5) As String
) か、または配列に最初にアクセスする前に、ReDim
キーワードを使用して、その次元を設定できます。With
ステートメントのエントリ ポイントを実行して、With
ブロックが初期化されていることを確認します。
関連項目
.NET