Excel VBA: есть ли динамический массив, который можно использовать для дат? - PullRequest
0 голосов
/ 01 октября 2019

Я работаю над макросом Excel и хочу создать массив дат, а затем перебрать его, не зная, сколько дат будет добавлено. Я думал, что это будет просто, но я не могу заставить его работать.

Я попытался использовать коллекцию:

Dim DateArr As Collection
Dim d As Date

Set DateArr = New Collection

DateArr.Add (CDate("1/1/2019"))
DateArr.Add (CDate("2/2/2020"))

For Each d In DateArr
    sh.Cells(y, 27).Value = d
Next d

Но я получаю ошибку, которая говорит: «Для каждой управляющей переменной должен быть вариант или объект» и выделяет d в моем цикле. Разве даты не являются объектами?

Я также попробовал вариант:

Dim DateArr As Variant
DateArr.Add CDate("2/2/2020")
DateArr(1) = CDate("1/1/2019")

Но я не могу найти правильный синтаксис для добавления даты. Строка .Add выдает ошибку «Требуется объект», а строка DateArr (1) = выдает ошибку «Несоответствие типов».

Единственное, что работает, - это стандартный массив:

Dim DateArr() As Date
Dim y As Integer
ReDim DateArr(1 To 2) As Date

DateArr(1) = CDate("1/1/2019")
DateArr(2) = CDate("2/2/2020")

For y = LBound(DateArr) To UBound(DateArr)
    sh.Cells(y, 27).Value = DateArr(y)
Next y

Но я понятия не имею, сколько дат будет в массиве, поэтому не могу использовать что-либо статическое. Есть ли способ использовать тот же синтаксис без установки размеров?

Спасибо!

1 Ответ

0 голосов
/ 01 октября 2019

Даты - это варианты, а не объекты.

Метод добавления для коллекций. В своем коде вы предположили, что это функция, и добавили ненужные скобки, например,

DateArr.add cdate("1/1/2019")

Чтобы использовать For Each, тогда индексирующая (управляющая) переменная должна быть объектом или вариантом.

Таким образом, ваш первый пример должен работать нормально (другие ошибки не выдерживают), если вы dim d как вариант.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...