Невозможно присвоить или привести массив строк фиксированной длины или пользовательский тип к типу Variant

Типу данных Variant можно присвоить только значения допустимого типа VarType. Эта ошибка имеет следующие причины и способы решения:

  • Вы попытались передать массив строк фиксированной длины. Если одна строка фиксированной длины назначается Variant, она принуждаться к строке переменной длины, но это невозможно сделать для массива строк фиксированной длины.

    Чтобы описать массив, с помощью цикла присвойте элементы массива временному массиву из строк переменной длины. Затем присвойте массив переменной, и с помощью команды 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 и обратная связь.