gpt4 book ai didi

excel - 动态调整 VBA 用户定义类型的上限大小

转载 作者:行者123 更新时间:2023-12-02 21:56:48 24 4
gpt4 key购买 nike

我正在使用一个二维数组,该数组在每次迭代下存储位置和日期。我使用计数器变量(“i”)动态设置该维度的上限,即:

ReDim arrLocDt(1 To i, 0 To 1)

在 Watch 窗口中调试时,我总是觉得很麻烦,无法命名各个项目,例如,而不是

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

我想看看:

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

最近,我了解了用户定义类型,它允许对项目进行此类标记。因此我尝试了以下方法:

<强>1。定义了一个新的UDT

Public Type MyType

strLocation As String
strDate As String

End Type

<强>2。尝试使用以下定义来动态调整上限

Dim test(1 to i) As MyType

上述操作失败,因为我收到错误需要常量表达式

请告知我如何动态调整 UDT 上限的大小,如果不可能,请提供仍然允许我标记我的项目的替代方案。

最佳答案

它应该像这样简单:

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

(第一个 Dim 实际上不是必需的。有关详细信息,请参阅 this 帖子。)

您遇到问题的原因是您初始化(Dim)具有可变大小的任何类型的数组。例如,这也是非法的:

Dim myStringArray(x) As String

...这不仅仅是 UDT 的事情。动态调整数组大小或调整数组大小只能在运行时使用 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

还有一个很酷的提示,如果您需要再次调整大小,并且想要保留其中的内容,请使用 Preserve 关键字,如下所示:

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

关于excel - 动态调整 VBA 用户定义类型的上限大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23877256/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com