如果我的 A 列和 B 列中的 SHEET1 单元格的值为 2 或更多,并且使用以下代码,我该如何修复此问题:(我没有任何问题)
Dim LineNumbers() As Variant
LineNumbers = Range("A1", ActiveSheet.Cells(Rows.Count, "A").End(xlUp))
Dim Lengths() As Variant
Lengths = Range("B1", ActiveSheet.Cells(Rows.Count, "B").End(xlUp))
但是,如果 A 列和 B 列上的行只有 1 个值,则会引发错误。我在这里读到,如果我使用usedrange、CountA和xldown,不建议获取最后使用的行,因为它会导致结果出现一些错误,那么上面的代码非常有效。不幸的是,当我的 LineNumbers 和 Lengths 中只有 1 个值时,这会引发错误。
Dim LineNumbers As Variant
Dim Lengths As Variant
With ActiveSheet
With .Range("A1", .Cells(.Rows.Count, "A").End(xlUp))
If .Rows.Count = 1 Then ' one cell
ReDim LineNumbers(1 To 1, 1 To 1): LineNumbers(1, 1) = .Value
Else ' multiple cells
LineNumbers = .Value
End If
End With
With .Range("B1", .Cells(.Rows.Count, "B").End(xlUp))
If .Rows.Count = 1 Then ' one cell
ReDim Lengths(1 To 1, 1 To 1): Lengths(1, 1) = .Value
Else ' multiple cells
Lengths = .Value
End If
End With
End With
声明
Dim LineNumbers() As Variant
您的代码告诉 VBA 它必须保留一个数组。任何内容的数组(字符串、数字、对象)...
那么,
LineNumbers = Range("A1", ActiveSheet.Cells(Rows.Count, "A").End(xlUp))
与LineNumbers = Range("A1","A1")
或LineNumbers = Range("A1")
类似。这样的范围无法返回数组(来自单个单元格)。
但是,如果您更改声明:
Dim LineNumbers As Variant
它将不再返回数组,但不强制为数组,它将获取单元格值。
请参阅下一个改编代码:
Dim LineNumbers As Variant
LineNumbers = Range("A1", ActiveSheet.cells(rows.count, "A").End(xlUp))
If IsArray(LineNumbers) Then 'for the case of only one cell
Debug.Print LineNumbers
Else
Dim El As Variant
For Each El In LineNumbers
Debug.Print El
Next El
End If