exécuter automatiquement une macro Excel sur une cellule de changement
Comment puis-je exécuter automatiquement une macro Excel à chaque fois une valeur dans une cellule en particulier les changements?
Droit maintenant, mon code est:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("H5")) Is Nothing Then Macro
End Sub
où "H5"
est la cellule de surveillance et d' Macro
est le nom de la macro.
Est-il un meilleur moyen?
- Le RunMacroWhenValueChanges UDF dans FormulaDesk satisfaire vos exigences? formuladesk.com
- Double Possible de excel VBA exécuter la macro automatiquement chaque fois qu'une cellule est modifiée
Vous devez vous connecter pour publier un commentaire.
Votre code semble assez bon.
Être prudent, cependant, pour votre appel à
Range("H5")
est un raccourci pourApplication.Range("H5")
, ce qui est équivalent àApplication.ActiveSheet.Range("H5")
. Cela pourrait être bien, si les seuls changements sont des changements-qui est le plus typique, mais il est possible de la feuille de calcul de valeurs de cellule à changer quand il n'est pas la feuille active via des modifications du programme, par exemple VBA.Avec cela à l'esprit, je voudrais utiliser
Target.Worksheet.Range("H5")
:Ou vous pouvez utiliser
Me.Range("H5")
, si le gestionnaire d'événement est sur la page de code de la feuille de calcul en question (c'est souvent le cas):Espère que cela aide...
H5
est modifié à partir d'une autre feuille, diresheet2
alors la fonction ci-dessus ne fonctionne pas. plz aider en cela.ActiveSheet
et lorsque vous n'avez pas à spécifier explicitement que c'est Excel vous travaillez avec, Excel supposeApplication
.Worksheet_Change
de l'événement doit être situé), un francRange
n' pas par défaut pourActiveSheet
mais au lieu de cela fait référence à la feuille contenant le code. Le code de cette réponse est donc effectivement la même chose que le code en question. (Note: en 2009 lorsque cette réponse a été écrit, il peut ont été différent, mais je suis assez certain qu'il ne l'était pas.)Poignée de la
Worksheet_Change
de l'événement ou de laWorkbook_SheetChange
événement.Les gestionnaires d'événements prennent un argument "Target as Range", de sorte que vous pouvez vérifier si la plage de modification comprend la cellule qui vous intéresse.
Target.Address = Range("H5").Address
. Est-il un moyen plus facile?Not (Intersect(Target, Range("H5")) Is Nothing)
. Est-ce la façon dont vous le feriez?Target.Address = Range("H5").Address
) ne fonctionne pas si votre portable a été seulement part de la modification de la gamme. Le deuxième commentaire, il souffre encore de problèmes décrits par Mike Rosenblum.Je préfère cette façon, non pas à l'aide d'une cellule, mais une gamme
J'ai passé beaucoup de temps à la recherche de ce et d'apprendre comment tout cela fonctionne, après vraiment gâcher déclenche l'événement. Depuis il y en avait tellement dispersés info j'ai décidé de partager ce que j'ai trouvé pour travailler tous dans un endroit, étape par étape, comme suit:
1) Ouvrir l'Éditeur VBA, en vertu de Projet VBA (YourWorkBookName.xlsm) ouvrez Microsoft Excel Objet et sélectionnez la Feuille à laquelle l'événement de changement de concerne les.
2) Le défaut d'affichage de code est "Général". À partir de la liste déroulante située en haut et au milieu, sélectionnez "Feuille de calcul".
3) Private Sub Worksheet_SelectionChange est déjà là comme il se doit, le laisser seul. Copier/Coller Mike Rosenblum du code ci-dessus et changer la .Gamme référence à la cellule pour laquelle vous regardez pour un changement (B3, dans mon cas). Ne placez pas votre Macro encore, cependant (j'ai enlevé le mot "Macro" après "Alors"):
ou à partir de la liste déroulante en haut à gauche, sélectionnez "Modifier" et dans l'espace entre Private Sub et End Sub, coller
If Not Intersect(Target, Me.Range("H5")) Is Nothing Then
4) Sur la ligne après ", Puis sur" désactiver les événements de sorte que lorsque vous appelez votre macro, il n'a pas de déclencher des événements et essayez d'exécuter cette Worksheet_Change à nouveau dans un cycle sans fin qui tombe en panne Excel et/ou les dégâts de tout:
5) Appeler votre macro
6) Tournez les événements de manière à ce que le prochain changement (et tous les autres événements) déclencheur:
7) Fin Si le bloc et le Sub:
L'ensemble du code:
Cela prend un tournant événements marche/arrêt de l'Modules qui crée des problèmes et permet tout simplement le changement de déclenchement, désactive les événements, les pistes de votre macro et transforme les événements de retour sur.
J'ai une cellule qui est reliée à des actions en ligne de la base de données et mis à jour fréquemment. Je veux déclencher une macro chaque fois que la valeur de la cellule est mise à jour.
Je crois que c'est similaire à la cellule de changement de valeur par un programme ou des données externes mise à jour, mais les exemples ci-dessus en quelque sorte ne pas travailler pour moi. Je pense que le problème est dû au fait que excel événements internes ne sont pas déclenchées, mais c'est mon avis.
Je n'ai la suite,