2013-02-03 5 views
0

J'ai quelques questions sur la façon dont les variables globales peuvent être utilisées dans Excel VBA. Par conséquent, mon application utilise un objet API fourni par un tiers. Par conséquent, mon application utilise un objet API fourni par un tiers. Actuellement toutes les fonctions, nous initialisons cet objet et l'utiliser:excel vba variable globale et concurrence

function() 
    Dim api as someApi 
    api.dosth 

end function 

Je me demande, au lieu de l'initialiser à chaque fois, puis-je faire une variable globale? comme juste le déclarer au début et l'initialiser dans la fonction workbook_open? Si plusieurs fonctions s'exécutent en même temps et tentent d'utiliser cet objet API partagé, cela posera-t-il un problème? Aussi juste une question générale sur les variables globales: tous les modules partagent-ils les variables? Ou chaque module ne peut voir que les variables globales déclarées dans son propre code? Par exemple, si j'ai le module a et le module b dans le même classeur et que l'objet api est déclaré dans le module a et initialisé dans l'événement workbook_open, les fonctions du module b peuvent-elles l'utiliser ou non?

Merci beaucoup !!

+0

Voir ici pour voir comment fonctionne la portée variable dans VBA http://support.microsoft.com/kb/141693. Fondamentalement, oui, vous pouvez déclarer une variable publique pour contenir votre objet. Selon que cet objet a un "état" et ce que font vos routines, il devrait fonctionner correctement. Notez qu'il n'y a pas vraiment de "concurrence" dans VBA - seulement une fonction/sub est en cours d'exécution à la fois. –

+0

Si vous vous sentez fonctionnel, une alternative serait de passer l'objet en tant que paramètre à toute fonction/sous qui doit l'utiliser. –

Répondre

0

En fonction de l'utilisation de l'API, il peut être initialisé une fois et utilisé partout.

Je suggère de lire sur les variables globales/publiques/privées.

La déclaration d'une variable en tant que Private en dehors d'une fonction signifie que la variable ne peut être accédée que dans ce module. Déclarer comme public, signifie qu'il peut être consulté à travers tous les modules avec ce classeur. Déclarer comme Global signifie qu'il peut être consulté à travers tous les classeurs dans cette instance d'Excel. Si vous voulez seulement accéder à l'API n'importe où avec le classeur, je suggère de créer une variable publique et de l'initialiser lorsque le classeur s'ouvre, en vous assurant de fermer/tuer toutes les variables correctement lorsque le classeur se ferme.