分享方式:


無法將固定長度字串或使用者定義類型的陣列指派或強制轉送至 Variant

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 支援與意見反應