En tant que bonne pratique de programmation, envelopper une telle variable dans une fonction getter, et cacher la variable globale comme locale statique dans il. Remplissez-le lors de la première utilisation.
Pour ce faire, écrire cette fonction dans un module standard:
Public Function getMyDictionary() as Scripting.Dictionay
Static dict as Dictionary ' static: will keep state across different calls
If dict Is Nothing Then
Set dict = new Scripting.Dictionary
''''''''''''''''''''
dict.Add "foo", "bar"
' etc...
' Code to populate dictionary
'
''''''''''''''''''''
End If
Set getMyDictionary = dict
End Function
Maintenant, chaque fois que vous devez référencer le dictionnaire, simplement quelque chose comme ceci:
If getMyDictionary.Exists("foo") Then doStuff
Cet idiome présente de nombreux avantages:
le dictionnaire est renseigné lors de la première utilisation. Si pendant une session Excel il n'est pas nécessaire, il ne sera pas rempli.
vous n'avez plus besoin de vous soucier de "quand dois-je remplir mon dictionnaire." Il sera disponible et peuplé quand et où il le faut
Si le projet est déchargé en raison d'une erreur d'exécution, toutes les variables globales sont réinitialisées. En particulier, les objets sont réinitialisés à Nothing
. La fonction wrapper gère correctement la situation et re-peuple le dictionnaire de manière transparente.
TLDR ... le dictionnaire global est masqué, l'accès à celui-ci est (dans une certaine mesure) contrôlé. "Dans une certaine mesure" car un autre code peut encore le manipuler (insérer, enlever ...). Si l'on a besoin de plus de contrôle sur, par exemple permettre à tout autre code de lecture seule, puis en faire un membre privé de certains Module de classe qui n'expose que la fonctionnalité a permis ...
soit public dans un module Comme l'a dit ash, soit le passer en argument aux sous/fonctions. Le bon truc serait de ne pas perdre les dictionnaires en pause/erreur ... –
@ A.S.H J'ai nommé un sous-registre public "workbook_activate()" et il ne s'est pas exécuté quand le classeur s'est ouvert. cependant, quand j'ai utilisé "worksheet_activate()", c'était génial tant que mes mods étaient encore dans ce fichier sheet/mod. Une fois que je suis parti, il semble que les valeurs du dictionnaire soient effacées. – wizlog
@PatrickLepelletier laissez-vous entendre que normalement le dictionnaire effacerait une erreur? – wizlog