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

Вход

Регистрация

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

 

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

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

Excel 2010
Manyasha, ни какой критики (((( вы что ВАМ СПАСИБО ОГРОМНОЕ за то что вы мне показали пояснили и помогли создать My WebPage
Просто я смог вытянуть с той темы код сортировки и применить его к некоторым своим боксам в данной теме ))))))
Цитата
Я перезаполнила список для поставщиков)) Дальше 28-й строки элементы не попадают в список. Смотрите имя по ctrl+f3, не нужно ли $B$2:$B$28 заменить на побольше?

Т.е. я должен также еще и в диспетчере имен расширить строки ((((
Я думал макрос сам раз дополняет список то он и расширит если что (((( или нет????


Кто бы ты ни был, мир в твоих руках
 
Ответить
СообщениеManyasha, ни какой критики (((( вы что ВАМ СПАСИБО ОГРОМНОЕ за то что вы мне показали пояснили и помогли создать My WebPage
Просто я смог вытянуть с той темы код сортировки и применить его к некоторым своим боксам в данной теме ))))))
Цитата
Я перезаполнила список для поставщиков)) Дальше 28-й строки элементы не попадают в список. Смотрите имя по ctrl+f3, не нужно ли $B$2:$B$28 заменить на побольше?

Т.е. я должен также еще и в диспетчере имен расширить строки ((((
Я думал макрос сам раз дополняет список то он и расширит если что (((( или нет????

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

Excel 2010, 2016
ни какой критики
это я не Вам.
Я думал макрос сам раз дополняет список то он и расширит если что

расширит, но максимум до 28-й строки. У Вас там формула в диспетчере имен:
Код
=СМЕЩ(Поставщик!$B$2:$B$28;0;0;СЧЁТЗ(Поставщик!$B$2:$B$28);1)

Замените $B$2:$B$28 на $B$2:$B$100 например, ну или сколько там может быть поставщиков (максимально возможное количество).

В макросе менять диапазон для списка тоже можно, но лучше в формуле, иначе, при пополнении списка не с формы, диапазон не будет увеличиваться.


ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщение
ни какой критики
это я не Вам.
Я думал макрос сам раз дополняет список то он и расширит если что

расширит, но максимум до 28-й строки. У Вас там формула в диспетчере имен:
Код
=СМЕЩ(Поставщик!$B$2:$B$28;0;0;СЧЁТЗ(Поставщик!$B$2:$B$28);1)

Замените $B$2:$B$28 на $B$2:$B$100 например, ну или сколько там может быть поставщиков (максимально возможное количество).

В макросе менять диапазон для списка тоже можно, но лучше в формуле, иначе, при пополнении списка не с формы, диапазон не будет увеличиваться.

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

Excel 2010
Manyasha, я вас понял спасибо вам огромнейшее!!!


Кто бы ты ни был, мир в твоих руках
 
Ответить
СообщениеManyasha, я вас понял спасибо вам огромнейшее!!!

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

2003; 2007; 2010; 2013 RUS
Александр, замените формулу
=СМЕЩ(Поставщик!$B$2:$B$28;0;0;СЧЁТЗ(Поставщик!$B$2:$B$28);1)
на вот эту
Код
=ИНДЕКС(Поставщик!B:B;2):ИНДЕКС(Поставщик!B:B;СЧЁТЗ(Поставщик!B:B))
Она
1. автоматически подхватывает весь заполненный диапазо;
2. неволатильна (не пересчитывается при каждом телодвижении на листе) - меньше вешает компьютер
3. при удалении ячейки В1 формула со СМЕЩ портится, а с ИНДЕКС - нет. И вообще ИНДЕКС по столбцу/строке защищен от удаления ячеек и строк/столбцов)
4. Должна быть быстрее (не проверял)

Вот так вообще хорошо, но обычно этого не требуется
Код
=ИНДЕКС(Поставщик!B:B;2):ИНДЕКС(Поставщик!B:B;МАКС(СЧЁТЗ(Поставщик!B:B);2))


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеАлександр, замените формулу
=СМЕЩ(Поставщик!$B$2:$B$28;0;0;СЧЁТЗ(Поставщик!$B$2:$B$28);1)
на вот эту
Код
=ИНДЕКС(Поставщик!B:B;2):ИНДЕКС(Поставщик!B:B;СЧЁТЗ(Поставщик!B:B))
Она
1. автоматически подхватывает весь заполненный диапазо;
2. неволатильна (не пересчитывается при каждом телодвижении на листе) - меньше вешает компьютер
3. при удалении ячейки В1 формула со СМЕЩ портится, а с ИНДЕКС - нет. И вообще ИНДЕКС по столбцу/строке защищен от удаления ячеек и строк/столбцов)
4. Должна быть быстрее (не проверял)

Вот так вообще хорошо, но обычно этого не требуется
Код
=ИНДЕКС(Поставщик!B:B;2):ИНДЕКС(Поставщик!B:B;МАКС(СЧЁТЗ(Поставщик!B:B);2))

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

Excel 2010
_Boroda_, Manyasha, я столкнулся с вылетом (((( вот этого ((((
Цитата
Subscript out of range
что в переводе гласит
Цитата
Нижний индекс вне диапазона

Если я правильно его понимаю то я как раз таки столкнулся с тем что мне поясняла Manyasha!???
_Boroda_, я обязательно применю ваши формулы СПАСИБО!!!


Кто бы ты ни был, мир в твоих руках
 
Ответить
Сообщение_Boroda_, Manyasha, я столкнулся с вылетом (((( вот этого ((((
Цитата
Subscript out of range
что в переводе гласит
Цитата
Нижний индекс вне диапазона

Если я правильно его понимаю то я как раз таки столкнулся с тем что мне поясняла Manyasha!???
_Boroda_, я обязательно применю ваши формулы СПАСИБО!!!

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

2003; 2007; 2010; 2013 RUS
Нижний индекс вне диапазона

Это типа если Вы делаете цикл For i = 1 to 28 по диапазону $B$2:$B$28. Цикл хочет пройтись 28 раз, а в диапазоне 27 ячеек


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
Нижний индекс вне диапазона

Это типа если Вы делаете цикл For i = 1 to 28 по диапазону $B$2:$B$28. Цикл хочет пройтись 28 раз, а в диапазоне 27 ячеек

Автор - _Boroda_
Дата добавления - 21.07.2016 в 17:21
RAN Дата: Четверг, 21.07.2016, 18:38 | Сообщение № 27
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
я обязательно применю ваши формулы

Зачем? Если вы используете "умные" таблицы, так и используйте на здоровье.
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("B3:B10000")) Is Nothing Then
        If IsEmpty(Target) Then Exit Sub
        If WorksheetFunction.CountIf(Sheets("Поставщик").ListObjects("Постав").DataBodyRange, Target) = 0 Then
            lReply = MsgBox("Добавить введенное имя " & Target & " в выпадающий список?", vbYesNo + vbQuestion)
            If lReply = vbYes Then
                With Worksheets("Поставщик").ListObjects("Постав").ListColumns(1)
                    Worksheets("Поставщик").Cells(Worksheets("Поставщик").Rows.Count, .Range.Column).End(xlUp).Offset(1) = Target
                End With
                With Worksheets("Поставщик").ListObjects("Постав")
                    .Sort.SortFields.Clear
                    .Sort.SortFields.Add Key:=.Range(1), SortOn:=xlSortOnValues, _
                    Order:=xlAscending, DataOption:=xlSortNormal
                    .Sort.Header = xlYes
                    .Sort.MatchCase = False
                    .Sort.Orientation = xlTopToBottom
                    .Sort.SortMethod = xlPinYin
                    .Sort.Apply
                End With
            End If
        End If
    End If
End Sub
[/vba]
[vba]
Код
Private Sub CommandButton1_Click()
ComboBox1.List = Range("Постав").Value
End Sub

Private Sub CommandButton2_Click()
ComboBox2.List = Worksheets("Поставщик").ListObjects("Постав").DataBodyRange.Value
End Sub

Private Sub CommandButton3_Click()
ComboBox3.List = Worksheets("Поставщик").ListObjects(1).DataBodyRange.Value
End Sub
[/vba]
Для другого списка в макросе достаточно изменить имя таблицы, и, при необходимости, листа.
К сообщению приложен файл: 4842622.xlsm (31.0 Kb)


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Четверг, 21.07.2016, 18:46
 
Ответить
Сообщение
я обязательно применю ваши формулы

Зачем? Если вы используете "умные" таблицы, так и используйте на здоровье.
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("B3:B10000")) Is Nothing Then
        If IsEmpty(Target) Then Exit Sub
        If WorksheetFunction.CountIf(Sheets("Поставщик").ListObjects("Постав").DataBodyRange, Target) = 0 Then
            lReply = MsgBox("Добавить введенное имя " & Target & " в выпадающий список?", vbYesNo + vbQuestion)
            If lReply = vbYes Then
                With Worksheets("Поставщик").ListObjects("Постав").ListColumns(1)
                    Worksheets("Поставщик").Cells(Worksheets("Поставщик").Rows.Count, .Range.Column).End(xlUp).Offset(1) = Target
                End With
                With Worksheets("Поставщик").ListObjects("Постав")
                    .Sort.SortFields.Clear
                    .Sort.SortFields.Add Key:=.Range(1), SortOn:=xlSortOnValues, _
                    Order:=xlAscending, DataOption:=xlSortNormal
                    .Sort.Header = xlYes
                    .Sort.MatchCase = False
                    .Sort.Orientation = xlTopToBottom
                    .Sort.SortMethod = xlPinYin
                    .Sort.Apply
                End With
            End If
        End If
    End If
End Sub
[/vba]
[vba]
Код
Private Sub CommandButton1_Click()
ComboBox1.List = Range("Постав").Value
End Sub

Private Sub CommandButton2_Click()
ComboBox2.List = Worksheets("Поставщик").ListObjects("Постав").DataBodyRange.Value
End Sub

Private Sub CommandButton3_Click()
ComboBox3.List = Worksheets("Поставщик").ListObjects(1).DataBodyRange.Value
End Sub
[/vba]
Для другого списка в макросе достаточно изменить имя таблицы, и, при необходимости, листа.

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

Excel 2010
_Boroda_, добрый день!!!
Не могу понять что произошло ((((( в начале выходила выпадать ошибка
Цитата
Нижний индекс вне диапазона
(((( но тем не менее форма 1 работала.
Решил изменить диапазоны используя формулы
Код
=ИНДЕКС(Привезли цемент!B:B;2):ИНДЕКС(Привезли цемент!B:B;МАКС(СЧЁТЗ(Привезли цемент!B:B);2))
потому что код ругался именно на него ((((
[img][/img]
Хотя код для активации комбоБокса прописан все правильно ((((
[vba]
Код
Private Sub ComboBox8_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim LastRow2 As Long
Dim Fam As String
Fam = Me.ComboBox8.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
[/vba]

Да кстати Александр )))) у меня получилось даже прописать код (ну как прописать разобраться как он прописывался в другом файле ) и теперь при нажатии кнопки добавить запись на форме все данные с формы вписываются в таблицу))))))) СУПЕР ПРОСТО!!!
Помогите разобраться почему ругается макрос выпадающий список ((((
[img][/img]
К сообщению приложен файл: 2267026.xlsb (95.7 Kb)


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

Сообщение отредактировал lebensvoll - Пятница, 22.07.2016, 13:31
 
Ответить
Сообщение_Boroda_, добрый день!!!
Не могу понять что произошло ((((( в начале выходила выпадать ошибка
Цитата
Нижний индекс вне диапазона
(((( но тем не менее форма 1 работала.
Решил изменить диапазоны используя формулы
Код
=ИНДЕКС(Привезли цемент!B:B;2):ИНДЕКС(Привезли цемент!B:B;МАКС(СЧЁТЗ(Привезли цемент!B:B);2))
потому что код ругался именно на него ((((
[img][/img]
Хотя код для активации комбоБокса прописан все правильно ((((
[vba]
Код
Private Sub ComboBox8_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim LastRow2 As Long
Dim Fam As String
Fam = Me.ComboBox8.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
[/vba]

Да кстати Александр )))) у меня получилось даже прописать код (ну как прописать разобраться как он прописывался в другом файле ) и теперь при нажатии кнопки добавить запись на форме все данные с формы вписываются в таблицу))))))) СУПЕР ПРОСТО!!!
Помогите разобраться почему ругается макрос выпадающий список ((((
[img][/img]

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

Excel 2010
_Boroda_, я понял свою ошибку )))) спасибо огромное....


Кто бы ты ни был, мир в твоих руках
 
Ответить
Сообщение_Boroda_, я понял свою ошибку )))) спасибо огромное....

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

Excel 2010
Да что такое то (((( то вроде бы сделаешь работает код не ругается (((( потом начинаешь заполнять форму и тут нахожу ошибку что выпадающие списки некоторые не работают ((((
проверяю диспетчер имен нахожу ошибки правлю и возвращаюсь к проблеме описанной в посте
Цитата
Дата: Пятница, 22.07.2016, 13:30 | Сообщение № 28

ПОМОГИТЕ ПОЖАЛУЙСТА в чем моя ошибка?????
К сообщению приложен файл: 0574710.xlsb (94.7 Kb)


Кто бы ты ни был, мир в твоих руках
 
Ответить
СообщениеДа что такое то (((( то вроде бы сделаешь работает код не ругается (((( потом начинаешь заполнять форму и тут нахожу ошибку что выпадающие списки некоторые не работают ((((
проверяю диспетчер имен нахожу ошибки правлю и возвращаюсь к проблеме описанной в посте
Цитата
Дата: Пятница, 22.07.2016, 13:30 | Сообщение № 28

ПОМОГИТЕ ПОЖАЛУЙСТА в чем моя ошибка?????

Автор - lebensvoll
Дата добавления - 22.07.2016 в 14:11
_Boroda_ Дата: Пятница, 22.07.2016, 14:38 | Сообщение № 31
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16666
Репутация: 6478 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Предположу, что Вам нужен файл MSCOMCT2.OCX
В самом низу вот здесь https://msdn.microsoft.com/en-us/library/aa733656(v=vs.60).aspx
А здесь вопрос по этому поводу Майкрософту http://answers.microsoft.com/en-us....?auth=1

Ну а здесь вообще почитать можно
Could not load an object because it is not available on this machine


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеПредположу, что Вам нужен файл MSCOMCT2.OCX
В самом низу вот здесь https://msdn.microsoft.com/en-us/library/aa733656(v=vs.60).aspx
А здесь вопрос по этому поводу Майкрософту http://answers.microsoft.com/en-us....?auth=1

Ну а здесь вообще почитать можно
Could not load an object because it is not available on this machine

Автор - _Boroda_
Дата добавления - 22.07.2016 в 14:38
Матраскин Дата: Пятница, 22.07.2016, 16:04 | Сообщение № 32
Группа: Друзья
Ранг: Обитатель
Сообщений: 375
Репутация: 81 ±
Замечаний: 0% ±

20xx
lebensvoll,

Код
=INDEX('Привезли цемент'!$B:$B,2):INDEX('Привезли цемент'!$B:$B,MAX(COUNTA('Привезли цемент'!$B:$B),2))


ковычки потеряли


в интернете опять кто-то не прав
 
Ответить
Сообщениеlebensvoll,

Код
=INDEX('Привезли цемент'!$B:$B,2):INDEX('Привезли цемент'!$B:$B,MAX(COUNTA('Привезли цемент'!$B:$B),2))


ковычки потеряли

Автор - Матраскин
Дата добавления - 22.07.2016 в 16:04
lebensvoll Дата: Пятница, 22.07.2016, 16:10 | Сообщение № 33
Группа: Проверенные
Ранг: Старожил
Сообщений: 1002
Репутация: 30 ±
Замечаний: 0% ±

Excel 2010
Матраскин, да есть такое (((( да я иной раз просто жуть как не внимателен (((( из за этого потом тридцать три раза все лопачу ))))) хотя тут есть и плюсы ))))) зато материал столько же раз через себя прогоняю ))))


Кто бы ты ни был, мир в твоих руках
 
Ответить
СообщениеМатраскин, да есть такое (((( да я иной раз просто жуть как не внимателен (((( из за этого потом тридцать три раза все лопачу ))))) хотя тут есть и плюсы ))))) зато материал столько же раз через себя прогоняю ))))

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

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