【问题标题】:Set variable name with string variable in VBA在 VBA 中使用字符串变量设置变量名
【发布时间】:2018-05-30 22:59:25
【问题描述】:

我必须在循环中创建许多变量,所以我需要创建通用变量名称(注意,为了我的代码,我不能只将我想要创建的对象附加到列表或集合中)

我想的代码看起来像这样(n 是用户定义的变量,它是一个整数)

Dim var_name As String

For i = 1 To n
    var_name = "test" & i
    Set var_name = Range(Cells(1, 1), Cells(i * 2, i))
Next i

我想获得这样的变量:

  • test1 是从 A1 到 B2 的范围
  • test2 的范围从 A1 到 C4
  • test3 的范围从 A1 到 D6
  • .... testn 的范围从 A1 到任何值

它们不一定是范围,我真正想要的是使用存储在另一个变量中的字符串来声明一个变量名

【问题讨论】:

  • 您所要求的不能在 VBA 中完成,尽管它可以在 asp-classic 中完成,我认为 vbscript。您需要使用数组或可能命名的范围。
  • 顺便说一句,您的循环会创建 A1:A2、A1:B4、A1:C6 等。
  • 看看Scripting.Dictionary。语法会有点冗长,但是(根据您的示例)它应该能够为您提供非常相似的功能。
  • 使用 Range 类型的数组,维度从 1 到 n。您不能在 VBA 中使用变量变量名,而且由于 i 似乎是这里的真正关键,您可以直接对数组使用它。

标签: excel declare vba


【解决方案1】:

使用数组怎么样?

Dim Test()
ReDim Test(0)
...

当您收到新数据时,只需 ReDim 即可保留您的数组:

ReDim Preserve Test(UBound(Test)+1)
Test(UBound(Test)) = <new data>

我发现将数组的变量类型保留为默认 Variant 是最简单的方法,但这是个人喜好以及您如何使用该变量。例如,如果您将其发送到其他函数或 Sub xxx(Tst() as String) 那么您必须将其发送为 xxx(CStr(Test(i)) ),不太方便。

【讨论】:

    猜你喜欢
    • 2016-01-02
    • 2013-12-02
    • 2017-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多