无法将固定长度的字符串或用户定义类型分配给或强制为变量

Variant 只能接受具有有效 VarType 的数据分配。 此错误的原因及解决方案如下:

  • 您尝试传递固定长度字符串的数组。 如果将单个固定长度字符串分配给 Variant,它会强制为可变长度字符串,但不能对固定长度字符串数组执行此操作。

    如果必须传递数组,可使用循环将数组的各个元素分配给临时可变长度字符串数组的元素。 然后,可以将该数组分配给变量并使用 Erase 解除分配临时数组。 不过,不能使用 Erase 解除分配固定大小数组。

  • 您尝试将固定长度字符串或用户定义类型传递给 VarType 函数或 TypeName 函数。

    VarTypeTypeName 函数的参数必须是有效的 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 支持和反馈,获取有关如何接收支持和提供反馈的指南。