J'ai une application écrite en VBA pour Excel qui prend en charge un flux de données en direct. Chaque fois qu'il y a un changement dans les données, divers événements sont déclenchés dans VBA. J'ai aussi quelques UserForm avec ComboBoxes sur eux. Mon problème est que lorsque je clique sur la flèche vers le bas sur le ComboBox et essaie de faire une sélection, le moment où je reçois une mise à jour du flux de données, les réinitialisations ComboBox. Ce que je voudrais faire est de mettre en pause les événements pendant que je fais ma sélection dans le ComboBox et de le réactiver quand j'ai terminé. Comment puis-je générer cette fonctionnalité?Excel VBA - Suspendre des événements lors de la mise à jour de ComboBox
Répondre
Peut-être que vous pouvez mettre un drapeau pour contourner la veille de mise à jour nt sur votre combobox jusqu'à ce qu'une sélection soit faite.
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
Espérons que ça aide.
Essayez cette option pour désactiver:
Application.EnableEvents = false
Et cela se rallume:
Application.EnableEvents = true
Donc, je suppose que je mettrais Application.EnableEvents false dans la procédure de DropDownArrow dans la zone de liste déroulante, mais je ne veux pas les événements à réactivées qu'après une sélection a été made – Shaka
Il serait utile de voir une partie de votre code pour vraiment savoir ce qui se passe. La vraie question est: pourquoi la combobox est-elle réinitialisée? pouvez-vous poster le code? – guitarthrower
J'ai été capable de trouver le problème. J'ai eu une fonction écrite pour mettre à jour le userform. Apparemment, cette fonction a également réinitialisé le ComboBox. En limitant les appels à la fonction, j'ai pu résoudre le problème. Merci de m'avoir indiqué la bonne direction. – Shaka
Pour mettre en pause et afficher un message et continuer à travailler pendant la pause. enfin appuyer sur le bouton
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
J'ai été capable de comprendre ce qui provoquait la réinitialisation de la ComboBox, mais j'aime vraiment votre solution parce que le fait de cliquer sur la flèche vers le bas met en pause les mises à jour. Merci pour la suggestion. – Shaka