vba - 如何通过枚举值来声明(初始化)一维和二维固定大小的数组?

标签 vba excel

我想将常量名称对存储在二维字符串数组中。我可以写:

Dim a(2, 1) As String     '0 to 2, and 0 to 1
a(0, 0) = "one"
a(0, 1) = "first"
a(1, 0) = "two"
a(1, 1) = "second"
a(2, 0) = "three"
a(2, 1) = "third"

但是我认为如果我让 VBA 通过查看即时给定的内容来设置数组的大小,它会更优雅和更可扩展。我想象这样的事情:
 Dim a({"one","first"}, _
       {"two","second"}, _
       {"three","third"}) as String

然后我意识到我什至不知道如何通过即时枚举(初始化)来声明一维数组。

这可能吗?如果是,如何?

是否有涵盖此 Q 的官方文档? ( This 不是。)

最佳答案

使其更优雅的最合理方法是创建基于给定字符串创建 2D 数组的新函数。

它可能如下所示:

Public Function create2DStringArray(ParamArray values() As Variant) As String()
    Dim varItem As Variant
    Dim strArray() As String
    Dim arraySize As Long
    Dim result() As String
    Dim iterator As Long
    '-------------------------------------------------------------------------------------------------

    On Error Resume Next
    arraySize = UBound(values) - LBound(values) + 1
    On Error GoTo 0


    ReDim result(0 To arraySize - 1, 0 To 1)


    For Each varItem In values
        strArray = VBA.Split(varItem, ";")
        result(iterator, 0) = strArray(0)
        result(iterator, 1) = strArray(1)
        iterator = iterator + 1
    Next varItem


    create2DStringArray = result


End Function

现在,您可以像这样初始化您的 String 数组:
Dim a() As String
a = create2DStringArray("one;first", "two;second", "three;third")

请注意,上面的函数有一些限制:
  • 它最多只能使用 30 个参数,
  • 如果任何给定的字符串在内部包含分号,则它不起作用(除非您选择了另一个分隔符,我在上面使用了分号)。
  • 关于vba - 如何通过枚举值来声明(初始化)一维和二维固定大小的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33255576/

    相关文章:

    Excel 宏 - 任何人都可以解释这一点吗?

    c# - Excel Interop - 如何更改命名范围

    excel - 如何将日期格式保留在特定公式中?

    excel - VBA Excel-如何使用 MS Excel 关闭中的取消按钮?

    vba - 使用 ActiveCell.Offset(0, 1).Value 在 VBA 中选择多个单元格

    c# - 为什么要注册 COM 接口(interface)?

    excel - 如何将多个文本文件导入单个excel工作表的列

    Excel:如何生成具有低和高2个实数的实数随机数?

    Excel vba宏根据单元格整数值多次复制行

    windows - Excel VBA - 是否有 TextChanging/TextChanged 或类似事件?或者如何在不使用 Enter 的情况下移动选择?