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

时间:2016-07-18 08:33:49

标签: excel vba

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

每个ROW中都可以包含很多字符 - 我没有发现任何问题。但是,当1个单个单元格包含超过255个字符时,连接将失败。我不确定是否是因为字符串限制(我不认为是这种情况),或者它是包含此限制的Trim,Join或Index函数,或者是否是其他内容。获得更多洞察力的任何帮助都将受到赞赏。

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

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

错误是:

运行时错误' 13':类型不匹配

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

在使用已经存在的函数的不同组合进行实验之后,我发现当不使用Index时,宏完成没有问题。

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

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