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