VBA 255个单元格中的最大字符数

我有一个简单的macros,它将Excel表中每行的内容添加到文本文件中,并在每个单元格值之间使用分隔符。 这是通过运行循环遍历每行的for循环完成的,并且在每次迭代结束时将值添加到Stringvariables的末尾。

每个ROW都可以有很多字符 – 我没有注意到任何问题。 但是,当单个单元格包含超过255个字符时,拼接失败。 我不确定是否是由于string限制(我不认为是这种情况),或者如果它是包含此限制的修剪,join或索引function,或者如果它是别的。 任何帮助获得更多的见解,将不胜感激。

有问题的行('R'是指行/迭代号码):

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

错误是:

运行时错误“13”:types不匹配

问题是与Application.Index 。 如何debugging?

让我们有第1行中的任何值的活动工作表,所有的小于255个字符。 但是在第一行中的一个单元格中,例如在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 

在使用已经存在的函数的不同组合之后,我发现当没有使用索引时macros完成没有问题。

最后,我决定将每个单元格的值添加到string的末尾,一次一个。 解:

 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