Я работаю над макросом 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
Но я получаю сообщение об ошибке «Для каждой управляющей переменной должно быть значение Variant или Object» и выделяет 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
Но я понятия не имею, сколько дат будет в массиве, поэтому не могу использовать что-либо статичное. Есть ли способ использовать тот же синтаксис без установки размеров?
Спасибо!
d
на вариант. - person Brian M Stafford   schedule 01.10.2019sh.Cells(y, 27).Value = Format(DateArr(y),"yyyy-mm-dd")
. Как вы будете вытягивать информацию? Вручную добавлять даты в код, вытягивать из диапазона на листе и т. д.? - person Cyril   schedule 01.10.2019dim arr as variant
//arr = range(cells(1,1),cells(lr,3)).value
. Вы должны сохранить исходную дату как дату, независимо от добавления этих данных в другом месте или использования их в формулах. Вам не нужно зацикливаться для создания массива, если только вы не хотите создать словарь для уникальных дат. - person Cyril   schedule 02.10.2019