Excel VBA case à cocher et cliquez sur modifier les événements de la même manière?
J'ai 5 cases à cocher pour définir certaines options pour une macro, l'un d'eux est un Sélectionner/Désélectionner la case Tout. Je veux créer quelque chose de semblable à ce que vous avez sur le web à base de boîtes aux lettres lorsque vous sélectionnez mails à supprimer ou marquer comme lu, etc.
Quand je vérifie le Sélectionner/Désélectionner la case Tout, je tourne le reste des cases de valeurs true et vice-versa quand j'ai décocher. C'est ok.
Le problème vient quand je veux valider que si tout n'est pas cochée et un par un, j'ai cocher les autres cases à cocher, si à la fin je vérifie tous, puis le Sélectionner/Désélectionner la case Tout tourne à la vérification. Et vice-versa, ce qui signifie que si tout est coché et puis j'ai décocher l'un des quatre autres, puis-je désactiver le "Tout" de la case à false (désactivé).
Mais il semble que même quand je viens de mettre la valeur, par exemple Option1Checkbox.valeur = True, dans le SelectAllCheckbox_Click cas, il déclenche à la fois la Option1Checkbox_Click et Option1Checkbox_Change événements.
Ne devrait-elle pas simplement déclencher l'événement de Changement depuis que je ne suis pas vraiment en cliquant sur cette case?
Ce qui se passe, c'est que j'ai vérifier le SelectAll, donc il s'avère Option1 à des bagages, mais en faisant cela, Option1 déclenche aussi l'événement click de sorte qu'il décoche ce qui déclenche l'événement click de nouveau et puis décoche une fois encore, la case à cocher qui, à la fin, nous laisse tout décoché, comme au début. Espérons que cette partie est assez clair.
Comment puis-je éviter ce problème? Comment puis-je vérifier que seul le Changement événement est déclenché et pas l'événement de Clic?
Quelqu'un a déjà eu un tel arrangement de cases à cocher et a eu un problème similaire? Ou comment avez-vous réussi à le faire sans que le comportement que je reçois?
Les cases à cocher ne sont pas sur un formulaire, mais simplement sur une feuille de calcul. Ils sont des contrôles ActiveX. Et ce que j'ai, c'est rien de compliqué:
Private Sub SelectAll_Click()
Option1Checkbox.Value = SelectAll.Value
Option2Checkbox.Value = SelectAll.Value
Option3Checkbox.Value = SelectAll.Value
Option4Checkbox.Value = SelectAll.Value
End Sub
Ensuite les options de cases à cocher sur les événements ressembler à ceci:
Private Sub Option1Checkbox_Click()
If Option1Checkbox.Value = True And Option2Checkbox.Value = True And Option3Checkbox.Value = True And Option4Checkbox.Value = True Then
SelectAll.Value = True
Else
SelectAll.Value = False
End If
End Sub
C'est assez simple, le plus gros problème que je vois est que les appels aux événements de clic lorsque la case n'est pas fait, cliquez.
Merci pour votre aide.
- +1 je viens de rencontré le même problème de la conception d'un formulaire utilisateur dans Excel.
- J'ai essayé de désactiver les événements avec
Application.EnableEvents = False
avant de changer la case de valeur, mais encore, elle a déclenché l'événement Click. Je ne sais pas pourquoi....?
Vous devez vous connecter pour publier un commentaire.
Je voudrais définir une variable locale (celle qui est définie à l'extérieur de la subs) et régler/vérifier que
puis cliquez sur votre routines devrait ressembler à ceci:
Pour résoudre ce problème,
dans votre principal objet userform (dans cet exemple, il est appelé Mainform) ajouter ce code:
Privé Sous Mainform_Initialize()
stateCheckbox = True
End Sub
Créer un module pour stocker vos variables globales (par exemple.
globalVariables
), et ajoutez les éléments suivants, qui se tient à l'état de la case à cocher:Public stateCheckbox as Boolean
Dans le _click événement de votre case, enveloppez votre code comme ceci:
si stateCheckbox = faux alors
{ quel que soit votre code }
Autre chose:
stateCheckbox = false
fin si
J'ai eu le même problème que décrit ci-dessus. J'ai reconnu que, à chaque changement de Case à cocher, peu importe si par clic ou par l'évolution de la
Checkbox.Value
, à chaque fois que le premier feu de laCheckbox_Change
événement, puis l'Checkbox_Click
de l'événement , à condition que l'un de ces événements sont déclarés.Je voudrais donc vous recommandons d'utiliser seulement un événement pour chaque case, p.e. le
Checkbox_Change
événement, et de vérifier si la case a été modifié par clic ou par déclaration au début de laSub
. Cela peut être fait en comparant lesActiveControl.Name
avec leCheckbox.Name
:Je voudrais écrire un sous de vérifier si Option1 à Option4 sont tous activés dans une instruction if. Dans un deuxième si statemement, je voudrais vérifier pour voir si elles sont toutes fausses:
End Sub
Alors je dirais que c'est des sous à la fin de chaque événement OnClick pour les cases à cocher.