Страницы: 1
RSS
Создать цикл перебора нескольких значений из Combobox, VBA
 
Добрый день имеются следующие значения в Combobox
ComboBox1
Код
    .List = Array("январь", "февраль", "2 мес.", "март", "3 мес.", "апрель", "4 мес.", "май", "5 мес.", "июнь", "6 мес.", "июль", "7 мес.", "август", "8 мес.", "сентябрь", "9 мес.", "октябрь", "10 мес.", "ноябрь", "11 мес.", "декабрь", "12 мес.")
Пользователь может выбрать один из месяцев например "МАРТ"
необходимо сделать цикл чтобы макрос обработал "март" потом "3 мес" потом "апрель". То есть выбранное значение плюс еще два следующих.
Я предполагал что если добавить в код  цикл в виде, произойдет чудо  и все заработает, чуда не было. Прошу опытный взгляд для решения тривиальной задачи
Код
 For p = 0 To 2                        CombBox1.ListIndex = ComboBox1.ListIndex + p      

произойдет чудо  и все заработает, чуда не было. Прошу опытный взгляд для решения тривиальной задачи

Код
 otbor = FuncOtbor(kategorii(j), Workbooks(wkbName).Sheets(ComboBox1.Value).Cells(k, 33), Workbooks(wkbName).Sheets(ComboBox1.Value).Cells(k, 45))
                    If otbor Then
                       For p = 0 To 2
                       CombBox1.ListIndex = ComboBox1.ListIndex + p
                       Cells(AnRows, 2) = Workbooks(wkbName).Sheets(ComboBox1.Value).Cells(k, 1)
                        If AnRows = AnRowsKat + 1 Then
                            Call FillRow("B", AnRows, DiapazonVPR)
                            Call ColorTheme(AnRows)
                        End If
                        Range("A" & CStr(AnRows)).Interior.Pattern = xlLightUp ' штриховка первого столбца заливка
                        AnRows = AnRows + 1
                     Next
                    End If
                End If

то есть задача сводится к тому что необходимо изменить значения которое будет выдавать комбо бокс.
Если выбрали второе значение "Февраль", то в  CombBox1.ListIndex  будет хранится "1", мы должны повысить значение на "+1" при следующем проходе получим
CombBox1.ListIndex = 2
Вот тут я не пойму как  после того что мы получили вот это CombBox1.ListIndex = 2  получить с ComboBox1.Value = "март"
Изменено: Kentavrik7 - 22.11.2018 16:29:34
 
Kentavrik7,приложите файл с образцом данных и с Вашим комбобоксом. Может, Ваша задача решится другим способом. Например, на первый взгляд, мне кажется, что список для комбобокса можно хранить на листе, тогда и заморочек типа "CombBox1.ListIndex" можно будет избежать  :)  
 
Kentavrik7,  столько текста с описанием вашего каламбура, а так и непонятно что нужно на выходе.
Плюс название темы совсем ни о чем. Задача ведь не в цикле, насколько я понимаю.
 
Цитата
Kentavrik7 написал:
необходимо сделать цикл чтобы макрос обработал "март" потом "3 мес" потом "апрель". То есть выбранное значение плюс еще два следующих.
Что следует понимать под обработкой? И покажите Ваш файл-пример - не рисовать же нам форму с этим ComboBox.
 
В целом метод не поддержу, так как он меняет значение комбо. У вас надо попроавить
Код
CombBox1.ListIndex = ComboBox1.ListIndex + sgn(p)

Ну или
Код
For p = CombBox1.ListIndex To CombBox1.ListIndex+ 2
CombBox1.ListIndex =  p

Но, как  уже сказал , значение  комбо останется последним и его или надо вернуть, предварительно запомнив выбор, или менять подход.
Изменено: БМВ - 23.11.2018 08:13:05
По вопросам из тем форума, личку не читаю.
 
Цитата
_Igor_61 написал:
что список для комбобокса можно хранить на листе
нет на листе не получитсмя
Цитата
Dima S написал:
столько текста с описанием вашего каламбура, а так и непонятно что нужно на выходе.
Нужно чтобы при выборе значения с комбобокса можно было прогнать по всему коду сначала его, потом следующее значение потом следующее.
Можно организовать более проще конечно (я не знаю как это кодом написать)
Изменить массив на :
.List = Array("1 квартал", "2 квартал", "3 квартал", "4 квартал")

и при выборе в комбобоксе пользователем например "1 квартал", пройти циклом по коду, сначала "январь" затем "февраль" потом "март".
Вопрос по такому варианту следующий как организовать это?
Я как понимаю через CombBox1.ListIndex могу выдернуть число от 0 до 3 и через "if" пройти, но тоже вопрос как пройти по трем месяцам? или можно как то по другому?
БМВ, спасибо, если вот так как я выше описал может получится более лаконично все организовать
 
Прочитал несколько раз , так и не понял что нужно сделать. Приложите файл пример с кодом который есть, и вкратце что вы хотите иметь на выходе. Только не нужно очередной раз писать ComboBox.ListIndex (а то уже глаза мозолит).
"Все гениальное просто, а все простое гениально!!!"
 
Kentavrik7,  я вам написал, как сделать чтоб  работало.
По вопросам из тем форума, личку не читаю.
 
Цитата
Kentavrik7: Изменить массив на :.List = Array("1 квартал", "2 квартал", "3 квартал", "4 квартал")и при выборе в комбобоксе пользователем например "1 квартал", пройти циклом по коду, сначала "январь" затем "февраль" потом "март". Вопрос по такому варианту следующий как организовать это?
ответ по цитате, не вникая в суть (вдруг угадал): смотрите, если массивы равны, то второго цикла не нужно, поскольку, зная индекс выбранного элемента, например arr_1(5), мы сможем вытянуть по нему (индексу) соответствующий элемент другого массива, например arr_2(5)
Изменено: Jack Famous - 23.11.2018 10:09:50
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Если на листе/форме размещен ComboBox1, то код в модуле этого же листа/формы:
Код
' Выполнить 1 раз - заполнить комбобокс
Sub Init()
  Me.ComboBox1.List = Array("январь", "февраль", "2 мес.", "март", "3 мес.", "апрель", "4 мес.", "май", "5 мес.", "июнь", "6 мес.", "июль", "7 мес.", "август", "8 мес.", "сентябрь", "9 мес.", "октябрь", "10 мес.", "ноябрь", "11 мес.", "декабрь", "12 мес.")
End Sub
  
' После выбора значения в комбобоксе этот код запишет в a() 3 последовательных значения
Sub Test()
  Dim a(1 To 3)
  With Me.ComboBox1
    If .ListIndex < 0 Then Exit Sub
    a(1) = .Value
    On Error Resume Next ' <-- на случай выбора "декабрь" или "12 мес."
    a(2) = .List(.ListIndex + 1)
    a(3) = .List(.ListIndex + 2)
  End With
  Debug.Print a(1), a(2), a(3)
End Sub
Изменено: ZVI - 23.11.2018 10:20:02
 
Kentavrik7, а если выбрали предпоследний, последний - что тогда?
 
ZVI,спасибо большое буду пробовать)
Страницы: 1
Наверх