Je travaille avec un tableau bidimensionnel qui stocke un location et une date sous chaque itération. Je définis dynamicment la limite supérieure de cette dimension à l'aide d'une variable de countur («i»), c'est-à-dire:
ReDim arrLocDt(1 To i, 0 To 1)
Lors du debugging dans la window de surveillance, j'ai toujours trouvé lourd de ne pas nommer les éléments individuels, par exemple, au lieu de
arrLocDt(1,0) and arrLocDt(1,1)
J'aimerais voir:
arrLocDt(1,Location), arrLocDt(1,Date), arrLocDt(2,Location), arrLocDt(2,Date), etc.
Récemment, j'ai appris sur User-Define Types
par l' User-Define Types
ce qui permettrait un tel étiquetage des éléments. J'ai donc essayé ce qui suit:
1. Défini une nouvelle UDT
Public Type MyType strLocation As Ssortingng strDate As Ssortingng End Type
2. Essayé la définition suivante avec un dimensionnement dynamic de la limite supérieure
Dim test(1 to i) As MyType
Ce qui précède a échoué parce que j'ai eu l'erreur Constant Expression Required
.
Veuillez indiquer comment je peux dimensionner de façon dynamic la limite supérieure d'un UDT, et si cela n'est pas possible, une alternative qui pourrait encore me permettre d'étiqueter mes articles.
Il devrait être aussi simple que:
Dim arrLocDt() As MyType ReDim arrLocDt(1 To x) As MyType
(Le premier Dim
n'est en réalité pas requirejs. Consultez cette publication pour plus de détails.)
La raison pour laquelle vous rencontrez des problèmes est que vous initialisez ( Dim
) un tableau de n'importe quel type avec une taille variable. Par exemple, cela est illégal aussi:
Dim mySsortingngArray(x) As Ssortingng
… ce n'est pas seulement une chose UDT. Le calibrage ou le redimensionnement dynamic d'un tableau ne peut être effectué qu'à l'exécution avec un ReDim
.
Cela dit, vous pourriez faire ceci:
Dim arrLocDt(1 to 10) As MyType
Et plus tard, lorsque vous avez besoin d'une taille différente, procédez comme suit:
ReDim arrLocDt(1 To x) As MyType
… mais vous ne pouvez pas simplement commencer par ceci:
Dim arrLocDt(1 to x) As MyType
Donc, encore une fois, si vous ne savez pas quelle sera la taille initiale, il suffit de déclarer le tableau sans limites … Dim arrLocDt() As MyType
puis ReDim
dès que vous connaissez la taille et que vous devez utiliser il.
Aussi, bon conseil, si vous devez resize une deuxième fois, et que vous voulez conserver ce qui s'y trouve, utilisez Preserve
Key Word, comme ceci:
ReDim Preserve arrLocDt(1 to y) As MyType 'resizing, but keeping my stuff