Comment rendre les variables Excel VBA disponibles pour plusieurs macros?
J'ai une chaîne de macros qui s'appellent les uns les autres et de se référer à des classeurs de A et B. je veux la première macro pour inviter l'utilisateur à sélectionner le document A et B, et de ces Sélections pour devenir le classeur A et B les variables de me référer dans les différentes macros.
Comment je fais les documents sélectionnés à la visée variable tout au long de toutes les macros?
Merci d'avance!
source d'informationauteur Sean Connecticut
Vous devez vous connecter pour publier un commentaire.
Les déclarer à l'extérieur de la sous-programmes, comme ceci:
Alternativement, vous pouvez passer des variables entre les sous-programmes:
Ou de l'utilisation
Functions
à valeurs de retour:Dans la deuxième méthode, dans le cadre de
OtherSubRoutine
vous référer à eux par leurs noms de paramètrewb1
etwb2
. Passé les variables n'ont pas besoin d'utiliser les mêmes noms, juste les mêmes types de variables. Cela permet une certaine liberté, par exemple, vous avez une boucle sur plusieurs classeurs, et vous pouvez envoyer chaque classeur à un sous-programme permettant d'effectuer une action sur ce Classeur, sans faire de tous (ou toutes) des variables publiques dans le champ d'application.D'Une Note Sur Les Formulaires Utilisateur
Personnellement, je recommanderais garder
Option Explicit
dans l'ensemble de vos modules et de formes (ce qui vous empêche d'instanciation des variables avec des fautes de frappe dans leurs noms, commelCoutn
quand vous pensiezlCount
etc., parmi d'autres raisons).Si vous utilisez
Option Explicit
(qui vous devrait), alors vous devriez qualifier module d'étendue variables pour le style et pour éviter toute ambiguïté, et vous doit qualifier de l'utilisateur-formulairePublic
d'étendue variables, car elles ne sont pas "public" dans le même sens. Par exemple,i
est pas définie, mais il estPublic
dans le champ d'application deUserForm1
:Vous pouvez vous référer à elle comme
UserForm1.i
pour éviter l'erreur de compilation, ou étant donné que les formulaires sontNew
-mesure, vous pouvez créer une variable objet de contenir de référence à votre formulaire, et de se référer à elle de cette façon:NB: les captures d'écrans ci -
x
est déclaréPublic x as Long
dans un autre standard module de code, et ne soulèvera pas l'erreur de compilation. Il peut être préférable de se référer à ce queModule2.x
pour éviter toute ambiguïté et de l'occultation possible dans le cas où vous ré-utiliser des noms de variable...Vous pouvez envisager de déclarer les variables avec moudule niveau de la portée.
Au niveau du Module variable est disponible pour toutes les procédures de ce module, mais il n'est pas disponible pour les procédures dans d'autres modules
Pour plus de détails sur
Scope of variables
renvoyer cette lienVeuillez copier le code ci-dessous dans un module, enregistrez le classeur, puis exécutez le code.
Voici ce code ne
L'exemple de sous-programme définit le chemin d'accès au dossier & plus tard, le chemin d'accès au fichier. Veuillez définir en conséquence avant d'exécuter le code.
J'ai ajouté une fonction IsWorkBookOpen pour vérifier si le classeur est déjà définissez ensuite le classeur variable le nom du classeur
d'autre ouvrez le classeur qui sera attribué à un classeur variable en conséquence.
Dim wbA As Workbook
Dim wbB As Workbook
À l'aide de l'Invite de sélectionner l'utilisation du fichier de code ci-dessous.
Créer un "module" de l'objet et de déclarer les variables. Contrairement à la classe des objets qui doivent être instancié à chaque fois, le module d'objets sont toujours disponibles. Par conséquent, une variable, une fonction ou une propriété dans un "module" sera disponible pour tous les autres objets dans le projet VBA, macro, Excel formule, ou même au sein d'un MS Access JET de la requête SQL def.