J'ai écrit le code suivant:
Function find_results_idle()
Public iRaw As Integer
Public iColumn As Integer
iRaw = 1
iColumn = 1
Et je reçois le message d'erreur:
"attribut invalide dans le sous-système ou la fonction"
Savez-vous ce que j'ai fait de mal?
J'ai essayé d'utiliser à la Global
place de Public
, mais j'ai eu le même problème.
J'ai essayé de déclarer la fonction elle-même comme `Public, mais cela n'a pas non plus fait de bien.
Que dois-je faire pour créer la variable globale?
excel
vba
scope
global-variables
Nimrod
la source
la source
Function
/Sub
, pas seulement à l'extérieur: "Les variables au niveau du module peuvent être déclarées avec une instruction Dim ou Private en haut du module au-dessus de la première définition de procédure." (à partir de la portée des variables dans Visual Basic pour Applications )C'est une question de portée .
Si vous souhaitez que les variables ne durent que la durée de vie de la fonction, utilisez
Dim
(abréviation de Dimension ) à l'intérieur de la fonction ou du sous pour déclarer les variables:Une variable globale (comme SLaks l'a souligné) est déclarée en dehors de la fonction à l'aide du
Public
mot - clé. Cette variable sera disponible pendant la durée de vie de votre application en cours d'exécution. Dans le cas d'Excel, cela signifie que les variables seront disponibles tant que ce classeur Excel particulier est ouvert.Vous pouvez également avoir des variables qui ne sont accessibles que dans un module (ou une classe) particulier en les déclarant avec le
Private
mot - clé.Si vous créez une grande application et ressentez le besoin d'utiliser des variables globales, je vous recommande de créer un module séparé uniquement pour vos variables globales. Cela devrait vous aider à les garder en un seul endroit.
la source
Pour utiliser des variables globales, insérez un nouveau module à partir de l'interface utilisateur du projet VBA et déclarez des variables à l'aide de
Global
la source
Public
vs avec unGlobal
mot-clé?Public
etGlobal
sont presque identiques dans leur fonction ..Global
vient des anciennes versions de VB"La question porte vraiment sur la portée, comme l’a dit l’autre gars.
En bref, considérez ce "module":
Vous pouvez consulter cette référence MSDN pour en savoir plus sur la déclaration de variable et cette autre question de débordement de pile pour en savoir plus sur la façon dont les variables sortent de la portée.
Deux autres choses rapides:
la source
Si cette fonction est dans un module / classe, vous pouvez simplement les écrire en dehors de la fonction, donc c'est le cas
Global Scope
. Global Scope signifie que la variable est accessible par une autre fonction dans le même module / classe (si vous utilisezdim
comme déclaration de déclaration, utilisezpublic
si vous voulez que les variables soient accessibles par toutes les fonctions de tous les modules):la source
Créez un entier public dans la déclaration générale.
Ensuite, dans votre fonction, vous pouvez augmenter sa valeur à chaque fois. Voir l'exemple (fonction pour enregistrer les pièces jointes d'un e-mail au format CSV).
la source
Un bon moyen de créer des variables publiques / globales est de traiter le formulaire comme un objet de classe et de déclarer les propriétés et d'utiliser Public Property Get [variable] pour accéder à la propriété / méthode. Vous devrez peut-être également référencer ou transmettre une référence au module Formulaire instancié. Vous obtiendrez des erreurs si vous appelez des méthodes à des formulaires / états fermés.
Exemple: passez Me.Form.Module.Parent dans la sous / fonction pas dans le formulaire.
Ainsi, dans l'autre module, vous pourrez accéder:
Si vous utilisez la liaison tardive comme je le fais, vérifiez toujours les valeurs Null et les objets qui ne sont rien avant de tenter d'effectuer un traitement.
la source
Vous pouvez également utiliser -
Son testé sur Office 2010
la source