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

Вход

Регистрация

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

 

= Мир MS Excel/Выпадающий список в UserForm - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Выпадающий список в UserForm (Макросы/Sub)
Выпадающий список в UserForm
lebensvoll Дата: Среда, 20.07.2016, 09:32 | Сообщение № 1
Группа: Проверенные
Ранг: Старожил
Сообщений: 1002
Репутация: 30 ±
Замечаний: 0% ±

Excel 2010
Доброе утро уважаемые форумчане!!!
В виду того что мои задумки ПРОВАЛИВАЮТСЯ из-за финансирования со стороны руководства ((((( а также личных сбережений нет для того чтоб осуществить задуманное (((((
Поднимал темы: My WebPage помогали люди My WebPage всем спасибо огромное за это!!!
Сегодня ночью нашел темы которые как раз таки касающиеся моей задумки My WebPage
My WebPage
Скачав данные файлы сидел разбирался как это все работает (((( что то получилось (это вызов формы при нажатии кнопки добавить запись на листе Журнал прихода) Далее столкнулся с трудностью (((
На UserForm1 при использования кода из тем для ComboBox2 (чтоб получился выпадающий список) выдает ошибки и ругается (((((
[vba]
Код
Private Sub ComboBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim LastRow2 As Long
Dim Fam As String
Fam = Me.ComboBox2.Value
   With Sheets("Поставщик")
      LastRow2 = .Cells(Rows.Count, 3).End(xlUp).Row
      If Fam <> "" Then
         If Application.WorksheetFunction.CountIf(Range("Поставщик"), Fam) = 0 Then
            .Cells(LastRow2 + 1, 3) = Fam
         End If
      End If
   End With
   Call UserForm_Activate
End Sub
[/vba]
Не могли бы вы его поправить (((( что я сделал не так ((((. По аналогии я потом проделаю данную процедуру для других ComboBox.
СПАСИБО ОГРОМНОЕ ЗА ПОНИМАНИЕ И ПОМОЩЬ!!!
К сообщению приложен файл: _2-.xlsm (87.1 Kb)


Кто бы ты ни был, мир в твоих руках
 
Ответить
СообщениеДоброе утро уважаемые форумчане!!!
В виду того что мои задумки ПРОВАЛИВАЮТСЯ из-за финансирования со стороны руководства ((((( а также личных сбережений нет для того чтоб осуществить задуманное (((((
Поднимал темы: My WebPage помогали люди My WebPage всем спасибо огромное за это!!!
Сегодня ночью нашел темы которые как раз таки касающиеся моей задумки My WebPage
My WebPage
Скачав данные файлы сидел разбирался как это все работает (((( что то получилось (это вызов формы при нажатии кнопки добавить запись на листе Журнал прихода) Далее столкнулся с трудностью (((
На UserForm1 при использования кода из тем для ComboBox2 (чтоб получился выпадающий список) выдает ошибки и ругается (((((
[vba]
Код
Private Sub ComboBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim LastRow2 As Long
Dim Fam As String
Fam = Me.ComboBox2.Value
   With Sheets("Поставщик")
      LastRow2 = .Cells(Rows.Count, 3).End(xlUp).Row
      If Fam <> "" Then
         If Application.WorksheetFunction.CountIf(Range("Поставщик"), Fam) = 0 Then
            .Cells(LastRow2 + 1, 3) = Fam
         End If
      End If
   End With
   Call UserForm_Activate
End Sub
[/vba]
Не могли бы вы его поправить (((( что я сделал не так ((((. По аналогии я потом проделаю данную процедуру для других ComboBox.
СПАСИБО ОГРОМНОЕ ЗА ПОНИМАНИЕ И ПОМОЩЬ!!!

Автор - lebensvoll
Дата добавления - 20.07.2016 в 09:32
Roman777 Дата: Среда, 20.07.2016, 09:50 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
lebensvoll, оно у Вас ругается на:
[vba]
Код
Call UserForm_Activate
[/vba]
что за процедуру Вы хотите вызвать на выходе из КомбоБокса?
на сколько я заметил UserForm1 и UserForm2 у Вас в файле, других нет.


Много чего не знаю!!!!

Сообщение отредактировал Roman777 - Среда, 20.07.2016, 09:51
 
Ответить
Сообщениеlebensvoll, оно у Вас ругается на:
[vba]
Код
Call UserForm_Activate
[/vba]
что за процедуру Вы хотите вызвать на выходе из КомбоБокса?
на сколько я заметил UserForm1 и UserForm2 у Вас в файле, других нет.

Автор - Roman777
Дата добавления - 20.07.2016 в 09:50
nilem Дата: Среда, 20.07.2016, 09:50 | Сообщение № 3
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
В модуле формы UserForm1 нет процедуры UserForm_Activate, поэтому Call UserForm_Activate производит ошибку
Просто уберите эту строку


Яндекс.Деньги 4100159601573
 
Ответить
СообщениеВ модуле формы UserForm1 нет процедуры UserForm_Activate, поэтому Call UserForm_Activate производит ошибку
Просто уберите эту строку

Автор - nilem
Дата добавления - 20.07.2016 в 09:50
_Boroda_ Дата: Среда, 20.07.2016, 09:57 | Сообщение № 4
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16666
Репутация: 6478 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
И еще
1. LastRow2 нужно искать не по третьему столбцу листа Поставщик, а по второму
2. В файле отсутствует имя "Сотрудники", по которому собираемся считать CountIf


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеИ еще
1. LastRow2 нужно искать не по третьему столбцу листа Поставщик, а по второму
2. В файле отсутствует имя "Сотрудники", по которому собираемся считать CountIf

Автор - _Boroda_
Дата добавления - 20.07.2016 в 09:57
lebensvoll Дата: Среда, 20.07.2016, 13:03 | Сообщение № 5
Группа: Проверенные
Ранг: Старожил
Сообщений: 1002
Репутация: 30 ±
Замечаний: 0% ±

Excel 2010
Roman777, Да вы правы!!! При проверке данного кода (((( именно за нее мне и говорит что это не в тему????
Цитата
что за процедуру Вы хотите вызвать на выходе из КомбоБокса?

Если бы я понимал коды (((( я бы сказал что намереваюсь вызвать данным кодом (((( а так я данный код слямзил с тем указанных выше. Где после исследования данных кодов я понял что для того чтоб появился выплывающий список в данном КомбоБоксе2...
nilem, я вас понял понял спасибо!!!
_Boroda_, прошу прощения я наверное был не внимателен когда не исправил
Цитата
В файле отсутствует имя "Сотрудники"
на "Поставщик" (((( изменю обязательно!!! А также спасибо что подсказали что оказывается он еще и столбцы прописывает (((((
Цитата
1. LastRow2 нужно искать не по третьему столбцу листа Поставщик, а по второму

[vba]
Код
LastRow2 = .Cells(Rows.Count, 3).End(xlUp).Row
[/vba] сейчас попробую!!!
СПАСИБО ВАМ ОГРОМНЕЙШЕЕ ВСЕМ!!!
[p.s.] ЕСЛИ ДОЛГО МУЧАТСЯ ЧТО НИБУДЬ ПОЛУЧИТСЯ )))) благодаря данному сайту глядишь я смогу понять и коды (пусть и примитивно)!!! САЙТ ПРОСТО КЛАДЕЗЬ с такими ОТЗЫВЧИВЫМИ, ГРАМОТНЫМИ, форумчанами!!!


Кто бы ты ни был, мир в твоих руках
 
Ответить
СообщениеRoman777, Да вы правы!!! При проверке данного кода (((( именно за нее мне и говорит что это не в тему????
Цитата
что за процедуру Вы хотите вызвать на выходе из КомбоБокса?

Если бы я понимал коды (((( я бы сказал что намереваюсь вызвать данным кодом (((( а так я данный код слямзил с тем указанных выше. Где после исследования данных кодов я понял что для того чтоб появился выплывающий список в данном КомбоБоксе2...
nilem, я вас понял понял спасибо!!!
_Boroda_, прошу прощения я наверное был не внимателен когда не исправил
Цитата
В файле отсутствует имя "Сотрудники"
на "Поставщик" (((( изменю обязательно!!! А также спасибо что подсказали что оказывается он еще и столбцы прописывает (((((
Цитата
1. LastRow2 нужно искать не по третьему столбцу листа Поставщик, а по второму

[vba]
Код
LastRow2 = .Cells(Rows.Count, 3).End(xlUp).Row
[/vba] сейчас попробую!!!
СПАСИБО ВАМ ОГРОМНЕЙШЕЕ ВСЕМ!!!
[p.s.] ЕСЛИ ДОЛГО МУЧАТСЯ ЧТО НИБУДЬ ПОЛУЧИТСЯ )))) благодаря данному сайту глядишь я смогу понять и коды (пусть и примитивно)!!! САЙТ ПРОСТО КЛАДЕЗЬ с такими ОТЗЫВЧИВЫМИ, ГРАМОТНЫМИ, форумчанами!!!

Автор - lebensvoll
Дата добавления - 20.07.2016 в 13:03
lebensvoll Дата: Среда, 20.07.2016, 14:33 | Сообщение № 6
Группа: Проверенные
Ранг: Старожил
Сообщений: 1002
Репутация: 30 ±
Замечаний: 0% ±

Excel 2010
Учел все ваши наставления в моей проблеме, а то есть:
[vba]
Код
Private Sub ComboBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim LastRow2 As Long
Dim Fam As String
Fam = Me.ComboBox2.Value
   With Sheets("Поставщик")
      LastRow2 = .Cells(Rows.Count, 2).End(xlUp).Row
      If Fam <> "" Then
         If Application.WorksheetFunction.CountIf(Range("Поставщик"), Fam) = 0 Then
            .Cells(LastRow2 + 1, 2) = Fam
         End If
      End If
   End With
  
End Sub
[/vba]
Roman777, nilem, удалил данную строку
Цитата
что за процедуру Вы хотите вызвать на выходе из КомбоБокса?
;
Цитата
В модуле формы UserForm1 нет процедуры UserForm_Activate, поэтому Call UserForm_Activate производит ошибку
Просто уберите эту строку

как я правильно понял я должно быть должен удалить также
Цитата
End With
!? Хотя при проверке через Debung + Compile VBAProject ошибок не выявлено (((((
_Boroda_, Я также учел и ваши правки ((((
НО у меня так и не появляется выпадающего списка (((( на UserForm1 при его использовании. Самое что интересное я могу за то примерно написать любого нового поставщика )))) и он добавляется в список на листе "Поставщик". ))))))
А почему же нет выпадающего списка то на UserForm1???
К сообщению приложен файл: 4239843.xlsm (95.7 Kb)


Кто бы ты ни был, мир в твоих руках

Сообщение отредактировал lebensvoll - Среда, 20.07.2016, 14:34
 
Ответить
СообщениеУчел все ваши наставления в моей проблеме, а то есть:
[vba]
Код
Private Sub ComboBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim LastRow2 As Long
Dim Fam As String
Fam = Me.ComboBox2.Value
   With Sheets("Поставщик")
      LastRow2 = .Cells(Rows.Count, 2).End(xlUp).Row
      If Fam <> "" Then
         If Application.WorksheetFunction.CountIf(Range("Поставщик"), Fam) = 0 Then
            .Cells(LastRow2 + 1, 2) = Fam
         End If
      End If
   End With
  
End Sub
[/vba]
Roman777, nilem, удалил данную строку
Цитата
что за процедуру Вы хотите вызвать на выходе из КомбоБокса?
;
Цитата
В модуле формы UserForm1 нет процедуры UserForm_Activate, поэтому Call UserForm_Activate производит ошибку
Просто уберите эту строку

как я правильно понял я должно быть должен удалить также
Цитата
End With
!? Хотя при проверке через Debung + Compile VBAProject ошибок не выявлено (((((
_Boroda_, Я также учел и ваши правки ((((
НО у меня так и не появляется выпадающего списка (((( на UserForm1 при его использовании. Самое что интересное я могу за то примерно написать любого нового поставщика )))) и он добавляется в список на листе "Поставщик". ))))))
А почему же нет выпадающего списка то на UserForm1???

Автор - lebensvoll
Дата добавления - 20.07.2016 в 14:33
nilem Дата: Среда, 20.07.2016, 18:37 | Сообщение № 7
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
А почему же нет выпадающего списка то на UserForm1???

в модуль формы UserForm1 добавьте такой код
[vba]
Код
Private Sub UserForm_Initialize()
With Sheets("Поставщик")
    ComboBox2.List = .Range("B2", .Cells(Rows.Count, 2).End(xlUp)).Value
End With
End Sub
[/vba]


Яндекс.Деньги 4100159601573
 
Ответить
Сообщение
А почему же нет выпадающего списка то на UserForm1???

в модуль формы UserForm1 добавьте такой код
[vba]
Код
Private Sub UserForm_Initialize()
With Sheets("Поставщик")
    ComboBox2.List = .Range("B2", .Cells(Rows.Count, 2).End(xlUp)).Value
End With
End Sub
[/vba]

Автор - nilem
Дата добавления - 20.07.2016 в 18:37
lebensvoll Дата: Четверг, 21.07.2016, 09:10 | Сообщение № 8
Группа: Проверенные
Ранг: Старожил
Сообщений: 1002
Репутация: 30 ±
Замечаний: 0% ±

Excel 2010
nilem, доброе утро!!! Да ваш код действительно выдает на UserForm1 теперь выпадающий список... Спасибо огромное.
Но не могли бы вы хоть в двух словах объяснить почему же тот код который я слямзил с файла (который у него работает) а при учтенных всех правках для меня не сработал (((((
Также прошу Вас подсобить можно ли к Вашему коду как то применить данный код или его подправить!?
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)

    Dim lReply As Long
    If Target.Cells.Count > 1 Then Exit Sub
    
    If Not Intersect(Target, Range("X3:X10000")) Is Nothing Then
        If IsEmpty(Target) Then Exit Sub
            If WorksheetFunction.CountIf(Sheets("Грузоперевозчик").Range("Грузоперевозчик"), Target) = 0 Then
                lReply = MsgBox("Добавить введенное имя " & Target & " в выпадающий список?", vbYesNo + vbQuestion)
                    If lReply = vbYes Then
                        Worksheets("Грузоперевозчик").Range("Грузоперевозчик").Cells(Worksheets("Грузоперевозчик").Range("Грузоперевозчик").Rows.Count + 1, 1) = Target
                        Sheets("Грузоперевозчик").Range("B1:B1000").Sort Key1:=Sheets("Грузоперевозчик").Range("B2"), Order1:=xlAscending, Header:=xlGuess, _
                            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
                            DataOption1:=xlSortNormal 'этот код и поможет отсортировать в алфавитном порядке
                    End If
            End If
    End If
    
    If Not Intersect(Target, Range("B3:B10000")) Is Nothing Then
        If IsEmpty(Target) Then Exit Sub
            If WorksheetFunction.CountIf(Sheets("Поставщик").Range("Поставщик"), Target) = 0 Then
                lReply = MsgBox("Добавить введенное имя " & Target & " в выпадающий список?", vbYesNo + vbQuestion)
                    If lReply = vbYes Then
                        Worksheets("Поставщик").Range("Поставщик").Cells(Worksheets("Поставщик").Range("Поставщик").Rows.Count + 1, 1) = Target
                        Sheets("Поставщик").Range("B1:B1000").Sort Key1:=Sheets("Поставщик").Range("B2"), Order1:=xlAscending, Header:=xlGuess, _
                            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
                            DataOption1:=xlSortNormal 'этот код и поможет отсортировать в алфавитном порядке
                    End If
            End If
    End If
    
End Sub
[/vba]
В данном коде (кросс:My WebPage прекрасная Manyasha, помогла мне сделать так чтоб если вдруг данного контрагента не будет в базе. То его можно будет вбить так и он дополняется и в базе (тем самым и в выпадающем списке) а также производится сортировка. Данный код и эту тему я смог ознакомиться и применить к своему файлу тут My WebPage в ней потом
[img][/img]
применил еще и сортировку в выпадающем списке.
nilem и кстати (((( я столкнулся с той же самой проблемой как и в теме My WebPage КОД НАЧИНАЕТ РУГАТЬСЯ (((( когда я ВАШ код применяю к следующему выпадающему списку (((( а т.е. к ГРУЗОПОЛУЧАТЕЛЮ. Не должно быть ведь кодов с одинаковыми наименованиями (((((


Кто бы ты ни был, мир в твоих руках

Сообщение отредактировал lebensvoll - Четверг, 21.07.2016, 09:16
 
Ответить
Сообщениеnilem, доброе утро!!! Да ваш код действительно выдает на UserForm1 теперь выпадающий список... Спасибо огромное.
Но не могли бы вы хоть в двух словах объяснить почему же тот код который я слямзил с файла (который у него работает) а при учтенных всех правках для меня не сработал (((((
Также прошу Вас подсобить можно ли к Вашему коду как то применить данный код или его подправить!?
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)

    Dim lReply As Long
    If Target.Cells.Count > 1 Then Exit Sub
    
    If Not Intersect(Target, Range("X3:X10000")) Is Nothing Then
        If IsEmpty(Target) Then Exit Sub
            If WorksheetFunction.CountIf(Sheets("Грузоперевозчик").Range("Грузоперевозчик"), Target) = 0 Then
                lReply = MsgBox("Добавить введенное имя " & Target & " в выпадающий список?", vbYesNo + vbQuestion)
                    If lReply = vbYes Then
                        Worksheets("Грузоперевозчик").Range("Грузоперевозчик").Cells(Worksheets("Грузоперевозчик").Range("Грузоперевозчик").Rows.Count + 1, 1) = Target
                        Sheets("Грузоперевозчик").Range("B1:B1000").Sort Key1:=Sheets("Грузоперевозчик").Range("B2"), Order1:=xlAscending, Header:=xlGuess, _
                            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
                            DataOption1:=xlSortNormal 'этот код и поможет отсортировать в алфавитном порядке
                    End If
            End If
    End If
    
    If Not Intersect(Target, Range("B3:B10000")) Is Nothing Then
        If IsEmpty(Target) Then Exit Sub
            If WorksheetFunction.CountIf(Sheets("Поставщик").Range("Поставщик"), Target) = 0 Then
                lReply = MsgBox("Добавить введенное имя " & Target & " в выпадающий список?", vbYesNo + vbQuestion)
                    If lReply = vbYes Then
                        Worksheets("Поставщик").Range("Поставщик").Cells(Worksheets("Поставщик").Range("Поставщик").Rows.Count + 1, 1) = Target
                        Sheets("Поставщик").Range("B1:B1000").Sort Key1:=Sheets("Поставщик").Range("B2"), Order1:=xlAscending, Header:=xlGuess, _
                            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
                            DataOption1:=xlSortNormal 'этот код и поможет отсортировать в алфавитном порядке
                    End If
            End If
    End If
    
End Sub
[/vba]
В данном коде (кросс:My WebPage прекрасная Manyasha, помогла мне сделать так чтоб если вдруг данного контрагента не будет в базе. То его можно будет вбить так и он дополняется и в базе (тем самым и в выпадающем списке) а также производится сортировка. Данный код и эту тему я смог ознакомиться и применить к своему файлу тут My WebPage в ней потом
[img][/img]
применил еще и сортировку в выпадающем списке.
nilem и кстати (((( я столкнулся с той же самой проблемой как и в теме My WebPage КОД НАЧИНАЕТ РУГАТЬСЯ (((( когда я ВАШ код применяю к следующему выпадающему списку (((( а т.е. к ГРУЗОПОЛУЧАТЕЛЮ. Не должно быть ведь кодов с одинаковыми наименованиями (((((

Автор - lebensvoll
Дата добавления - 21.07.2016 в 09:10
lebensvoll Дата: Четверг, 21.07.2016, 12:30 | Сообщение № 9
Группа: Проверенные
Ранг: Старожил
Сообщений: 1002
Репутация: 30 ±
Замечаний: 0% ±

Excel 2010
Уважаемые форумчане подскажите пожалуйста как для UserForm1 каждому ComboBox прописать подобный код в виде выпадающего списка!?
nilem, очень помог своим кодом и действительно на UserForm1 для "Поставщика" теперь предоставляется выпадающий список. Но когда я начинаю его применять для "Грузоперевозчик" код на меня ругается ((((( что такой уже есть (как я правильно понял). смотрите
[img][/img]
Как применить мне каждому ComboBox на UserForm1 код с выпадающим списком чтоб можно было еще его и дополнить если вдруг в базе не будет данного "поставщика" и сортировался список автоматом???


Кто бы ты ни был, мир в твоих руках
 
Ответить
СообщениеУважаемые форумчане подскажите пожалуйста как для UserForm1 каждому ComboBox прописать подобный код в виде выпадающего списка!?
nilem, очень помог своим кодом и действительно на UserForm1 для "Поставщика" теперь предоставляется выпадающий список. Но когда я начинаю его применять для "Грузоперевозчик" код на меня ругается ((((( что такой уже есть (как я правильно понял). смотрите
[img][/img]
Как применить мне каждому ComboBox на UserForm1 код с выпадающим списком чтоб можно было еще его и дополнить если вдруг в базе не будет данного "поставщика" и сортировался список автоматом???

Автор - lebensvoll
Дата добавления - 21.07.2016 в 12:30
_Boroda_ Дата: Четверг, 21.07.2016, 12:40 | Сообщение № 10
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16666
Репутация: 6478 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Нельзя 2 макроса с одинаковым названием. Пару дней назад Вам уже об этом говорили.
И комбобоксы не оба №2
Вот так примерно можно
[vba]
Код
Private Sub UserForm_Initialize()
With Sheets("Поставщик")
    ComboBox2.List = .Range("B2", .Cells(Rows.Count, 2).End(xlUp)).Value
End With
With Sheets("Грузоперевозчик")
    ComboBox3.List = .Range("B2", .Cells(Rows.Count, 2).End(xlUp)).Value
End With
End Sub
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеНельзя 2 макроса с одинаковым названием. Пару дней назад Вам уже об этом говорили.
И комбобоксы не оба №2
Вот так примерно можно
[vba]
Код
Private Sub UserForm_Initialize()
With Sheets("Поставщик")
    ComboBox2.List = .Range("B2", .Cells(Rows.Count, 2).End(xlUp)).Value
End With
With Sheets("Грузоперевозчик")
    ComboBox3.List = .Range("B2", .Cells(Rows.Count, 2).End(xlUp)).Value
End With
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 21.07.2016 в 12:40
lebensvoll Дата: Четверг, 21.07.2016, 12:52 | Сообщение № 11
Группа: Проверенные
Ранг: Старожил
Сообщений: 1002
Репутация: 30 ±
Замечаний: 0% ±

Excel 2010
_Boroda_, у меня получилось ))))) я сообразил )))))
Когда я только создовал данную тему то у меня была проблема (((( и Roman777, (второе сообщение)
Цитата
что за процедуру Вы хотите вызвать на выходе из КомбоБокса?
на сколько я заметил UserForm1 и UserForm2 у Вас в файле, других нет.

Я нашел )))) я вкурил как и почему ))))) Я должен был активировать ее и тогда мой код срабатывает ))))
[vba]
Код
Private Sub UserForm_Activate()
   Me.ComboBox2.RowSource = "Поставщик"
End Sub

Private Sub ComboBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim LastRow2 As Long
Dim Fam As String
Fam = Me.ComboBox2.Value
   With Sheets("Поставщик")
      LastRow2 = .Cells(Rows.Count, 2).End(xlUp).Row
      If Fam <> "" Then
         If Application.WorksheetFunction.CountIf(Range("Поставщик"), Fam) = 0 Then
            .Cells(LastRow2 + 1, 2) = Fam
         End If
      End If
   End With
   Call UserForm_Activate
End Sub

[/vba]
Так я теперь могу делать для каждого своего выпадающего списка лишь нужно в активации прописывать тот комбоБокс что я должен активировать....
Прошу прощения _Boroda_, но ваш код я еще не пробывал но обязательно попробую. Мне ведь нужно еще проверить могу ли я дополнять список базы если вдруг их не будет у меня


Кто бы ты ни был, мир в твоих руках
 
Ответить
Сообщение_Boroda_, у меня получилось ))))) я сообразил )))))
Когда я только создовал данную тему то у меня была проблема (((( и Roman777, (второе сообщение)
Цитата
что за процедуру Вы хотите вызвать на выходе из КомбоБокса?
на сколько я заметил UserForm1 и UserForm2 у Вас в файле, других нет.

Я нашел )))) я вкурил как и почему ))))) Я должен был активировать ее и тогда мой код срабатывает ))))
[vba]
Код
Private Sub UserForm_Activate()
   Me.ComboBox2.RowSource = "Поставщик"
End Sub

Private Sub ComboBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim LastRow2 As Long
Dim Fam As String
Fam = Me.ComboBox2.Value
   With Sheets("Поставщик")
      LastRow2 = .Cells(Rows.Count, 2).End(xlUp).Row
      If Fam <> "" Then
         If Application.WorksheetFunction.CountIf(Range("Поставщик"), Fam) = 0 Then
            .Cells(LastRow2 + 1, 2) = Fam
         End If
      End If
   End With
   Call UserForm_Activate
End Sub

[/vba]
Так я теперь могу делать для каждого своего выпадающего списка лишь нужно в активации прописывать тот комбоБокс что я должен активировать....
Прошу прощения _Boroda_, но ваш код я еще не пробывал но обязательно попробую. Мне ведь нужно еще проверить могу ли я дополнять список базы если вдруг их не будет у меня

Автор - lebensvoll
Дата добавления - 21.07.2016 в 12:52
lebensvoll Дата: Четверг, 21.07.2016, 12:54 | Сообщение № 12
Группа: Проверенные
Ранг: Старожил
Сообщений: 1002
Репутация: 30 ±
Замечаний: 0% ±

Excel 2010
_Boroda_, да дополняет список )))) поставщиков если его нет в базе я пишу его с клавы не прибегая к листу ПОСТАВЩИК!!!
УРЯЯЯЯЯЯЯ


Кто бы ты ни был, мир в твоих руках
 
Ответить
Сообщение_Boroda_, да дополняет список )))) поставщиков если его нет в базе я пишу его с клавы не прибегая к листу ПОСТАВЩИК!!!
УРЯЯЯЯЯЯЯ

Автор - lebensvoll
Дата добавления - 21.07.2016 в 12:54
lebensvoll Дата: Четверг, 21.07.2016, 12:55 | Сообщение № 13
Группа: Проверенные
Ранг: Старожил
Сообщений: 1002
Репутация: 30 ±
Замечаний: 0% ±

Excel 2010
СПАСИБО ВАМ ВСЕМ ОГРОМНЕЙШЕЕЕ ПРИОГРОМНЕЙШЕЕ. Я ОБОЖАЮ ВАШ САЙТ ВЫ СУПЕР!!!!


Кто бы ты ни был, мир в твоих руках
 
Ответить
СообщениеСПАСИБО ВАМ ВСЕМ ОГРОМНЕЙШЕЕЕ ПРИОГРОМНЕЙШЕЕ. Я ОБОЖАЮ ВАШ САЙТ ВЫ СУПЕР!!!!

Автор - lebensvoll
Дата добавления - 21.07.2016 в 12:55
Roman777 Дата: Четверг, 21.07.2016, 13:58 | Сообщение № 14
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
lebensvoll, рекомендую Вам не давать подобных наименований
UserForm_Activate
процедурам. Она во-первых, совсем другой смысл имеет у Вас внутри кода (наименование не соответствует действию кода), ну а во-вторых, сбивает с толку, поскольку очень похожа наименованием на событийные процедуры.


Много чего не знаю!!!!

Сообщение отредактировал Roman777 - Четверг, 21.07.2016, 13:58
 
Ответить
Сообщениеlebensvoll, рекомендую Вам не давать подобных наименований
UserForm_Activate
процедурам. Она во-первых, совсем другой смысл имеет у Вас внутри кода (наименование не соответствует действию кода), ну а во-вторых, сбивает с толку, поскольку очень похожа наименованием на событийные процедуры.

Автор - Roman777
Дата добавления - 21.07.2016 в 13:58
lebensvoll Дата: Четверг, 21.07.2016, 14:45 | Сообщение № 15
Группа: Проверенные
Ранг: Старожил
Сообщений: 1002
Репутация: 30 ±
Замечаний: 0% ±

Excel 2010
Roman777, честно сказать вам я вас понял что делать так нельзя. Но я не давал ее (((( данный материал с кодами я позаимствовал в тех темах где указывал выше. (((((
А как тогда мне поступить??? Хотя честно сказать у меня уже с данной процедурой )))) половина UserForm_1 заполнена и все работает
[vba]
Код
Private Sub UserForm_Activate()
   Me.ComboBox2.RowSource = "Поставщик"
   Me.ComboBox3.RowSource = "Грузоперевозчик"
   Me.ComboBox4.RowSource = "ВидМатериала"
   Me.ComboBox5.RowSource = "Тара"
End Sub
[/vba]
У меня с прописанием совсем все плохо ((((


Кто бы ты ни был, мир в твоих руках

Сообщение отредактировал lebensvoll - Четверг, 21.07.2016, 14:46
 
Ответить
СообщениеRoman777, честно сказать вам я вас понял что делать так нельзя. Но я не давал ее (((( данный материал с кодами я позаимствовал в тех темах где указывал выше. (((((
А как тогда мне поступить??? Хотя честно сказать у меня уже с данной процедурой )))) половина UserForm_1 заполнена и все работает
[vba]
Код
Private Sub UserForm_Activate()
   Me.ComboBox2.RowSource = "Поставщик"
   Me.ComboBox3.RowSource = "Грузоперевозчик"
   Me.ComboBox4.RowSource = "ВидМатериала"
   Me.ComboBox5.RowSource = "Тара"
End Sub
[/vba]
У меня с прописанием совсем все плохо ((((

Автор - lebensvoll
Дата добавления - 21.07.2016 в 14:45
Manyasha Дата: Четверг, 21.07.2016, 14:56 | Сообщение № 16
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
похожа наименованием на событийные процедуры

Роман, так это и есть событие активации формы, код принадлежит форме UserForm1 (судя по картинке из 9-го сообщения). Так что все правильно, не путайте человека :)


ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщение
похожа наименованием на событийные процедуры

Роман, так это и есть событие активации формы, код принадлежит форме UserForm1 (судя по картинке из 9-го сообщения). Так что все правильно, не путайте человека :)

Автор - Manyasha
Дата добавления - 21.07.2016 в 14:56
Матраскин Дата: Четверг, 21.07.2016, 15:03 | Сообщение № 17
Группа: Друзья
Ранг: Обитатель
Сообщений: 375
Репутация: 81 ±
Замечаний: 0% ±

20xx
Manyasha,
посыл верный, надо придерживаться Code Conventions ( https://msdn.microsoft.com/en-us/library/aa240822(v=vs.60).aspx )


в интернете опять кто-то не прав
 
Ответить
СообщениеManyasha,
посыл верный, надо придерживаться Code Conventions ( https://msdn.microsoft.com/en-us/library/aa240822(v=vs.60).aspx )

Автор - Матраскин
Дата добавления - 21.07.2016 в 15:03
lebensvoll Дата: Четверг, 21.07.2016, 15:22 | Сообщение № 18
Группа: Проверенные
Ранг: Старожил
Сообщений: 1002
Репутация: 30 ±
Замечаний: 0% ±

Excel 2010
УВАЖАЕМЫЕ мои УЧИТЕЛЯ!!!
Я не умею писать коды воообще ((((( я лишь ищу темы и стараюсь от туда их вытянуть и применить себе )))) и если у меня не получается то я кричу о помощи на форум (((( БЕЗ ВАС МНЕ НИ КАК!!!
Главное что в данном коде у меня уже получилось сформировать половину UserForm_1 и они работают )))))) И Я СЧАСТЛИВ (не думал ни когда что воспользуюсь лозунгом ДОМА 2 )))))))) но так оно и есть я безумно рад!!!
СПАСИБО ВАМ ОГРОМНЕЙШЕЕ ВСЕМ ВСЕМ!!!
вот сами смотрите что получается. Manyasha, вам огромнейшее я смог также на некоторые коды втиснуть еще и сортировку )))) в предыдущих темах вы мне помогали по этому поводу...
[vba]
Код
Private Sub ComboBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim LastRow2 As Long
Dim Fam As String
Fam = Me.ComboBox2.Value
   With Sheets("Поставщик")
      LastRow2 = .Cells(Rows.Count, 2).End(xlUp).Row
      If Fam <> "" Then
         If Application.WorksheetFunction.CountIf(Range("Поставщик"), Fam) = 0 Then
            .Cells(LastRow2 + 1, 2) = Fam
         End If
    End If
    Sheets("Поставщик").Range("B1:B1000").Sort Key1:=Sheets("Поставщик").Range("B2"), Order1:=xlAscending, Header:=xlGuess, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal 'этот код и поможет отсортировать в алфавитном порядке
    End With
   Call UserForm_Activate
End Sub
Private Sub ComboBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim LastRow2 As Long
Dim Fam As String
Fam = Me.ComboBox3.Value
   With Sheets("Грузоперевозчик")
      LastRow2 = .Cells(Rows.Count, 2).End(xlUp).Row
      If Fam <> "" Then
         If Application.WorksheetFunction.CountIf(Range("Грузоперевозчик"), Fam) = 0 Then
            .Cells(LastRow2 + 1, 2) = Fam
         End If
       End If
    Sheets("Грузоперевозчик").Range("B1:B1000").Sort Key1:=Sheets("Грузоперевозчик").Range("B2"), Order1:=xlAscending, Header:=xlGuess, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal 'этот код и поможет отсортировать в алфавитном порядке
   End With
   Call UserForm_Activate
End Sub
Private Sub ComboBox4_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim LastRow2 As Long
Dim Fam As String
Fam = Me.ComboBox4.Value
   With Sheets("Вид материала")
      LastRow2 = .Cells(Rows.Count, 2).End(xlUp).Row
      If Fam <> "" Then
         If Application.WorksheetFunction.CountIf(Range("ВидМатериала"), Fam) = 0 Then
            .Cells(LastRow2 + 1, 2) = Fam
         End If
      End If
   End With
   Call UserForm_Activate
End Sub
Private Sub ComboBox5_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim LastRow2 As Long
Dim Fam As String
Fam = Me.ComboBox5.Value
   With Sheets("Тара")
      LastRow2 = .Cells(Rows.Count, 2).End(xlUp).Row
      If Fam <> "" Then
         If Application.WorksheetFunction.CountIf(Range("Тара"), Fam) = 0 Then
            .Cells(LastRow2 + 1, 2) = Fam
         End If
      End If
   End With
   Call UserForm_Activate
End Sub
Private Sub ComboBox6_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim LastRow2 As Long
Dim Fam As String
Fam = Me.ComboBox6.Value
   With Sheets("Номенклатура")
      LastRow2 = .Cells(Rows.Count, 2).End(xlUp).Row
      If Fam <> "" Then
         If Application.WorksheetFunction.CountIf(Range("Номенклатура"), Fam) = 0 Then
            .Cells(LastRow2 + 1, 2) = Fam
          End If
       End If
    Sheets("Номенклатура").Range("B1:B1000").Sort Key1:=Sheets("Номенклатура").Range("B2"), Order1:=xlAscending, Header:=xlGuess, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal 'этот код и поможет отсортировать в алфавитном порядке
   End With
   Call UserForm_Activate
End Sub

Private Sub ComboBox7_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim LastRow2 As Long
Dim Fam As String
Fam = Me.ComboBox7.Value
   With Sheets("Откуда материал")
      LastRow2 = .Cells(Rows.Count, 2).End(xlUp).Row
      If Fam <> "" Then
         If Application.WorksheetFunction.CountIf(Range("ВидЦемента"), Fam) = 0 Then
            .Cells(LastRow2 + 1, 2) = Fam
          End If
       End If
    Sheets("Откуда материал").Range("B1:B1000").Sort Key1:=Sheets("Откуда материал").Range("B2"), Order1:=xlAscending, Header:=xlGuess, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal 'этот код и поможет отсортировать в алфавитном порядке
   End With
   Call UserForm_Activate
End Sub

Private Sub UserForm_Activate()
   Me.ComboBox2.RowSource = "Поставщик"
   Me.ComboBox3.RowSource = "Грузоперевозчик"
   Me.ComboBox4.RowSource = "ВидМатериала"
   Me.ComboBox5.RowSource = "Тара"
   Me.ComboBox6.RowSource = "Номенклатура"
   Me.ComboBox7.RowSource = "ВидЦемента"
End Sub
[/vba]


Кто бы ты ни был, мир в твоих руках
 
Ответить
СообщениеУВАЖАЕМЫЕ мои УЧИТЕЛЯ!!!
Я не умею писать коды воообще ((((( я лишь ищу темы и стараюсь от туда их вытянуть и применить себе )))) и если у меня не получается то я кричу о помощи на форум (((( БЕЗ ВАС МНЕ НИ КАК!!!
Главное что в данном коде у меня уже получилось сформировать половину UserForm_1 и они работают )))))) И Я СЧАСТЛИВ (не думал ни когда что воспользуюсь лозунгом ДОМА 2 )))))))) но так оно и есть я безумно рад!!!
СПАСИБО ВАМ ОГРОМНЕЙШЕЕ ВСЕМ ВСЕМ!!!
вот сами смотрите что получается. Manyasha, вам огромнейшее я смог также на некоторые коды втиснуть еще и сортировку )))) в предыдущих темах вы мне помогали по этому поводу...
[vba]
Код
Private Sub ComboBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim LastRow2 As Long
Dim Fam As String
Fam = Me.ComboBox2.Value
   With Sheets("Поставщик")
      LastRow2 = .Cells(Rows.Count, 2).End(xlUp).Row
      If Fam <> "" Then
         If Application.WorksheetFunction.CountIf(Range("Поставщик"), Fam) = 0 Then
            .Cells(LastRow2 + 1, 2) = Fam
         End If
    End If
    Sheets("Поставщик").Range("B1:B1000").Sort Key1:=Sheets("Поставщик").Range("B2"), Order1:=xlAscending, Header:=xlGuess, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal 'этот код и поможет отсортировать в алфавитном порядке
    End With
   Call UserForm_Activate
End Sub
Private Sub ComboBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim LastRow2 As Long
Dim Fam As String
Fam = Me.ComboBox3.Value
   With Sheets("Грузоперевозчик")
      LastRow2 = .Cells(Rows.Count, 2).End(xlUp).Row
      If Fam <> "" Then
         If Application.WorksheetFunction.CountIf(Range("Грузоперевозчик"), Fam) = 0 Then
            .Cells(LastRow2 + 1, 2) = Fam
         End If
       End If
    Sheets("Грузоперевозчик").Range("B1:B1000").Sort Key1:=Sheets("Грузоперевозчик").Range("B2"), Order1:=xlAscending, Header:=xlGuess, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal 'этот код и поможет отсортировать в алфавитном порядке
   End With
   Call UserForm_Activate
End Sub
Private Sub ComboBox4_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim LastRow2 As Long
Dim Fam As String
Fam = Me.ComboBox4.Value
   With Sheets("Вид материала")
      LastRow2 = .Cells(Rows.Count, 2).End(xlUp).Row
      If Fam <> "" Then
         If Application.WorksheetFunction.CountIf(Range("ВидМатериала"), Fam) = 0 Then
            .Cells(LastRow2 + 1, 2) = Fam
         End If
      End If
   End With
   Call UserForm_Activate
End Sub
Private Sub ComboBox5_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim LastRow2 As Long
Dim Fam As String
Fam = Me.ComboBox5.Value
   With Sheets("Тара")
      LastRow2 = .Cells(Rows.Count, 2).End(xlUp).Row
      If Fam <> "" Then
         If Application.WorksheetFunction.CountIf(Range("Тара"), Fam) = 0 Then
            .Cells(LastRow2 + 1, 2) = Fam
         End If
      End If
   End With
   Call UserForm_Activate
End Sub
Private Sub ComboBox6_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim LastRow2 As Long
Dim Fam As String
Fam = Me.ComboBox6.Value
   With Sheets("Номенклатура")
      LastRow2 = .Cells(Rows.Count, 2).End(xlUp).Row
      If Fam <> "" Then
         If Application.WorksheetFunction.CountIf(Range("Номенклатура"), Fam) = 0 Then
            .Cells(LastRow2 + 1, 2) = Fam
          End If
       End If
    Sheets("Номенклатура").Range("B1:B1000").Sort Key1:=Sheets("Номенклатура").Range("B2"), Order1:=xlAscending, Header:=xlGuess, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal 'этот код и поможет отсортировать в алфавитном порядке
   End With
   Call UserForm_Activate
End Sub

Private Sub ComboBox7_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim LastRow2 As Long
Dim Fam As String
Fam = Me.ComboBox7.Value
   With Sheets("Откуда материал")
      LastRow2 = .Cells(Rows.Count, 2).End(xlUp).Row
      If Fam <> "" Then
         If Application.WorksheetFunction.CountIf(Range("ВидЦемента"), Fam) = 0 Then
            .Cells(LastRow2 + 1, 2) = Fam
          End If
       End If
    Sheets("Откуда материал").Range("B1:B1000").Sort Key1:=Sheets("Откуда материал").Range("B2"), Order1:=xlAscending, Header:=xlGuess, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal 'этот код и поможет отсортировать в алфавитном порядке
   End With
   Call UserForm_Activate
End Sub

Private Sub UserForm_Activate()
   Me.ComboBox2.RowSource = "Поставщик"
   Me.ComboBox3.RowSource = "Грузоперевозчик"
   Me.ComboBox4.RowSource = "ВидМатериала"
   Me.ComboBox5.RowSource = "Тара"
   Me.ComboBox6.RowSource = "Номенклатура"
   Me.ComboBox7.RowSource = "ВидЦемента"
End Sub
[/vba]

Автор - lebensvoll
Дата добавления - 21.07.2016 в 15:22
Manyasha Дата: Четверг, 21.07.2016, 15:43 | Сообщение № 19
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
Матраскин, что-то я не поняла, это одобрение моего поста или критика?)) %)
Если критика, то тогда не врубаюсь, какое из правил написания кода нарушается при использовании UserForm_Activate для формы :(

lebensvoll, вместо [vba]
Код
Call UserForm_Activate
[/vba]
для каждого комбобокса, можно просто обновить список текущего комбобокса:
[vba]
Код
'для макроса ComboBox2_Exit
Me.ComboBox2.RowSource = "Поставщик"
[/vba]

Я перезаполнила список для поставщиков)) Дальше 28-й строки элементы не попадают в список. Смотрите имя по ctrl+f3, не нужно ли $B$2:$B$28 заменить на побольше?


ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеМатраскин, что-то я не поняла, это одобрение моего поста или критика?)) %)
Если критика, то тогда не врубаюсь, какое из правил написания кода нарушается при использовании UserForm_Activate для формы :(

lebensvoll, вместо [vba]
Код
Call UserForm_Activate
[/vba]
для каждого комбобокса, можно просто обновить список текущего комбобокса:
[vba]
Код
'для макроса ComboBox2_Exit
Me.ComboBox2.RowSource = "Поставщик"
[/vba]

Я перезаполнила список для поставщиков)) Дальше 28-й строки элементы не попадают в список. Смотрите имя по ctrl+f3, не нужно ли $B$2:$B$28 заменить на побольше?

Автор - Manyasha
Дата добавления - 21.07.2016 в 15:43
Матраскин Дата: Четверг, 21.07.2016, 16:00 | Сообщение № 20
Группа: Друзья
Ранг: Обитатель
Сообщений: 375
Репутация: 81 ±
Замечаний: 0% ±

20xx
Manyasha, я говорю о том, что не следует использовать userForm1, combobox2 и т. п. Roman777 из-за этого попал в непонятное.
А так - Вы конечно правы


в интернете опять кто-то не прав
 
Ответить
СообщениеManyasha, я говорю о том, что не следует использовать userForm1, combobox2 и т. п. Roman777 из-за этого попал в непонятное.
А так - Вы конечно правы

Автор - Матраскин
Дата добавления - 21.07.2016 в 16:00
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Выпадающий список в UserForm (Макросы/Sub)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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