Taille dynamic du lien supérieur d'un type défini par l'user VBA

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