Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Как в ComboBox выбрать элемент и закрыть его - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как в ComboBox выбрать элемент и закрыть его (Макросы/Sub)
Как в ComboBox выбрать элемент и закрыть его
Serg5876 Дата: Вторник, 23.01.2024, 18:10 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 0% ±

2007
Доброго дня ! Уверен, что мой вопрос совсем простой для опытных, но я не могу понять, как правильно работает 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

OOOName = Worksheets(3).Range("B1:G1").Value
OOOName = WorksheetFunction.Transpose(OOOName)
With UserForm1
.ComboBox1.List = OOOName
.Show

'================ дальше ничего не работает и из формы не выходит !!!

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]

Во вложении - файл данных с телом макроса.
К сообщению приложен файл: forma.xlsm (22.4 Kb)


Сергей
 
Ответить
СообщениеДоброго дня ! Уверен, что мой вопрос совсем простой для опытных, но я не могу понять, как правильно работает 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

OOOName = Worksheets(3).Range("B1:G1").Value
OOOName = WorksheetFunction.Transpose(OOOName)
With UserForm1
.ComboBox1.List = OOOName
.Show

'================ дальше ничего не работает и из формы не выходит !!!

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]

Во вложении - файл данных с телом макроса.

Автор - Serg5876
Дата добавления - 23.01.2024 в 18:10
Апострофф Дата: Вторник, 23.01.2024, 22:24 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 449
Репутация: 124 ±
Замечаний: 0% ±

Excel 1997
Serg5876, все необходимые действия (в том числе и закрытие) прописывайте в самой форме (в её событиях).
 
Ответить
СообщениеSerg5876, все необходимые действия (в том числе и закрытие) прописывайте в самой форме (в её событиях).

Автор - Апострофф
Дата добавления - 23.01.2024 в 22:24
Gustav Дата: Среда, 24.01.2024, 02:19 | Сообщение № 3
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2748
Репутация: 1137 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
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

    OOOName = Worksheets(3).Range("B1:G1").Value
    OOOName = WorksheetFunction.Transpose(OOOName)
    Me.ComboBox1.List = OOOName
    
    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]
Подробно разберите пример. Посмотрите, какой фрагмент вашего кода - куда пристроился в моем.


МОИ: Ник, Tip box: 41001663842605
 
Ответить
Сообщение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

    OOOName = Worksheets(3).Range("B1:G1").Value
    OOOName = WorksheetFunction.Transpose(OOOName)
    Me.ComboBox1.List = OOOName
    
    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]
Подробно разберите пример. Посмотрите, какой фрагмент вашего кода - куда пристроился в моем.

Автор - Gustav
Дата добавления - 24.01.2024 в 02:19
Serg5876 Дата: Среда, 24.01.2024, 12:40 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 0% ±

2007
Апострофф, спасибо, я не знал)). Прописал закрытие по нажатию кнопки на форме - теперь все работает))

Gustav, очень признателен вам за такой подробный расклад ! :) Подробно разобрал ваш ответ, понял, что и как надо описывать. Попутно решил удалить локальные переменные adr и firma, а оставить только глобальные, которые будут сохранять свое значение после выхода из формы (удалил пока только одну firma). Добавил кнопку "Далее", чтобы не закрывать крестиком). Узнал для себя новшество: что можно к текущей форме обращаться с помощью Me)).
Осталась только одна небольшая непонятка: почему-то при выборе в списке2 адреса (переменная adr) он не пишется в Label2, но зато корректно отображается при выводе через MsgBox. То есть переменной присвоено правильное значение, выбор осуществился в ComboBox2.

Me.Label2.Caption = lbl2captionBegin & adr ' Вот эта строчка почему-то не отображает на форме изменение Label2

Скрины и файл с формой прикрепил.
Посмотрите, пожалуйста, на досуге)
К сообщению приложен файл: 7104512.jpg (47.5 Kb) · 2517276.jpg (42.9 Kb) · 5965909.xlsm (24.0 Kb)


Сергей

Сообщение отредактировал Serg5876 - Среда, 24.01.2024, 12:44
 
Ответить
СообщениеАпострофф, спасибо, я не знал)). Прописал закрытие по нажатию кнопки на форме - теперь все работает))

Gustav, очень признателен вам за такой подробный расклад ! :) Подробно разобрал ваш ответ, понял, что и как надо описывать. Попутно решил удалить локальные переменные adr и firma, а оставить только глобальные, которые будут сохранять свое значение после выхода из формы (удалил пока только одну firma). Добавил кнопку "Далее", чтобы не закрывать крестиком). Узнал для себя новшество: что можно к текущей форме обращаться с помощью Me)).
Осталась только одна небольшая непонятка: почему-то при выборе в списке2 адреса (переменная adr) он не пишется в Label2, но зато корректно отображается при выводе через MsgBox. То есть переменной присвоено правильное значение, выбор осуществился в ComboBox2.

Me.Label2.Caption = lbl2captionBegin & adr ' Вот эта строчка почему-то не отображает на форме изменение Label2

Скрины и файл с формой прикрепил.
Посмотрите, пожалуйста, на досуге)

Автор - Serg5876
Дата добавления - 24.01.2024 в 12:40
Gustav Дата: Среда, 24.01.2024, 13:54 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2748
Репутация: 1137 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
Осталась только одна небольшая непонятка: почему-то при выборе в списке2 адреса (переменная adr) он не пишется в Label2

Причина банальна - не хватает длины метки Label2. Сделайте ее "прямоугольник" длиннее, растянув мышкой по горизонтали в конструкторе формы. Т.е. в переменные всё пишется, но не отображается из-за слишком короткого поля метки.


МОИ: Ник, Tip box: 41001663842605
 
Ответить
Сообщение
Осталась только одна небольшая непонятка: почему-то при выборе в списке2 адреса (переменная adr) он не пишется в Label2

Причина банальна - не хватает длины метки Label2. Сделайте ее "прямоугольник" длиннее, растянув мышкой по горизонтали в конструкторе формы. Т.е. в переменные всё пишется, но не отображается из-за слишком короткого поля метки.

Автор - Gustav
Дата добавления - 24.01.2024 в 13:54
Serg5876 Дата: Четверг, 25.01.2024, 12:25 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 0% ±

2007
Gustav, действительно, причина банальна !)))) Спасибо !


Сергей
 
Ответить
СообщениеGustav, действительно, причина банальна !)))) Спасибо !

Автор - Serg5876
Дата добавления - 25.01.2024 в 12:25
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как в ComboBox выбрать элемент и закрыть его (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!