使用包含值和string的数组的Excel VBAtypes13不匹配

我遇到运行时错误13“types不匹配错误”的问题。 我正在尝试采取多行代码,并将它们压缩成一行,每行放在一起。 问题是我的input是string和数字,这是我认为是造成这个问题。 我怎样才能解决这个问题?

Sub multRowsTo1Row() Dim inputRange As Variant Dim outputRange As Variant inputRange = Selection y = UBound(inputRange, 1) x = UBound(inputRange, 2) ReDim outputRange(1 To x * y) For j = 1 To y For i = 1 To x outputRange(i + y(j - 1)) = inputRange(j, i) Next i Next j Selection.Offset(0, x).Select End Sub 

正确地声明你的variablesDim x#, y# 。 这将解决你的不匹配错误,但会给你带来另一个错误,因为y(j - 1)期望一个数组。 添加乘法符号以使它是y * (j-1)并且您将避免该错误,但是在Selection.Rows.Count > 2的情况下可能会发生溢出,所以您可能还想添加一个检查那。

 Sub multRowsTo1Row() Dim inputRange As Variant Dim outputRange As Variant Dim y#, x# If selection.Rows.Count > 2 Then MsgBox "Invalid Selection!", vbCritical Exit Sub End If inputRange = Selection y = UBound(inputRange, 1) x = UBound(inputRange, 2) ReDim outputRange(1 To x * y) For j = 1 To y For i = 1 To x outputRange(i + y * (j - 1)) = inputRange(j, i) Next i Next j Selection.Offset(0, x).Select End Sub 

与往常一样,使用Option Explicit可以避免很多痛苦和故障排除,还可以将variables的大小设置为特定的Type 🙂

感谢大卫,我成功了。 这是我最终的代码。

 Sub multRowsTo1Row() 

''这需要一个多行数组并将每一行并排放置''目前将它放在最上面一行旁边。 这可以改变。

 Dim inputRange As Variant Dim outputRange As Variant Dim x#, y# inputRange = Selection y = UBound(inputRange, 1) x = UBound(inputRange, 2) ReDim outputRange(1 To x * y) For j = 1 To y For i = 1 To x outputRange(i + x * (j - 1)) = inputRange(j, i) Next i Next j 

'如果你想输出到别的地方,就改变它。 这会将输出粘贴到第一行最后一个条目的右侧。

  Selection.Offset(0, x).Resize(1, x * y).Select Selection = outputRange End Sub