Поле со списком Excel ActiveX отображает предыдущую проблему со значением

Проблема со встроенной формой ActiveX ComboBox в электронной таблице, где:

  • При изменении значения в ComboBox значение изменяется правильно.
  • Однако, когда ячейка / фигура выбрана на листе, значение ComboBox возвращается к предыдущему значению на долю секунды, прежде чем вернуться к новому значению.

  • Проблема, потому что: если кнопка для макроса нажата после изменения значения ComboBox, старое значение ComboBox отображается во время выполнения макроса, а не новое значение

Вопрос: Есть ли способ вызвать это событие (возврат к старому значению перед отображением нового значения) программно?

Я пробовал использовать следующее в событии Change для ComboBox, а также в макросе, который вызывается другой фигурой на листе:

  • Расчет рабочего листа
  • Выбор / активация ячейки
  • ScreenUpdating = false, ScreenUpdating = true

Сделал еще немного поиска и нашел этот вопрос Поле со списком Excel ActiveX показывает предыдущий выбор при потере фокуса с той же проблемой

возникли проблемы с репликацией, настроены ли у вас какие-либо события рабочего листа или события поля со списком?

learnAsWeGo 18.07.2018 21:41

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

ericauv 18.07.2018 21:50

хорошо смог воспроизвести

learnAsWeGo 18.07.2018 22:27
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
3
3
946
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Начнем отсюда:

Я создал 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 был решением

ericauv 18.07.2018 22:53

немного не обновлял экран и ничего не видел. Я собираюсь попытаться замедлить программу, изолировать это немного дальше, может быть, с помощью application.sleep или чего-то еще и попытаться захватить idk, нужно изучить это

learnAsWeGo 18.07.2018 22:58
Ответ принят как подходящий

В 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

Другие вопросы по теме