VBA de la Feuille de calcul événement de changement de voie de contournement?
Je suis la fixation d'une feuille de calcul. Le programmeur a fait une macro pour chaque feuille à feu lors de la feuille est changé. C'est bien parce que c'couleur coordonne la feuille de détails lors de l'ajout de nouvelles informations, donc je tiens à garder cette fonction.
J'ai écrit une macro qui trie les données et permet le retrait et l'ajout de nouveaux employés, cela est en conflit avec l'événement de changement de macro et est à l'origine de ma macro avoir des erreurs si elles sont à la fois opérationnelle.
Q. Est-il un moyen de contourner la feuille de calcul événement de changement alors que la macro est en cours d'exécution, puis l'ont en place encore une fois la macro est terminée?
Voici le code pour l'événement change.
Private Sub Worksheet_Change(ByVal target As Excel.Range, skip_update As Boolean)
If skip_update = False Then
Call PaintCell(target)
End If
End Sub
Ma macro est d'élever les erreurs quand je me réfère à des feuilles de calcul ou des plages.
OriginalL'auteur user1545643 | 2013-04-02
Vous devez vous connecter pour publier un commentaire.
Je pense que vous voulez les
EnableEvents
propriété de laApplication
objet. Lorsque vous définissezEnableEvents
de Faux, puis plus rien, votre code ne sera le déclencheur d'événements et aucun des autres cas code sera exécuté. Si, par exemple, votre code modifie une cellule, il devrait normalement déclencher le Changement de l'événement ou de l'événement SheetChange. Toutefois, si vous avez la structure de cetteensuite de changer A1 ne déclenchent pas tous les événements.
Parfois, il est utile d'avoir votre code d'événement déclencheur de code et parfois il ne l'est pas. Utilisation
EnableEvents
lorsque vous voulez l'empêcher.OriginalL'auteur Dick Kusleika
C'est une modification importante de la réponse de @Dick Kusleika.
Lors de la désactivation de la EnableEvents, il est une bonne idée d'inclure la gestion d'erreur à son tour EnableEvents de retour sur. Si vous n'avez pas et le script renvoie une erreur, le changement de l'événement déclencheur de votre script) cessera de fonctionner jusqu'à ce que vous tournez manuellement EnableEvents de retour sur.
Idéalement, vous placez la ligne suivante juste avant le code re-déclenché la diffusion de votre événement de changement. La première ligne indique à VBA pour goto un label nommé "enableEventsOn" lorsqu'il rencontre une erreur. La deuxième ligne contourne les événements de changement.
Puis placez ce code immédiatement après le code re-déclenché la diffusion de votre événement de changement. Cela permet de changer les événements déclencheurs et les retours normal erreur de manipulation de votre script.
Enfin, placez ce code à la fin de votre script. C'est une étiquette visée ci-dessus. Si une erreur est rencontrée entre "on Error Goto enableEventsOn:" et "on Error Goto 0", puis le script va aller ici et tourner EnableEvents sur le dos, la laissant prête à démarrer le script, la prochaine fois que vous modifiez votre feuille de calcul.
OriginalL'auteur ChrisB
Trop risqué à mon avis.
Je voudrais utiliser une variable, nommée "skip_update" qui est définie sur "True" dans le début de chaque macro et false quand elle se termine.
e.g :
Votre "skip_update" doit être défini "global", qui est en dehors de tout sous. La façon dont vous l'avez fait, le déclencheur peut pas être désactivé. (J'ai édité ma réponse trop)
Salut, j'ai défini ce que vous avez dit, mais il y a encore un problème. Je reçois application définie ou d'un objet défini des erreurs tout au long de ma macro chaque fois que l'autre macro est activé, même avec la est exposé.
Vous pouvez ajouter "dim skip_update as boolean" en dehors de tout sous, mais quand "=false" est ajouté, il peut se bloquer. ensuite, retirez le "= false". De cette façon, cela devrait fonctionner 🙂
OriginalL'auteur mansuetus
Vous pouvez maintenir enfoncée la touche CTRL tout en faisant une entrée qui permettrait de déclencher le changement sur événement de routine. J'ai une routine de faire la somme des valeurs dans une plage sélectionnée dans une colonne donnée. Si je fais glisser le curseur de lignes 1 à 5, en mettant en évidence, alors la somme de ces est enregistré dans le presse-papiers. Toute entrée dans une cellule de cette colonne, les déclencheurs de la routine. Si j'maintenez la touche CTRL enfoncée tout en faisant de l'action ou de toute entrée dans une cellule dans la colonne la routine n'est pas lancée. Peut ne pas fonctionner pour plus compliquée ChangeEvent scénarios.
OriginalL'auteur Malcolm