159 votes

Comment déclarer une variable globale dans VBA?

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 Sub ou Function"

Savez-vous ce que j'ai mal fait?

J'ai essayé d'utiliser Global au lieu de Public , mais j'ai le même problème.

J'ai essayé de déclarer la fonction elle-même en tant que `Public, mais cela n'a également pas servi.

Que dois-je faire pour créer la variable globale?

204voto

SLaks Points 391154

Vous devez déclarer les variables en dehors de la fonction:

 Public iRaw As Integer
Public iColumn As Integer

Function find_results_idle()
    iRaw = 1
    iColumn = 1
 

137voto

Ben McCormack Points 10669

C'est une question à propos de la portée.

Si vous voulez seulement les variables pour durer la durée de vie de la fonction, utilisez Dim (de Dimension) à l'intérieur de la fonction ou sous-déclarer les variables:

Function AddSomeNumbers() As Integer
    Dim intA As Integer
    Dim intB As Integer
    intA = 2
    intB = 3
    AddSomeNumbers = intA + intB
End Function
'intA and intB are no longer available since the function ended

Un mondial de la variable (comme SLaks souligné) est déclarée en dehors de la fonction à l'aide de l' Public mot-clé. Cette variable sera disponible au cours de 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 particulier Excel classeur est ouvert.

Public intA As Integer
Private intB As Integer

Function AddSomeNumbers() As Integer
    intA = 2
    intB = 3
    AddSomeNumbers = intA + intB
End Function
'intA and intB are still both available.  However, because intA is public,  '
'it can also be referenced from code in other modules. Because intB is private,'
'it will be hidden from other modules.

Vous pouvez également avoir des variables qui ne sont accessibles qu'à l'intérieur d'un module particulier (ou une classe) en les déclarant avec l' Private mot-clé.

Si vous êtes à la construction d'une grosse application et avoir besoin d'utiliser des variables globales, je recommande la création d'un module séparé juste pour vos variables globales. Cela devrait vous aider à garder une trace d'eux dans un seul endroit.

39voto

YOU Points 44812

Pour utiliser des variables globales, insérez un nouveau module à partir de l'interface utilisateur du projet VBA et déclarez les variables à l'aide de Global

 Global iRaw As Integer
Global iColumn As Integer
 

15voto

Zai Points 609

Si cette fonction est dans un module / une classe, vous pouvez simplement les écrire en dehors de la fonction, avec donc Global Scope . Portée globale signifie que la variable est accessible par une autre fonction du même module / de la même classe (si vous utilisez dim comme déclaration, utilisez public si vous voulez que les variables soient accessibles à tous. fonction dans tous les modules):

 Dim iRaw As Integer
Dim iColumn As Integer

Function find_results_idle()
    iRaw = 1
    iColumn = 1
End Function

Function this_can_access_global()
    iRaw = 2
    iColumn = 2
End Function
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X