Donc, le problème d’aujourd’hui me met en colère parce que cela devrait être facile et que je ne trouve pas la réponse:
Comment déclarer un tableau public dans VBA? J'utilise un tableau avec les lettres A, B, C, ... parce que je travaille avec des cellules Excel et que je ne veux pas le déclarer dans toutes les fonctions que je crée, n'est-ce pas? J'ai d'abord essayé de regarder sur le Web et j'ai lu qu'il fallait le déclarer dans un module différent, c'est donc ce que j'ai fait:
Public colHeader As String
colHeader = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L")
Mais Visual Basic ne l'aime pas ...
Alors, que dois-je faire?
Merci beaucoup :)
Edit: le problème est plus d’attribuer des valeurs au tableau que de le déclarer
Déclarez le tableau comme global entre les sous-marins d'une application:
Public GlobalArray(10) as String
GlobalArray = Array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L')
Sub DisplayArray()
Dim i As Integer
For i = 0 to UBound(GlobalArray, 1)
MsgBox GlobalArray(i)
Next i
End Sub
Méthode 2: passez un tableau à sub. Utilisez ParamArray.
Sub DisplayArray(Name As String, ParamArray Arr() As Variant)
Dim i As Integer
For i = 0 To UBound(Arr())
MsgBox Name & ": " & Arr(i)
Next i
End Sub
ParamArray doit être le dernier paramètre.
Vous utilisez le mauvais type. La fonction Array(...)
renvoie une Variant
et non une String
.
Ainsi, dans la section Déclaration de votre module (il n’est pas nécessaire que ce soit un module différent!), Vous définissez
Public colHeader As Variant
et quelque part au début de votre code de programme (par exemple, dans l'événement Workbook_Open
), vous l'initialisez avec
colHeader = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L")
Une autre alternative (simple) consisterait à créer une fonction qui renvoie le tableau, par exemple. quelque chose comme
Public Function GetHeaders() As Variant
GetHeaders = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L")
End Function
Cela présente l'avantage que vous n'avez pas besoin d'initialiser la variable globale et que le tableau est créé à nouveau à chaque appel de fonction.
Cela a fonctionné pour moi, semble fonctionner en tant que global:
Dim savePos(2 To 8) As Integer
Et can appelez-le depuis chaque sous-marin, par exemple en obtenant le premier élément:
MsgBox (savePos(2))
En gros, ce que j’ai trouvé, c’est que vous pouvez déclarer le tableau, mais lorsque vous le définissez, vba vous indique une erreur.
Donc, je mets un sous spécial pour déclarer des variables globales et des tableaux, quelque chose comme:
Global example(10) As Variant
Sub set_values()
example(1) = 1
example(2) = 1
example(3) = 1
example(4) = 1
example(5) = 1
example(6) = 1
example(7) = 1
example(8) = 1
example(9) = 1
example(10) = 1
End Sub
Et chaque fois que je veux utiliser le tableau, j'appelle le sous-premier, juste au cas où
call set_values
Msgbox example(5)
Ce n’est peut-être pas la manière la plus correcte, mais j’espère que cela fonctionnera pour vous
Essaye ça:
Dim colHeader(12)
colHeader = ("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L")
Malheureusement, le code trouvé en ligne était VB.NET et non VBA.
Option Explicit
Public myarray (1 To 10)
Public Count As Integer
myarray(1) = "A"
myarray(2) = "B"
myarray(3) = "C"
myarray(4) = "D"
myarray(5) = "E"
myarray(6) = "F"
myarray(7) = "G"
myarray(8) = "H"
myarray(9) = "I"
myarray(10) = "J"
Private Function unwrapArray()
For Count = 1 to UBound(myarray)
MsgBox "Letters of the Alphabet : " & myarray(Count)
Next
End Function