固定長文字列の配列またはユーザー定義型の配列を、バリアント型の変数に割り当てることはできません

Variant は、有効な VarType が含まれるデータの割り当てのみを取ることができます。 このエラーの原因と解決策を次に示します。

  • 固定長文字列の配列を渡そうとしました。 1 つの固定長文字列が Variant に割り当てられている場合、その文字列は可変長文字列に強制的に変換されますが、この処理は、固定長文字列の配列に対しては実行されません。

    配列を渡す必要がある場合は、ループを使用して、配列の個別の要素を、可変長文字列の一時配列の要素に割り当てます。 その後、配列をバリアントに割り当てて、Erase を使用して一時配列の割り当てを解除できます。 ただし、Erase では、固定サイズの配列の割り当てを解除することはできません。

  • 固定長文字列または ユーザー定義型VarType 関数または TypeName 関数に渡そうとしました。

    VarType または TypeName 関数の 引数は、有効な Variant 型である必要があります。

  • ユーザー定義型を Variant 変数に渡そうとしました。 ユーザー定義型の 変数全体を Variant に直接割り当てることはできませんが、Array 関数を使用すると、ユーザー定義型の変数の個別の要素を Variant に割り当てることができます。 これにより、バリアントの配列が含まれる Variant が作成されます。 バリアントのこの配列における各要素の VarType は、ユーザー定義型の各要素の元の型に対応します。

  • 固定長文字列またはユーザー定義型の 配列を、Variant 引数を必要とするプロシージャ呼び出しで引数として渡そうとしました。 プロシージャが遅延バインドされている場合、つまり、実行時に呼び出しを行う必要があるときは必ず、すべての引数を Variant 型として渡す必要があります。 たとえば、次のコードにより、このエラーが発生します。

      Dim MyForm As Object    ' Because MyForm is Object, binding is late. 
      Set MyForm = New Form1 
      Dim StringArray(10) As String * 12 
      ' The next line generates the error. 
      MyForm.MyProc StringArray 
    

    文字列配列については、ループを使用して、配列の個別の各メンバーを、可変長文字列の一時配列に割り当てます。 その後、その配列を Variant に割り当てて、プロシージャに渡すことができます。 ユーザー定義型の配列については、Array 関数を使用して、ユーザー定義型の変数の個別の要素を Variant に割り当てることができます。 これにより、バリアントの配列が含まれる Variant が作成されます。 バリアントのこの配列における各要素の VarType は、ユーザー定義型の各要素の元の型に対応します。

詳細については、該当する項目を選択し、F1 キー (Windows の場合) または HELP (Macintosh の場合) を押してください。

サポートとフィードバック

Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。