使用包含值和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