Преобразование горизонтального диапазона в массив и печать - PullRequest
0 голосов
/ 22 апреля 2020

Я не могу напечатать горизонтальный диапазон. Это удивительно, потому что мой код прекрасно работает для вертикального диапазона. Что я не понял?

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

Цель - не печатать явно. Это повторное использование его значений.

Большое спасибо за вашу помощь.

Ответы [ 2 ]

1 голос
/ 22 апреля 2020

Просто объедините элементы массива:

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

РЕДАКТИРОВАТЬ # 1:

Чтобы получить конкретный c элемент в массиве, мы должны либо узнать его позицию, либо использовать al oop, чтобы найти его. Скажем, мы знаем, что beta является 2 и элементом в горизонтальном массиве. Мы бы:

Debug.Print (enumTitles(1, 2))
0 голосов
/ 22 апреля 2020

Функция Excel range () вернет двумерный массив в enumTitles .

Итак, когда вы запускаете его для строк, код выводит все значения 1-й строки. Но столбцы - это второе измерение двумерного массива, поэтому вы получаете только 1-е значение (все значения 1-го ряда снова).

Для столбцов L oop вы должны использовать 2-е измерение, как показано ниже:

' 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...