10
votes

VBA Public Array: Comment?

Le problème de l'aujourd'hui est donc de me faire fou, car cela devrait être facile et je ne peux pas trouver la réponse:

Comment déclarer une matrice publique dans VBA? J'utilise un tableau avec les lettres A, B, C, ... parce que je travaille avec des cellules Excel, et je ne veux pas le déclarer dans chaque fonction que je crée, non? J'ai essayé de regarder sur le Web en premier et j'ai lu que vous devez le déclarer dans un module différent, c'est ce que j'ai fait: xxx

mais visual basique ne l'aime pas ...

Alors, que dois-je faire?

Merci beaucoup :)

Edit: Le problème concerne plus d'asignation des valeurs à le tableau que de le déclarer


0 commentaires

7 Réponses :


0
votes

Essayez ceci: xxx

Malheureusement, le code trouvé en ligne était vb.net non VBA.


0 commentaires

10
votes

Déclarez le tableau en tant que global de l'ensemble des sous-ministres dans une application:

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


4 commentaires

La première ligne de l'exemple 1 donne une erreur de compilation très gênante dans Access 2007.


J'ai copié le même code à VBA pour le tester. Pour ce faire, je reçois une erreur de compilation. Tout en soulignant le "A" dans le tableau à citer, il est indiqué que cela n'est pas autorisé en dehors d'une procédure. Toute astuce?


Oui, je ne sais pas pourquoi cette réponse est la plus précipitée telle qu'elle est fausse. Vous ne pouvez pas modifier un tableau en dehors d'un sous-niveau. Au fur et à mesure que d'autres réponses signalent, vous devez créer un sous-produit qui le modifie ou la modifier avec workbook_open () ou similaire.


Les 2 premières lignes donnent un problème suivant (à cause d'une citation unique 'Je pense): Erreur de compilation (Erreur de compilation) Assist: Expression (en attente de: expression) Changer de guillemets Donnez une erreur de compilation lorsque Lauching the Code: Instruction incorrète à à l' Exérieur d'une procédre. (Instruction incorrecte en dehors d'une procédure)



7
votes

Vous utilisez le mauvais type. La fonction (...) La fonction renvoie un variante , pas une chaîne .

Ainsi, dans la section de déclaration de votre module ( Il n'a pas besoin d'être un module différent!), vous définissez xxx

et quelque part au début de votre code de programme (par exemple, dans le document workbook_open événement) Vous l'initialisez avec xxx

une autre alternative (simple) serait de créer une fonction qui renvoie la matrice, par exemple quelque chose comme xxx

Ceci a l'avantage de ne pas avoir besoin d'initialiser la variable globale et l'inconvénient que le tableau est créé à nouveau sur chaque appel de fonction. < / p>


0 commentaires

0
votes

Cela a fonctionné pour moi, semble fonctionner comme global: xxx

et peut l'appeler de chaque sous, par exemple obtenir un premier élément: xxx


0 commentaires

0
votes
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

1 commentaires

Cela ne fonctionnera pas - vous ne pouvez pas modifier les éléments de tableau en dehors d'une fonction ou d'un sous-niveau. Vous obtiendrez une erreur de compilation à la ligne 4.



0
votes

Eh bien, fondamentalement, ce que j'ai trouvé, c'est que vous pouvez déclarer le tableau, mais lorsque vous l'avez défini, VBA vous montre une erreur.

Donc, je mets un sous spécial pour déclarer des variables et des tableaux mondiaux, quelque chose comme: P > xxx pré>

et chaque fois que je veux utiliser la matrice, j'appelle le sous-premier, juste au cas où P>

call set_values

Msgbox example(5)


0 commentaires

1
votes
Option Explicit

Public colHeader

Sub test()

    ReDim colHeader(11)
    colHeader = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L")
End Sub

Sub verify_test()

    Dim i As Integer
    For i = LBound(colHeader) To UBound(colHeader)
        MsgBox "colHeader( " & i & " ) = " & colHeader(i)
    Next
End Sub

0 commentaires