Вы не изменяете значения, которые вы помещаете в массив, вы помещаете Format(firstDay + 1, "d mmmm yyyy")
в массив несколько раз. Это может быть то, что вы ищете:
For i = 0 To lastDay - firstDay
initial_array(i) = Format(firstDay + i + 1, "d mmmm yyyy")
Next i
Кроме того, массивы начинаются с 0, поэтому вы должны начать заполнять ваш массив с индексом 0.
РЕДАКТИРОВАТЬ: Извините, я полностью пропустилОбъявление массива, попробуйте этот исправленный код:
Dim i As Integer
Dim arr As Variant
Dim firstDay As Date
Dim MyMounth As Long
Dim initial_array As Variant
Dim lastDay As Date
MyMounth = 1
firstDay = DateSerial(Year(Date), MyMounth, 1)
lastDay = DateAdd("m", 1, firstDay) - 1
ReDim initial_array(lastDay - firstDay)
For i = 0 To lastDay - firstDay
initial_array(i) = Format(firstDay + i, "d mmmm yyyy")
Next i
ComboBox3.List = initial_array
Это поместит в массив все значения, включая firstDay
и lastDay
.
РЕДАКТИРОВАТЬ: Объяснение: Перед заполнением массиваваши значения, вам нужно установить длину массива равной количеству ваших значений (поскольку массивы начинаются с 0, если вы хотите поместить в него числа от 11 до 15, ваш массив будет выглядеть так (index: value):0: 11 - 1: 12 - 2: 13 - 3: 14 - 4: 15. Таким образом, ваш массив имеет длину 5, но последний индекс равен 4). Строка ReDim initial_array(lastDay - firstDay)
повторно инициализирует массив с длиной (lastDay - firstDay)
.
Далее, циклически перебирая массив с циклом For
и заполняя его значениями, которые вам не нужно только увеличиватьиндекс массива, но и ваши значения. Выражение Format(firstDay + 1, "d mmmm yyyy")
не меняется, поскольку firstDay
никогда не меняется. Поэтому каждый раз, когда мы увеличиваем i
на 1, мы также увеличиваем значение, которое вы помещаете в массив, на 1, добавляя i
.