Заполнить комбинированный список списком в VBA EXCEL? - PullRequest
1 голос
/ 02 октября 2019

Здравствуйте. Я хочу заполнить массив значениями, а затем заполнить выпадающий список значениями массива.

Вот мой код:

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

For i = 1 To lastDay - firstDay

  initial_array(i) = Format(firstDay + 1, "d mmmm yyyy")

Next i

ComboBox3.List = initial_array

В основном я получил 1-й день ипоследний день месяца января из-за MyMounth = 1

Но не могу понять, что я делаю неправильно, когда пытаюсь заполнить массив

1 Ответ

2 голосов
/ 02 октября 2019

Вы не изменяете значения, которые вы помещаете в массив, вы помещаете 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.

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