web-dev-qa-db-fra.com

VBA Public Array: comment?

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

8
Julien

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.

6
Stanislav Stoyanov

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.

4
Heinzi

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))
0
Jaanus

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

0
Juan Joya

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.

0
Chris Van Opstal
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
0
user28864