Доброго дня ! Уверен, что мой вопрос совсем простой для опытных, но я не могу понять, как правильно работает ComboBox. Я создал UserForm1, в котором есть один список ComboBox1, а в зависимости от выбора элемента из этого списка, формируется второй список ComboBox2, в котором тоже надо выбрать элемент из списка (адрес). После выбора двух элементов из списка форма должна передать выбранные значения в переменные и закрыться. Но у меня не закрывается, и даже не переходит далее строки с командой .Show. Подскажите, пожалуйста, как правильно описать в форме нужную мне последовательность действий ? Вот текст макроса:
[vba]
Код
Sub Auto_Open() Dim OOOName() As Variant, AdrMarket() As Variant, _ adr$, Firma As String, FirmCol As Integer, Last_row As Long
'================ дальше ничего не работает и из формы не выходит !!!
Firma = .ComboBox1.Text .Label1.Caption = .Label1.Caption & Firma FirmCol = Worksheets(3).Find(Firma).Column Last_row = Cells(Rows.Count, FirmCol).End(xlUp).Row AdrMarket = Worksheets(3).Range(FirmCol & 2, FirmCol & Last_row).Value .ComboBox2.List = AdrMarket adr = .ComboBox2.Value .Label2.Caption = UserForm1.Label2.Caption & adr End With Unload UserForm1 MsgBox Firma & ", " & adr End Sub
[/vba]
Во вложении - файл данных с телом макроса.
Доброго дня ! Уверен, что мой вопрос совсем простой для опытных, но я не могу понять, как правильно работает ComboBox. Я создал UserForm1, в котором есть один список ComboBox1, а в зависимости от выбора элемента из этого списка, формируется второй список ComboBox2, в котором тоже надо выбрать элемент из списка (адрес). После выбора двух элементов из списка форма должна передать выбранные значения в переменные и закрыться. Но у меня не закрывается, и даже не переходит далее строки с командой .Show. Подскажите, пожалуйста, как правильно описать в форме нужную мне последовательность действий ? Вот текст макроса:
[vba]
Код
Sub Auto_Open() Dim OOOName() As Variant, AdrMarket() As Variant, _ adr$, Firma As String, FirmCol As Integer, Last_row As Long
Serg5876, Перегруппировал и подправил ваш код, сделав его рабочим. Его нужно будет внести в два места: модуль Module1 и код формы UserForm1. Попасть в код формы можно, дабл-кликнув ее в дереве проекта VBA и нажав F7.
Код модуля Module1: [vba]
Код
Option Explicit
Public gFirma As String, gAdr As String
Sub Auto_Open() UserForm1.Show MsgBox gFirma & ", " & gAdr 'сообщение появится после закрытия формы "крестиком" End Sub
[/vba]
Код формы UserForm1: [vba]
Код
Option Explicit
Dim lbl1captionBegin As String, lbl2captionBegin As String
Private Sub UserForm_Initialize() Dim OOOName As Variant
lbl1captionBegin = Me.Label1.Caption & " " lbl2captionBegin = Me.Label2.Caption & " " End Sub
Private Sub ComboBox1_Change() Dim AdrMarket As Variant, adr$, Firma As String, FirmCol As Integer, Last_row As Long
Firma = Me.ComboBox1.Text Me.Label1.Caption = lbl1captionBegin & Firma gFirma = Firma
FirmCol = Worksheets(3).Cells.Find(Firma).Column Last_row = Cells(Rows.Count, FirmCol).End(xlUp).Row AdrMarket = Worksheets(3).Range(Cells(2, FirmCol), Cells(Last_row, FirmCol)).Value Me.ComboBox2.List = AdrMarket End Sub
Private Sub ComboBox2_Change() Dim adr$
adr = Me.ComboBox2.Value Me.Label2.Caption = lbl2captionBegin & adr gAdr = adr End Sub
[/vba] Подробно разберите пример. Посмотрите, какой фрагмент вашего кода - куда пристроился в моем.
Serg5876, Перегруппировал и подправил ваш код, сделав его рабочим. Его нужно будет внести в два места: модуль Module1 и код формы UserForm1. Попасть в код формы можно, дабл-кликнув ее в дереве проекта VBA и нажав F7.
Код модуля Module1: [vba]
Код
Option Explicit
Public gFirma As String, gAdr As String
Sub Auto_Open() UserForm1.Show MsgBox gFirma & ", " & gAdr 'сообщение появится после закрытия формы "крестиком" End Sub
[/vba]
Код формы UserForm1: [vba]
Код
Option Explicit
Dim lbl1captionBegin As String, lbl2captionBegin As String
Private Sub UserForm_Initialize() Dim OOOName As Variant
Апострофф, спасибо, я не знал)). Прописал закрытие по нажатию кнопки на форме - теперь все работает))
Gustav, очень признателен вам за такой подробный расклад ! Подробно разобрал ваш ответ, понял, что и как надо описывать. Попутно решил удалить локальные переменные adr и firma, а оставить только глобальные, которые будут сохранять свое значение после выхода из формы (удалил пока только одну firma). Добавил кнопку "Далее", чтобы не закрывать крестиком). Узнал для себя новшество: что можно к текущей форме обращаться с помощью Me)). Осталась только одна небольшая непонятка: почему-то при выборе в списке2 адреса (переменная adr) он не пишется в Label2, но зато корректно отображается при выводе через MsgBox. То есть переменной присвоено правильное значение, выбор осуществился в ComboBox2.
Me.Label2.Caption = lbl2captionBegin & adr ' Вот эта строчка почему-то не отображает на форме изменение Label2
Скрины и файл с формой прикрепил. Посмотрите, пожалуйста, на досуге)
Апострофф, спасибо, я не знал)). Прописал закрытие по нажатию кнопки на форме - теперь все работает))
Gustav, очень признателен вам за такой подробный расклад ! Подробно разобрал ваш ответ, понял, что и как надо описывать. Попутно решил удалить локальные переменные adr и firma, а оставить только глобальные, которые будут сохранять свое значение после выхода из формы (удалил пока только одну firma). Добавил кнопку "Далее", чтобы не закрывать крестиком). Узнал для себя новшество: что можно к текущей форме обращаться с помощью Me)). Осталась только одна небольшая непонятка: почему-то при выборе в списке2 адреса (переменная adr) он не пишется в Label2, но зато корректно отображается при выводе через MsgBox. То есть переменной присвоено правильное значение, выбор осуществился в ComboBox2.
Me.Label2.Caption = lbl2captionBegin & adr ' Вот эта строчка почему-то не отображает на форме изменение Label2
Скрины и файл с формой прикрепил. Посмотрите, пожалуйста, на досуге)Serg5876
Осталась только одна небольшая непонятка: почему-то при выборе в списке2 адреса (переменная adr) он не пишется в Label2
Причина банальна - не хватает длины метки Label2. Сделайте ее "прямоугольник" длиннее, растянув мышкой по горизонтали в конструкторе формы. Т.е. в переменные всё пишется, но не отображается из-за слишком короткого поля метки.
Осталась только одна небольшая непонятка: почему-то при выборе в списке2 адреса (переменная adr) он не пишется в Label2
Причина банальна - не хватает длины метки Label2. Сделайте ее "прямоугольник" длиннее, растянув мышкой по горизонтали в конструкторе формы. Т.е. в переменные всё пишется, но не отображается из-за слишком короткого поля метки.Gustav