Пытался сделать следующее: есть два списка, в первом, при выборе первого значения, должен раскрываться второй список, чтобы сразу можно было выбрать значения и в нём. В коде реализовал это через процедуру ComboBox1_Change, когда вводиться первое значение фокус переводиться на второй ComboBox и раскрывается его список.
Проблема в том что при попытки выполнить эти действия программ просто вылетает. В поисках причины возникновения бага я выяснил что это происходит лишь когда код реализуется в процедуре первого ComboBox. Если запускать этот код, скажем, через ToggleButton1, то всё работает как надо.
Так что вопросы следующие: у всех ли этот баг возникает, и если да, то есть ли способ исправить его?
Ссылка удалена администрацией. Причина: Нарушение правил форума п.3
Всем привет)
Пытался сделать следующее: есть два списка, в первом, при выборе первого значения, должен раскрываться второй список, чтобы сразу можно было выбрать значения и в нём. В коде реализовал это через процедуру ComboBox1_Change, когда вводиться первое значение фокус переводиться на второй ComboBox и раскрывается его список.
Проблема в том что при попытки выполнить эти действия программ просто вылетает. В поисках причины возникновения бага я выяснил что это происходит лишь когда код реализуется в процедуре первого ComboBox. Если запускать этот код, скажем, через ToggleButton1, то всё работает как надо.
Так что вопросы следующие: у всех ли этот баг возникает, и если да, то есть ли способ исправить его?
Ссылка удалена администрацией. Причина: Нарушение правил форума п.3ZetMenChavo
Проверил на 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] Вроде, работает конструкция...
Проверил на 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
Gustav, спасиб за вариант без краша проги , но хотелось бы вариант без использования SendKeys. А то из-за него NumLook на клаве своей жизнью живет. Учитывая что в конечной userform нужно будет так же вводить цифры, данное обстоятельство будет сильно раздражать.
Gustav, спасиб за вариант без краша проги , но хотелось бы вариант без использования SendKeys. А то из-за него NumLook на клаве своей жизнью живет. Учитывая что в конечной userform нужно будет так же вводить цифры, данное обстоятельство будет сильно раздражать.ZetMenChavo
Сообщение отредактировал ZetMenChavo - Среда, 13.03.2024, 18:45
Такое ощущение, что системе не нравится выполнять 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]
Такое ощущение, что системе не нравится выполнять 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
С этим кодом таже ситуация у NumLook, лампочка мигает только так. А то что системе не нравиться выполнять такой код в событии ComboBox1_Change, похоже на правду. При создании другой формы, где ещё упростить форму и код попытался чтоб корень проблемы найти, забыл выключить ShowModal, и, вместо вылета проги, вылезло окно ошибки.
Ссылка удалена администрацией. Причина: Нарушение правил форума п.3
С этим кодом таже ситуация у NumLook, лампочка мигает только так. А то что системе не нравиться выполнять такой код в событии ComboBox1_Change, похоже на правду. При создании другой формы, где ещё упростить форму и код попытался чтоб корень проблемы найти, забыл выключить ShowModal, и, вместо вылета проги, вылезло окно ошибки.
Ссылка удалена администрацией. Причина: Нарушение правил форума п.3ZetMenChavo
Сообщение отредактировал ZetMenChavo - Четверг, 14.03.2024, 03:30
Serge_007, так то под ссылками подразумевается текст, при наведении на который появляется рука, и нажатие на который переносит на указанный url. А скриншоты никуда не переносят. Да и как тогда вообще скрины вставлять, если для вставки запрашивается именно url картинки. Они в любом случае будут на другие сайты вести.
Инструкцию тогда в правилах распишите как правильно скрины вставлять, чтоб такие непонятки не возникали.
Serge_007, так то под ссылками подразумевается текст, при наведении на который появляется рука, и нажатие на который переносит на указанный url. А скриншоты никуда не переносят. Да и как тогда вообще скрины вставлять, если для вставки запрашивается именно url картинки. Они в любом случае будут на другие сайты вести.
Инструкцию тогда в правилах распишите как правильно скрины вставлять, чтоб такие непонятки не возникали.ZetMenChavo
Сообщение отредактировал ZetMenChavo - Суббота, 16.03.2024, 01:18
ZetMenChavo, Не мне и не вам решать. Так где же ваши скрины о которых вы жаловались что модераторы удалили? Вы по сути своего вопроса говорите а не то что надо или не надо удалять! Для этого есть другой раздел на данном ресурсе, вот там и задавайте ваши вопросы.
ZetMenChavo, Не мне и не вам решать. Так где же ваши скрины о которых вы жаловались что модераторы удалили? Вы по сути своего вопроса говорите а не то что надо или не надо удалять! Для этого есть другой раздел на данном ресурсе, вот там и задавайте ваши вопросы.MikeVol
Ученик. Одесса - Украина
Сообщение отредактировал MikeVol - Суббота, 16.03.2024, 14:48