2022/06/02

VBA 用 Application.Transpose 旋轉陣列的內容上限

越是趕工的時候就越容易踩坑...莫非定律完全正常發揮!

 Range(Cells(1, 2), Cells(StringDictionary.Count, 2)) = Application.Transpose(StringDictionaryItems)

                                                                                                            ↑兇手


昨天趕著要交東西出去,就在工具都寫好測好,要輸出正式的檔檔案的時候就出包了。

這段的作用是將陣列的內容轉向並貼到 Excel 中,在轉向時出錯了。執行的時候會顯示【型態不符】的錯誤,但是跟型態也沒有關係,所以一開始也怎樣都找不到問題@@

查的過程就不詳述,總之查出來是陣列中有一個資料大於 255 字(中文),它就掛掉了。我有想過是不是因為我偷懶沒有宣告的關係,但並不是,宣告成 Variant 也沒有用,一樣出錯。

網路上找到 Application.Transpose 都是在講陣列的長度,沒看到在講內容大小的。是說要在一格之中塞超過 255 個中文字確實也是很少見,那格我也是因為在測試介面的容納字元數才故意打了 290 字進去。總之就是做個紀錄,也不知道有誰會看到就是了 :P

220610 補充

後來寫了個小東西(如下)去測,結果英文也是 255 字是上限 @@,原理我就不研究了,不能控制內容大小的陣列就都還是用 for 迴圈去貼吧~

Sub Test()

    Dim arr(0) As Variant '宣告陣列的型態為任意

    For i = 1 To 1000000 '用迴圈增加文字內容的長度

        X = X & "A" '文字內容隨著迴圈執行的次數,每次增加一個 A 進去
        arr(0) = X '文字放入陣列
        Cells(1, 1) = Application.Transpose(arr) '用 Application.Transpose 轉向並放入儲存格

    Next
    '執行之後看跳出警告的時候 i  的數字就是上限囉~

End Sub



沒有留言:

張貼留言