Est-il possible de déclarer une variable publique dans vba et d’atsortingbuer une valeur par défaut?

Je veux le faire mais ça ne comstackra pas:

Public MyVariable as Integer = 123 

Quelle est la meilleure façon d’y parvenir?

.NET nous a gâtés 🙂 Votre déclaration n’est pas valide pour VBA.

Seules les constantes peuvent recevoir une valeur lors du chargement de l’application. Vous les déclarez ainsi:

 Public Const APOSTROPHE_KEYCODE = 222 

Voici un exemple de déclaration d’un de mes projets vba:

Image constante VBA

Si vous recherchez quelque chose dans lequel vous déclarez une variable publique et que vous souhaitez initialiser sa valeur, vous devez créer un sous-dossier Workbook_Open et y effectuer votre initialisation. Exemple:

 Private Sub Workbook_Open() Dim iAnswer As Integer InitializeListSheetDataColumns_S HideAllMonths_S If sheetSetupInfo.Range("D6").Value = "Enter Facility Name" Then iAnswer = MsgBox("It appears you have not yet set up this workbook. Would you like to do so now?", vbYesNo) If iAnswer = vbYes Then sheetSetupInfo.Activate sheetSetupInfo.Range("D6").Select Exit Sub End If End If Application.Calculation = xlCalculationAutomatic sheetGeneralInfo.Activate Load frmInfoSheet frmInfoSheet.Show End Sub 

Assurez-vous de déclarer le sous object du classeur lui-même: entrer la description de l'image ici

Juste pour vous offrir un angle différent –

Je trouve que ce n’est pas une bonne idée de maintenir des variables publiques entre les appels de fonction. Toutes les variables à utiliser doivent être stockées dans Subs et Functions et transmises en tant que parameters. Une fois le code exécuté, vous ne devez pas vous attendre à ce que le projet VBA conserve les valeurs des variables.

La raison en est qu’il ya tout un tas de choses qui peuvent réinitialiser par inadvertance le projet VBA lors de l’utilisation du classeur. Lorsque cela se produit, toutes les variables publiques sont réinitialisées à 0.

Si vous avez besoin d’une valeur à stocker en dehors de vos sous-systèmes et fonctions, je vous recommande fortement d’utiliser une feuille de calcul masquée avec des plages nommées pour toute information devant persister.

Bien sûr, vous savez, mais si c’est une constante, alors const MyVariable as Integer = 123 sinon vous n’avez pas de chance; la variable doit avoir une valeur initiale ailleurs.

Vous pourriez:

 public property get myIntegerThing() as integer myIntegerThing= 123 end property 

Dans un module de classe, créez-le globalement;

 public cMyStuff as new MyStuffClass 

Donc cMyStuff.myIntegerThing est disponible immédiatement.

Vous pouvez définir la variable dans les déclarations générales, puis l’initialiser dans le premier événement qui se déclenche dans votre environnement.

Vous pouvez également créer une classe avec les propriétés appropriées et les initialiser dans la méthode Initialise.

Comme indiqué ci-dessus, pour déclarer des variables accessibles globales, vous pouvez le faire en dehors des fonctions précédées du mot-clé public.

Et, comme l’affectation n’est pas autorisée en dehors des procédures, vous pouvez, par exemple, créer un sous-programme appelé InitGlobals qui initialise vos variables publiques, puis vous appelez simplement cette sous-routine au début de vos instructions.

En voici un exemple:

 Public Coordinates(3) as Double Public Heat as double Public Weight as double Sub InitGlobals() Coordinates(1)=10.5 Coordinates(2)=22.54 Coordinates(3)=-100.5 Heat=25.5 Weight=70 End Sub Sub MyWorkSGoesHere() Call InitGlobals 'Now you can do your work using your global variables initialized as you wanted them to be. End Sub 

C’est ce que je fais quand j’ai besoin de constantes globales initialisées:
1. Ajouter un module appelé Globals
2. Ajoutez des propriétés comme celle-ci dans le module Globals :

 Property Get PSIStartRow() As Integer PSIStartRow = Sheets("FOB Prices").Range("F1").Value End Property Property Get PSIStartCell() As Ssortingng PSIStartCell = "B" & PSIStartRow End Property 

Ça fait un moment, mais je crois que ça va être:

 Public MyVariable as Integer MyVariable = 123 

Cela fait un bon bout de temps, mais cela peut vous satisfaire:

 Public MyVariable as Integer: MyVariable = 123 

C’est un peu moche puisque vous devez ressaisir le nom de la variable, mais c’est sur une seule ligne.