Проблема со встроенной формой ActiveX ComboBox в электронной таблице, где:
Однако, когда ячейка / фигура выбрана на листе, значение ComboBox возвращается к предыдущему значению на долю секунды, прежде чем вернуться к новому значению.
Проблема, потому что: если кнопка для макроса нажата после изменения значения ComboBox, старое значение ComboBox отображается во время выполнения макроса, а не новое значение
Вопрос: Есть ли способ вызвать это событие (возврат к старому значению перед отображением нового значения) программно?
Я пробовал использовать следующее в событии Change для ComboBox, а также в макросе, который вызывается другой фигурой на листе:
Сделал еще немного поиска и нашел этот вопрос Поле со списком Excel ActiveX показывает предыдущий выбор при потере фокуса с той же проблемой
Я воспроизвел проблему в совершенно новой книге. Обратите внимание, что я использую ActiveX ComboBox, у которого есть связанная ячейка, значение которой не имеет этой проблемы «мерцания» - эта проблема есть только у фактического ComboBox. Еще одно замечание: ComboBox использует диапазон списка для заполнения своих значений.
хорошо смог воспроизвести


Начнем отсюда:
Я создал comboBox с различными фруктами внутри.
Я нажал на грушу. Потом ананас. затем щелкнул ячейку A1, запустив событие потери фокуса.
Private Sub ComboBox1_LostFocus()
Debug.Print ComboBox1.Value
Debug.Print ComboBox1.Value
Debug.Print ComboBox1.Value
End Sub
Это был текст в моем непосредственном окне: ананас ананас ананас
Это заставляет меня думать, что это проблема рендеринга, а не изменение значения, хотя, возможно, это происходит так быстро, что мой debug.print этого не улавливает.
Интересно, что если вы выполняете вызовы изнутри VBA, вспышка не происходит:
Sub Main()
ComboBox1.Value = "mango"
Range("A1").Select
End Sub
И если ты просто убежишь
ComboBox1.Value = "mango"
затем щелкните рабочий лист и выберите ячейку
ха-ха, интересное время - я только что ответил на свой вопрос выше. LostFocus был решением
немного не обновлял экран и ничего не видел. Я собираюсь попытаться замедлить программу, изолировать это немного дальше, может быть, с помощью application.sleep или чего-то еще и попытаться захватить idk, нужно изучить это
В ComboBox добавлено событие LostFocus, в котором была строка, выбирающая ячейку. Это убирало «мерцание» к предыдущему значению, когда была выбрана другая ячейка на листе, а также приводило к «мерцанию» значения ComboBox обратно к новому значению после «мерцания» к старому значению при нажатии кнопки команды после изменения значение ComboBox ...
Поэтому это решило мою проблему (в основном - не удалось предотвратить «мерцание» при запуске другого макроса с помощью кнопки команды, но, по крайней мере, значение не остается на старом значении, пока выполняется другой макрос)
Идея пришла из этой ветки: Какое событие запускается, когда пользователь выбирает значение из раскрывающегося списка ComboBox (ActiveX)?
У меня есть одно решение, которое можно обойти.
Я вставил метку ActiveX в рабочий лист (в том же месте, что и ComboBox) и установил состояние меток visible на False.
Каждый раз, когда раскрывающийся список закрывается, фокус устанавливается на невидимую метку.
Сначала глобальная переменная.
Public DropDownBegin As Boolean
Тогда подпрограмма
Private Sub ComboBox1_DropButtonClick()
DropDownBegin = Not DropDownBegin
If Not DropDownBegin Then
ActiveSheet.Shapes("Label1").OLEFormat.Object.TopLeftCell.Select
End If
End Sub
возникли проблемы с репликацией, настроены ли у вас какие-либо события рабочего листа или события поля со списком?