如果分配了 1 个或多个值,则获取单元格的值

问题描述 投票:0回答:2

如果我的 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 个值时,这会引发错误。

arrays excel vba variant
2个回答
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

1
投票

声明

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
© www.soinside.com 2019 - 2024. All rights reserved.