web-dev-qa-db-fra.com

Un tableau peut-il être déclaré comme une constante?

Est-il possible de:

  1. Déclarer un tableau comme une constante

    OR

  2. Utilisez une solution de contournement pour déclarer un tableau protégé contre l'ajout, la suppression ou la modification d'éléments, et donc fonctionnellement constant pendant la durée de vie d'une macro?

Bien sûr, je pourrais faire ceci:

Const myConstant1 As Integer = 2
Const myConstant2 As Integer = 13
Const myConstant3 As Integer = 17
Const myConstant4 ...and so on

... mais il perd l'élégance de travailler avec des tableaux. Je pouvais aussi charger les constantes dans un tableau et les recharger chaque fois que je les utilisais, mais tout échec dans le rechargement du tableau avec ces valeurs constantes avant utilisation pourrait exposer le code à une valeur "constante" qui a changé.

Toute réponse pratique est la bienvenue, mais la réponse idéale est celle qui peut être configurée une fois et ne nécessitant aucune modification/maintenance lorsque l’autre code est modifié.

13
ChrisB

Vous pouvez utiliser une fonction pour renvoyer le tableau et l'utiliser en tant que tableau.

Function ContantArray()
    ContantArray = Array(2, 13, 17)
End Function

 enter image description here

 enter image description here

23
user6432984

Pourquoi ne pas en faire une fonction? Tel que:

Public Function myConstant(ByVal idx As Integer) As Integer
    myConstant = Array(2, 13, 17, 23)(idx - 1)
End Function

Sub Test()
    Debug.Print myConstant(1)
    Debug.Print myConstant(2)
    Debug.Print myConstant(3)
    Debug.Print myConstant(4)
End Sub

Personne ne peut le changer, le redimensionner ou en modifier le contenu ... De plus, vous pouvez définir vos constantes sur une seule ligne!

6
A.S.H

J'ai déclaré une constante String de "1,2,3,4,5" et ensuite utilisé Split pour créer un nouveau tableau, comme suit:

Public Const myArray = "1,2,3,4,5"

Public Sub createArray()

        Dim i As Integer
        A = Split(myArray, ",")

        For i = LBound(A) To UBound(A)
                Debug.Print A(i)
        Next i

End Sub

Quand j'ai essayé d'utiliser ReDim ou ReDim Preserve sur A, cela ne m'a pas été laissé. L'inconvénient de cette méthode est que vous pouvez toujours éditer les valeurs du tableau, même si vous ne pouvez pas changer la taille.

4
Soulfire

Si l'environnement VBA spécifique est Excel-VBA, une syntaxe de Nice est disponible à partir de la méthode Evaluate de l'application Excel qui peut être réduite à des crochets.

Regarde ça 

Sub XlSerialization1()
    Dim v
    v = [{1,2;"foo",4.5}]

    Debug.Assert v(1, 1) = 1
    Debug.Assert v(1, 2) = 2
    Debug.Assert v(2, 1) = "foo"
    Debug.Assert v(2, 2) = 4.5

    '* write all cells in one line
    Sheet1.Cells(1, 1).Resize(2, 2).Value2 = v
End Sub
1
S Meaden

Non, les tableaux ne peuvent pas être déclarés constants, mais vous pouvez utiliser une solution de contournement.

Vous pouvez créer une fonction qui retourne le tableau que vous voulez

http://www.vbaexpress.com/forum/showthread.php?1233-Solved-Declare-a-Constant-Array

0
Tragamor

Un tableau peut-il être déclaré comme une constante? Non.

Solutions de contournement - La solution la plus simple à laquelle je puisse penser consiste à définir une constante avec delim, puis à utiliser la fonction Split pour créer un tableau.

Const myConstant = "2,13,17"

Sub Test()
    i = Split(myConstant, ",")

    For j = LBound(i) To UBound(i)
        Debug.Print i(j)
    Next
End Sub
0
Pankaj Jaju

Si vous n'avez pas besoin d'une nouvelle instance à chaque fois, vous pouvez utiliser une variable locale Static pour éviter la création et l'initialisation d'objets multiples:

Private Function MyConstants()
    Static constants As Variant

    If IsEmpty(constants) Then
        constants = Array(2, 13, 17)
    End If

    MyConstants = constants
End Function
0
Pragmateek