dynamic调整VBA用户定义types的上界

我正在使用一个二维数组,在每次迭代下存储一个位置和date。 我使用计数器variables(“i”)dynamic设置该维度的上界,即:

ReDim arrLocDt(1 To i, 0 To 1) 

在Watch窗口中进行debugging时,我总是觉得很麻烦,我无法命名单个项目,例如,而不是

 arrLocDt(1,0) and arrLocDt(1,1) 

我想看看:

 arrLocDt(1,Location), arrLocDt(1,Date), arrLocDt(2,Location), arrLocDt(2,Date), etc. 

最近,我了解了User-Define Types ,这将允许这样的项目标签。 因此我尝试了以下几点:

1.定义一个新的UDT

 Public Type MyType strLocation As String strDate As String End Type 

用dynamic的上限来试验下面的定义

 Dim test(1 to i) As MyType 

上面的失败,因为我得到了错误Constant Expression Required

请告诉我如何dynamic地调整UDT的上限,如果这是不可能的,可以select一个可以让我标记项目的选项。

它应该像以下一样简单:

 Dim arrLocDt() As MyType ReDim arrLocDt(1 To x) As MyType 

(第一个Dim实际上是不需要的,详情请看这个post。)

你遇到问题的原因是你初始化( Dim )一个可变大小的任何types的数组。 例如,这也是非法的:

 Dim myStringArray(x) As String 

…这不仅仅是一个UDT的东西。 dynamicresize或调整数组大小只能在运行时使用ReDim

这就是说,你可以这样做:

 Dim arrLocDt(1 to 10) As MyType 

然后,当你需要不同的尺寸时,请这样做:

 ReDim arrLocDt(1 To x) As MyType 

…但是你不能简单地从这个开始:

  Dim arrLocDt(1 to x) As MyType 

所以,再一次,如果你不知道初始大小是什么,只要声明数组没有任何界限… Dim arrLocDt() As MyType ,然后知道大小,然后你需要使用ReDim它。

另外,很酷的提示,如果你需要再次resize,并且想要保留那里的内容,可以使用Preserve Key Word,如下所示:

 ReDim Preserve arrLocDt(1 to y) As MyType 'resizing, but keeping my stuff