2010-01-12 18 views
0

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

1

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.

+0

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

2

Essayez cette option pour désactiver:

Application.EnableEvents = false

Et cela se rallume:

Application.EnableEvents = true

+0

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

+0

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

+0

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

2

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