2016-07-18 38 views
0

我有一個簡單的宏,它將Excel表中每行的內容添加到文本文件中,每個單元格值之間都帶有分隔符。這是通過運行循環遍歷每行的for循環完成的,並且在每次迭代結束時將值添加到String變量的末尾。VBA 255 1個單元格中的最大字符數

每個ROW可以有很多字符 - 我沒有注意到任何問題。但是,如果單個單元格包含超過255個字符,則拼接失敗。我不確定是否由於字符串限制(我不認爲是這種情況),或者它是包含此限制的修剪,加入或索引函數,還是其他內容。任何幫助獲得更多的見解,將不勝感激。

在考慮中的線( 'R' 指的是行/迭代次數):

stringVariable = stringVariable & vbNewLine & Application.Trim(Join(Application.Index(Cells(R, "A").Resize(, 25).Value, 1, 0), "|")) 

錯誤是:

運行時錯誤 '13':類型匹配

回答

1

問題出在Application.Index。如何調試?

讓我們讓第1行中的任何值都具有活動工作表,所有值都少於255個字符。但是,在這種細胞在第1行中的一個,例如在C1,應該是配方:

=REPT("c",255) 

現在拆分代碼成部分:

Sub test() 

r = 1 

v2DArray = Cells(r, "A").Resize(, 25).Value 
index1DArray = Application.Index(v2DArray, 1, 0) 
joinString = Join(index1DArray, "|") 
stringVariable = Application.Trim(joinString) 

MsgBox stringVariable 

End Sub 

這將工作,直到您更改公式=REPT("c",256)。現在它將在Application.Index失敗。

取而代之的Application.Index,你可以做到以下幾點:

Sub test2() 

r = 1 

v2DArray = Cells(r, "A").Resize(, 25).Value 
ReDim v1DArray(LBound(v2DArray, 2) To UBound(v2DArray, 2)) As String 
For i = LBound(v2DArray, 2) To UBound(v2DArray, 2) 
    v1DArray(i) = v2DArray(1, i) 
Next 
joinString = Join(v1DArray, "|") 
stringVariable = Application.Trim(joinString) 

MsgBox stringVariable 

End Sub 
+0

哦,親愛的道歉,遲交的回覆 - 我確信我已經發出了回覆。在我們之間的幾個小時內,我設法找到了解決方案。我會在這裏發佈給其他人看。正如你最準確地確定的那樣,這個問題與索引函數有關。 – user3341082

0

使用的已經存在的功能,不同的組合試驗後,我發現,當不使用沒有問題的宏完成指標。

最後,我決定將每個單元格的值添加到字符串的末尾,一次一個。解決方案:

For i = 1 To numberOfColumns 
    If i < numberOfColumns Then 
     stringVariable = stringVariable & Trim(Cells(R, i).Value) & "|" 
    Else 
     stringVariable = stringVariable & Trim(Cells(R, i).Value) 
    End If 
Next i 
stringVariable = stringVariable & vbNewLine 
相關問題