我有一个简单的宏,它将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':类型不匹配
答案 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