0

我遇到了运行时错误 13“类型不匹配错误”的问题。我正在尝试采用多行代码并将它们压缩成一行,每一行并排放置。问题是我的输入是字符串和数字,我认为这是导致此问题的原因。我怎样才能解决这个问题?

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
4

2 回答 2

3

正确声明变量Dim x#, y#。这将修复您的 Mismatch 错误,但会出现另一个错误,因为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与往常一样,通过使用变量并将变量设置为特定的变量,可以避免很多痛苦和故障排除Type:)

于 2013-05-22T23:29:34.793 回答
0

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

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
于 2013-05-23T17:30:54.420 回答