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

Вход

Регистрация

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

 

= Мир MS Excel/Баг раскрывания списка через другой ComboBox - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Баг раскрывания списка через другой ComboBox (Макросы/Sub)
Баг раскрывания списка через другой ComboBox
ZetMenChavo Дата: Среда, 13.03.2024, 10:22 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 159
Репутация: 7 ±
Замечаний: 0% ±

Excel 2010
Всем привет)

Пытался сделать следующее: есть два списка, в первом, при выборе первого значения, должен раскрываться второй список, чтобы сразу можно было выбрать значения и в нём. В коде реализовал это через процедуру ComboBox1_Change, когда вводиться первое значение фокус переводиться на второй ComboBox и раскрывается его список.

Проблема в том что при попытки выполнить эти действия программ просто вылетает. В поисках причины возникновения бага я выяснил что это происходит лишь когда код реализуется в процедуре первого ComboBox. Если запускать этот код, скажем, через ToggleButton1, то всё работает как надо.

Так что вопросы следующие: у всех ли этот баг возникает, и если да, то есть ли способ исправить его?

Ссылка удалена администрацией. Причина: Нарушение правил форума п.3
К сообщению приложен файл: kniga2.xlsm (17.2 Kb)


Сообщение отредактировал ZetMenChavo - Среда, 13.03.2024, 10:23
 
Ответить
СообщениеВсем привет)

Пытался сделать следующее: есть два списка, в первом, при выборе первого значения, должен раскрываться второй список, чтобы сразу можно было выбрать значения и в нём. В коде реализовал это через процедуру ComboBox1_Change, когда вводиться первое значение фокус переводиться на второй ComboBox и раскрывается его список.

Проблема в том что при попытки выполнить эти действия программ просто вылетает. В поисках причины возникновения бага я выяснил что это происходит лишь когда код реализуется в процедуре первого ComboBox. Если запускать этот код, скажем, через ToggleButton1, то всё работает как надо.

Так что вопросы следующие: у всех ли этот баг возникает, и если да, то есть ли способ исправить его?

Ссылка удалена администрацией. Причина: Нарушение правил форума п.3

Автор - ZetMenChavo
Дата добавления - 13.03.2024 в 10:22
Gustav Дата: Среда, 13.03.2024, 12:58 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2748
Репутация: 1137 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
Проверил на Excel 2013 - ошибка воспроизводится. Система падает при выполнении оператора:
[vba]
Код
ComboBox2.DropDown
[/vba]в событии ComboBox1_Change.

В качестве пилюли можно попробовать заменить указанный оператор на такую последовательность:
[vba]
Код
'имитация раскрытия выпадающего списка пользователем
SendKeys "%{DOWN}"
If ComboBox2.ListIndex > 0 Then
    'имитация перемещения в списке к текущему значению поля
    SendKeys "{DOWN " & ComboBox2.ListIndex & "}"
End If
[/vba]
Т.е. придать имеющейся ветви Else оператора If следующий вид:
[vba]
Код
Else '===\\\===
    Me.Width = 250
    ComboBox2.SetFocus
    'ComboBox2.DropDown - комментируем эту строку и добавляем 4 строки ниже
    SendKeys "%{DOWN}"
    If ComboBox2.ListIndex > 0 Then
        SendKeys "{DOWN " & ComboBox2.ListIndex & "}"
    End If
End If
[/vba]
Вроде, работает конструкция...


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеПроверил на Excel 2013 - ошибка воспроизводится. Система падает при выполнении оператора:
[vba]
Код
ComboBox2.DropDown
[/vba]в событии ComboBox1_Change.

В качестве пилюли можно попробовать заменить указанный оператор на такую последовательность:
[vba]
Код
'имитация раскрытия выпадающего списка пользователем
SendKeys "%{DOWN}"
If ComboBox2.ListIndex > 0 Then
    'имитация перемещения в списке к текущему значению поля
    SendKeys "{DOWN " & ComboBox2.ListIndex & "}"
End If
[/vba]
Т.е. придать имеющейся ветви Else оператора If следующий вид:
[vba]
Код
Else '===\\\===
    Me.Width = 250
    ComboBox2.SetFocus
    'ComboBox2.DropDown - комментируем эту строку и добавляем 4 строки ниже
    SendKeys "%{DOWN}"
    If ComboBox2.ListIndex > 0 Then
        SendKeys "{DOWN " & ComboBox2.ListIndex & "}"
    End If
End If
[/vba]
Вроде, работает конструкция...

Автор - Gustav
Дата добавления - 13.03.2024 в 12:58
ZetMenChavo Дата: Среда, 13.03.2024, 18:44 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 159
Репутация: 7 ±
Замечаний: 0% ±

Excel 2010
Gustav, спасиб за вариант без краша проги :) , но хотелось бы вариант без использования SendKeys. А то из-за него NumLook на клаве своей жизнью живет. Учитывая что в конечной userform нужно будет так же вводить цифры, данное обстоятельство будет сильно раздражать.


Сообщение отредактировал ZetMenChavo - Среда, 13.03.2024, 18:45
 
Ответить
СообщениеGustav, спасиб за вариант без краша проги :) , но хотелось бы вариант без использования SendKeys. А то из-за него NumLook на клаве своей жизнью живет. Учитывая что в конечной userform нужно будет так же вводить цифры, данное обстоятельство будет сильно раздражать.

Автор - ZetMenChavo
Дата добавления - 13.03.2024 в 18:44
Gustav Дата: Среда, 13.03.2024, 20:32 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2748
Репутация: 1137 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
Такое ощущение, что системе не нравится выполнять SetFocus и DropDown в событии ComboBox1_Change. Попробовал их перенести в другое событие - ComboBox1_Exit. А чтобы "подтолкнуть" Exit из ComboBox1 использовал всё-таки SendKeys с одной кнопкой TAB. Не думаю, что она как-то сильно повлияет на статус NumLock и будет мешать, но зато Exit она инициирует почти естественным образом (как будто пользователь нажал). SetFocus и DropDown для ComboBox2 внутри ComboBox1_Exit при этом выполнились без проблем.

Вот как я перераспределил код между существующей процедурой ComboBox1_Change и добавленной ComboBox1_Exit, т.е. фактически перенес в _Exit вызовы SetFocus и DropDown вместе с тем же условием If:
[vba]
Код
Private Sub ComboBox1_Change()
    If ComboBox1.ListIndex Then
        Me.Width = 100
    Else '===\\\===
        Me.Width = 250
        SendKeys "{TAB}"
        'ComboBox2.SetFocus
        'ComboBox2.DropDown
    End If
End Sub
Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If ComboBox1.ListIndex Then
        'Me.Width = 100
    Else '===\\\===
        'Me.Width = 250
        ComboBox2.SetFocus
        ComboBox2.DropDown
    End If
End Sub
[/vba]


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеТакое ощущение, что системе не нравится выполнять SetFocus и DropDown в событии ComboBox1_Change. Попробовал их перенести в другое событие - ComboBox1_Exit. А чтобы "подтолкнуть" Exit из ComboBox1 использовал всё-таки SendKeys с одной кнопкой TAB. Не думаю, что она как-то сильно повлияет на статус NumLock и будет мешать, но зато Exit она инициирует почти естественным образом (как будто пользователь нажал). SetFocus и DropDown для ComboBox2 внутри ComboBox1_Exit при этом выполнились без проблем.

Вот как я перераспределил код между существующей процедурой ComboBox1_Change и добавленной ComboBox1_Exit, т.е. фактически перенес в _Exit вызовы SetFocus и DropDown вместе с тем же условием If:
[vba]
Код
Private Sub ComboBox1_Change()
    If ComboBox1.ListIndex Then
        Me.Width = 100
    Else '===\\\===
        Me.Width = 250
        SendKeys "{TAB}"
        'ComboBox2.SetFocus
        'ComboBox2.DropDown
    End If
End Sub
Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If ComboBox1.ListIndex Then
        'Me.Width = 100
    Else '===\\\===
        'Me.Width = 250
        ComboBox2.SetFocus
        ComboBox2.DropDown
    End If
End Sub
[/vba]

Автор - Gustav
Дата добавления - 13.03.2024 в 20:32
ZetMenChavo Дата: Четверг, 14.03.2024, 03:30 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 159
Репутация: 7 ±
Замечаний: 0% ±

Excel 2010
С этим кодом таже ситуация у NumLook, лампочка мигает только так. А то что системе не нравиться выполнять такой код в событии ComboBox1_Change, похоже на правду. При создании другой формы, где ещё упростить форму и код попытался чтоб корень проблемы найти, забыл выключить ShowModal, и, вместо вылета проги, вылезло окно ошибки.

Ссылка удалена администрацией. Причина: Нарушение правил форума п.3


Сообщение отредактировал ZetMenChavo - Четверг, 14.03.2024, 03:30
 
Ответить
СообщениеС этим кодом таже ситуация у NumLook, лампочка мигает только так. А то что системе не нравиться выполнять такой код в событии ComboBox1_Change, похоже на правду. При создании другой формы, где ещё упростить форму и код попытался чтоб корень проблемы найти, забыл выключить ShowModal, и, вместо вылета проги, вылезло окно ошибки.

Ссылка удалена администрацией. Причина: Нарушение правил форума п.3

Автор - ZetMenChavo
Дата добавления - 14.03.2024 в 03:30
ZetMenChavo Дата: Пятница, 15.03.2024, 11:18 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 159
Репутация: 7 ±
Замечаний: 0% ±

Excel 2010
Чего это админы скрины убрали? В этом правиле форума не нашёл такого запрета, да и раньше скрины не удалялись.
 
Ответить
СообщениеЧего это админы скрины убрали? В этом правиле форума не нашёл такого запрета, да и раньше скрины не удалялись.

Автор - ZetMenChavo
Дата добавления - 15.03.2024 в 11:18
Serge_007 Дата: Пятница, 15.03.2024, 12:36 | Сообщение № 7
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Цитата Правила форума, 18.08.2010 в 09:53, в сообщении № 1 ()
- Запрещается выкладывать ссылки на файлы, выложенные на сторонних ресурсах


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Цитата Правила форума, 18.08.2010 в 09:53, в сообщении № 1 ()
- Запрещается выкладывать ссылки на файлы, выложенные на сторонних ресурсах

Автор - Serge_007
Дата добавления - 15.03.2024 в 12:36
ZetMenChavo Дата: Суббота, 16.03.2024, 01:18 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 159
Репутация: 7 ±
Замечаний: 0% ±

Excel 2010
Serge_007, так то под ссылками подразумевается текст, при наведении на который появляется рука, и нажатие на который переносит на указанный url. А скриншоты никуда не переносят. Да и как тогда вообще скрины вставлять, если для вставки запрашивается именно url картинки. Они в любом случае будут на другие сайты вести.

Инструкцию тогда в правилах распишите как правильно скрины вставлять, чтоб такие непонятки не возникали.


Сообщение отредактировал ZetMenChavo - Суббота, 16.03.2024, 01:18
 
Ответить
Сообщение Serge_007, так то под ссылками подразумевается текст, при наведении на который появляется рука, и нажатие на который переносит на указанный url. А скриншоты никуда не переносят. Да и как тогда вообще скрины вставлять, если для вставки запрашивается именно url картинки. Они в любом случае будут на другие сайты вести.

Инструкцию тогда в правилах распишите как правильно скрины вставлять, чтоб такие непонятки не возникали.

Автор - ZetMenChavo
Дата добавления - 16.03.2024 в 01:18
MikeVol Дата: Суббота, 16.03.2024, 11:15 | Сообщение № 9
Группа: Проверенные
Ранг: Обитатель
Сообщений: 315
Репутация: 61 ±
Замечаний: 0% ±

Excel LTSC 2021 EN
ZetMenChavo, Смотрим мой скриншот.
К сообщению приложен файл: 5876437.jpg (25.6 Kb)


Ученик.
 
Ответить
СообщениеZetMenChavo, Смотрим мой скриншот.

Автор - MikeVol
Дата добавления - 16.03.2024 в 11:15
ZetMenChavo Дата: Суббота, 16.03.2024, 14:16 | Сообщение № 10
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 159
Репутация: 7 ±
Замечаний: 0% ±

Excel 2010
MikeVol, тогда эту кнопку надо удалять.
К сообщению приложен файл: 9741365.png (74.5 Kb)
 
Ответить
Сообщение MikeVol, тогда эту кнопку надо удалять.

Автор - ZetMenChavo
Дата добавления - 16.03.2024 в 14:16
MikeVol Дата: Суббота, 16.03.2024, 14:43 | Сообщение № 11
Группа: Проверенные
Ранг: Обитатель
Сообщений: 315
Репутация: 61 ±
Замечаний: 0% ±

Excel LTSC 2021 EN
ZetMenChavo, Не мне и не вам решать. Так где же ваши скрины о которых вы жаловались что модераторы удалили? Вы по сути своего вопроса говорите а не то что надо или не надо удалять! Для этого есть другой раздел на данном ресурсе, вот там и задавайте ваши вопросы.


Ученик.

Сообщение отредактировал MikeVol - Суббота, 16.03.2024, 14:48
 
Ответить
СообщениеZetMenChavo, Не мне и не вам решать. Так где же ваши скрины о которых вы жаловались что модераторы удалили? Вы по сути своего вопроса говорите а не то что надо или не надо удалять! Для этого есть другой раздел на данном ресурсе, вот там и задавайте ваши вопросы.

Автор - MikeVol
Дата добавления - 16.03.2024 в 14:43
Serge_007 Дата: Суббота, 16.03.2024, 18:57 | Сообщение № 12
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
под ссылками подразумевается текст
Под ссылками подразумеваются ссылки

как тогда вообще скрины вставлять
Как вложения

Инструкцию тогда в правилах распишит
Да есть все инструкции в правилах, но их ведь читать надо
А Вы не читали


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
под ссылками подразумевается текст
Под ссылками подразумеваются ссылки

как тогда вообще скрины вставлять
Как вложения

Инструкцию тогда в правилах распишит
Да есть все инструкции в правилах, но их ведь читать надо
А Вы не читали

Автор - Serge_007
Дата добавления - 16.03.2024 в 18:57
Serge_007 Дата: Суббота, 16.03.2024, 19:02 | Сообщение № 13
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
эту кнопку надо удалять.
Эта кнопка как раз позволяет вставить картинку в тело поста
Зачем её удалять?!


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
эту кнопку надо удалять.
Эта кнопка как раз позволяет вставить картинку в тело поста
Зачем её удалять?!

Автор - Serge_007
Дата добавления - 16.03.2024 в 19:02
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Баг раскрывания списка через другой ComboBox (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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