Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
ComboBox в VBA, Код макроса в ComboBox-е возвращает на начало процедуры
 
Перечитал статью несколько раз. Отличная статья по нахождению ошибок. Сохранил ее себе. Спасибо.
Но я так и не понял почему строка 35 (Me.cb_регион.List = iArr) призванная присвоить Me.cb_регион.List  значение iArr после выполнения отправляет выполняться процедуру заново. И только при втором прохождение через данную строку код идет дальше.
Как бы принципиально я это запомню как аксиому и в будущем буду данные присвоения включать только в конце кода, учитывая повторное выполнение всего кода, но логика работы мне осталась не понятна.
Еще раз спасибо за уделенное время.
ComboBox в VBA, Код макроса в ComboBox-е возвращает на начало процедуры
 
Добрый день.
Ваш код работает. Огромное спасибо.
У меня вопрос, больше для общего развития.
Я анализировал построчное выполнение кода через F8 и после выполнения строки 35 (Me.cb_регион.List = iArr) выполняется 3 строка (Private Sub cb_регион_Change()) и по порядку в низ. При втором выполнении строки 35 уже заканчивается процедура, переходя на строку 36.
С чем связано такое поведение программы? Как этот эффект называется, чтобы о нем почитать, чтобы в будущем его учитывать.  
ComboBox в VBA, Код макроса в ComboBox-е возвращает на начало процедуры
 
Удалил все картинки из текста предыдущего сообщения и вставил их как вложения.
ComboBox в VBA, Код макроса в ComboBox-е возвращает на начало процедуры
 
Вставлял, вставлял картинки, а загрузилась ерунда. У Вас тоже в предыдущем моем сообщении нет картинок?
ComboBox в VBA, Код макроса в ComboBox-е возвращает на начало процедуры
 

Я про ячейку Combobox-а в UserForm. (Картинка №1)

После ввода нового региона. В ячейки выбрано значение Добавить новый (Картинка №2)

Приходится проваливаться в список, чтобы выбрать добавленный (Картинка №3)

Только после этого уже становится новый добавленный регион (Картинка №4).

Лишнее действие. Так вот и вопрос, можно, чтобы после добавления нового региона в форме сразу стоял добавленный регион (в моем случае Запад), а не "Добавить новый", чтобы не проваливаться в список.

Еще раз спасибо.

Изменено: КМВ888 - 16.08.2025 23:39:41
ComboBox в VBA, Код макроса в ComboBox-е возвращает на начало процедуры
 
Еще раз огромное спасибо.
Немного подкорректировал Ваш код:
1. Пока убрал строчку: "Unload Me"; так как у меня в этой UserForm еще есть другие Combobox-ы.
2. Добавил точку к:"Cells(CледПустаяСтрока, 1) = region"

Окончательный код:
Private Sub cb_регион_Change()

   If cb_регион.Text = "Добавить новый" Then
       'Unload Me

       Dim region  As String
       region = InputBox("Укажите название нового региона", "Регион")

       With ThisWorkbook.Worksheets("Списки_постоянные")

           Dim CледПустаяСтрока As Long
           CледПустаяСтрока = .Cells(.Rows.Count, 1).End(xlUp).Row + 1

           .Cells(CледПустаяСтрока, 1) = region
       End With

   End If

End Sub
Private Sub UserForm_Initialize()
   Dim iArr As Variant

   With ThisWorkbook.Worksheets("Списки_постоянные")
       iArr = .Range("A2", .Cells(.Cells(.Rows.Count, 1).End(xlUp).Row, 1)).Value
   End With

   With Me.cb_регион
       .List = iArr
   End With

End Sub

У меня есть вопрос:
После ввода нового региона значение в cb_регион остается Добавить новый регион, необходимо проваливаться в список, чтобы выбрать добавленный регион. А можно сделать, чтобы после добавления нового региона в ячейке уже был добавленный регион?

Еще раз спасибо.
ComboBox в VBA, Код макроса в ComboBox-е возвращает на начало процедуры
 
Спасибо буду разбираться в Вашем коде.
ComboBox в VBA, Код макроса в ComboBox-е возвращает на начало процедуры
 
Я новичок в VBA Excel-е, но хочу разобраться.
Создал UserForm c ComboBox-ом.
Написал для него код.
Хотел, чтобы если выбирается из списка в ComboBox-е "Добавить новый", через InputBox добавить новый элемент в список.
Столкнулся с проблемой, что после выполнения строки "Sheets("Списки_постоянные").Cells(CледПустаяСтрока, 1) = region" начинается выполнение заново по второму кругу без выполнения строки "MsgBox region". На втором круге проходит полностью.
Прошу подсказать почему опять уходит в начало процедуры.

Всем заранее спасибо.

Код:
Private Sub cb_регион_Change()
Dim region As String
   Dim СледПустаяСтрока As Long
   Dim wf As WorksheetFunction
   Dim a As Long
   
   Set wf = Application.WorksheetFunction
   
   
   If cb_регион.Text = "Добавить новый" Then
           region = InputBox("Укажите название нового региона", "Регион")
           CледПустаяСтрока = wf.CountA(Лист4.Range("A:A")) + 1
           Sheets("Списки_постоянные").Cells(CледПустаяСтрока, 1) = region
           MsgBox region
   End If
   
   
End Sub
Страницы: 1
Наверх