Est-il possible de:
Déclarer un tableau comme une constante
OR
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é.
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!
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.
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
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
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
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