将水平范围转换为数组并打印

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

我不能打印水平范围。这是令人惊讶的,因为我的代码可以完美地用于垂直范围。我有什么不明白的?

Sub hello()

    Dim i As Long

    Dim enumTitles As Variant

    Dim listTitles() As Variant

    ' enumTitles = ThisWorkbook.Worksheets("hello").Range("A1:A3")
    ' Works.

    enumTitles = ThisWorkbook.Worksheets("hello").Range("A1:C1")
    ' Doesn't work.

    listTitles = enumTitles

    For i = LBound(listTitles, 1) To UBound(listTitles, 1)

       Debug.Print (listTitles(i, 1))

       'Only one result is displayed. Not three.

    Next i

End Sub

我们的目标显然不是打印。它是为了重用它的值。

非常感谢你的帮助。

excel vba
2个回答
0
投票

Excel range()函数将返回二维数组到Excel中。enumTitles.

所以,当你运行它的行时,代码会打印第一行的所有值,但是列是二维数组的第二维,这就是为什么你只收到第一行的值(第一行的所有值)。

对于Columns Loop,你必须使用第二维,如下所示。

' Use len of 2nd dimension
For i = LBound(listTitles, 2) To UBound(listTitles, 2)
  ' Loop by columnt ID
  Debug.Print (listTitles(1, i))
Next i

1
投票

只要将数组中的元素连接起来就可以了。

Sub dural()
    enumTitles = ThisWorkbook.Worksheets("hello").Range("A1:C1")
    For Each a In enumTitles
        msg = msg & a & " "
    Next a
    Debug.Print (msg)
End Sub

enter image description here

EDIT#1:

为了得到一个 具体项目 我们必须知道它在数组中的位置,或者使用循环来找到它。 假设我们知道 测试版 是2nd 元素的水平数组。 我们将:

Debug.Print (enumTitles(1, 2))
© www.soinside.com 2019 - 2024. All rights reserved.