2009-07-27 15 views
3

Je travaille sur des scripts VBA pour une feuille de calcul Excel, et j'ai créé un module qui contient une liste complète de la plupart des chaînes qui stockent le nom de chacun de mes champs de base de données. De cette façon, si quelqu'un modifie la base de données, il peut mettre à jour la variable VBA dans le module, puis tous mes scripts, qui référencent directement la variable globale au lieu du nom du champ, ne connaissent même pas la différence.VBA dans Excel: fichier de constantes globales

De toute façon, je vais travailler sur quelques feuilles Excel différentes, et j'aimerais qu'elles aient toutes accès à ce module. Dans le pire des cas, je pourrais copier le module manuellement dans chaque classeur, mais ce serait génial s'ils pouvaient tous référencer le même fichier en externe ... est-ce quelque chose comme ça possible dans VBA/Excel?

En outre, maintenant mes variables simplement ressembler à:

Global tblDeviceType As String 

Et puis je les initialiser dans une fonction dans le module qui est appelé lorsque le classeur ouvre. Y at-il un meilleur moyen de maintenir toutes mes constantes ou fait ce travail? Oh oui, et je ne les ai pas déclarés en tant que constantes car certains d'entre eux ont des types de données plus complexes (comme Ranges) et ne pouvaient pas être déclarés statiquement - du moins, ils ne semblaient pas pouvoir le faire.

Répondre

2

Il y a deux manières, vous pouvez probablement faire:

  1. base toutes les feuilles Excel hors du même modèle Excel. De cette façon, ils peuvent tous accéder au code déclaré dans le modèle. Mais ensuite, vous devez distribuer le modèle, je pense.
  2. Créez une DLL activex, puis référencez-la dans chacun de vos modèles Excel.
  3. Ou vous pouvez charger le module dynamiquement au moment de l'exécution. Vous utiliseriez une méthode comme ThisWorkbook.VBProject.VBComponents.Import(). Vous devrez probablement exécuter votre méthode qui remplit les variables manuellement. (Note que je ne l'ai pas testé) Plus d'info sur ce type de manipulation d'Excel peut être trouvé here
0

Vous pouvez créer une feuille de calcul Excel avec tous les noms, puis utiliser des plages nommées portant le même nom que Global, modifier votre code pour utiliser les plages nommées et ajouter une feuille.

Je copierais simplement le module dans les autres feuilles de calcul.

Editer: Vous pouvez également créer une feuille de calcul vide avec le module, puis en faire un addin. Je ne sais pas si Globals dans Excel fonctionnera de cette façon, mais ça vaut le coup d'essayer. S'il vous plaît poster ici si vous le faites et cela fonctionne ou non.

2

Vous pouvez également créer un fichier texte (bibliothèque Microsoft Scripting Runtime -> classe Scripting.TextStream) dans lequel vous pouvez enregistrer vos variables & pour les charger lorsque vous souhaitez le lire.

Placez le fichier texte à un emplacement central accessible par toutes les feuilles.
Pour les plages, vous pouvez stocker l'adresse de la plage dans le fichier texte. Faites-moi savoir, s'il me manque quelque chose.

0

En fait, le plus simple est d'ajouter le module à un fichier Excel Addin .XLA. Ensuite, ajoutez ce fichier via la boîte de dialogue Excel Addins.

Le module est maintenant disponible globalement pour toutes les solutions Excel exécutées sous ce compte d'utilisateur.