Excel VBA - приостановить события при обновлении ComboBox - PullRequest
0 голосов
/ 13 января 2010

У меня есть приложение, написанное на VBA для Excel, которое принимает живой поток данных. Всякий раз, когда происходит изменение в данных, в VBA запускаются различные события.

У меня также есть несколько пользовательских форм с комбинированными списками. Моя проблема в том, что, когда я нажимаю стрелку вниз на ComboBox и пытаюсь сделать выбор, в тот момент, когда я получаю обновление из потока данных, ComboBox сбрасывается. То, что я хотел бы сделать, это приостановить события, пока я делаю свой выбор в ComboBox, а затем отменить его, когда я закончу. Как мне сгенерировать эту функциональность?

Ответы [ 3 ]

2 голосов
/ 18 апреля 2011

Чтобы сделать паузу и показать сообщение и продолжать работать над чем-то во время паузы. наконец нажмите кнопку

Public Ready As Boolean

Private Sub Command1_Click()
Ready = True
End Sub

Private Sub Form_Load()
Me.Show
Ready = False
Call Wait
Label1.Visible = True
End Sub

Public Function Wait()
Do While Ready = False
    DoEvents
Loop
End Function
2 голосов
/ 13 января 2010

Попробуйте отключить:

application.enableevents = false

И это снова включить:

application.enableevents = true

1 голос
/ 14 января 2010

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

Private bLock as boolean  ' declare at module level

' When a user clicks on the combobox
Private Sub DropDownArrow_Click()  ' or cboComboBox_Click()
    bLocked = True
End Sub

' This procedure is the one that does the updating from the data source.
' If the flag is set, do not touch the comboboxes.
Private Sub subUpdateComboBoxes()
    If Not bLocked then
        ' Update the comboboxes
    End If
End Sub


' When the selection is made, or the focus changes from the combobox.
' check if a selection is made and reset the flag.
Private Sub cboComboBox_AfterUpdate()  ' Or LostFucus or something else
    if Format(cboComboBox.Value) <> vbNullString Then
        bLocked = False
    End If
End Sub

Надеюсь, это поможет.

...