【问题标题】:Get User Input and Add it to last index of Array VBA获取用户输入并将其添加到数组 VBA 的最后一个索引
【发布时间】:2013-12-02 23:13:29
【问题描述】:

我需要知道如何使用用户输入将项目添加到现有数组。

我尝试过这样的事情:

Dim MyArray(100) as String

UBound(MyArray) = Inputbox("What's the name of your new array item?")

【问题讨论】:

    标签: arrays vba excel user-input


    【解决方案1】:

    Ubound(myArray) 返回一个 Long 数据类型,它实际上返回数组的长度/大小。

    如果要读取或分配值,则必须完全限定数组,即。

    MyArray(ubound(myArray)) = "new Value"MyArray(100) = "new Value"

    Sub Main()
    
        Dim MyArray(100) As String
    
        MyArray(UBound(MyArray)) = InputBox("What's the name of your new array item?")
    
        MsgBox MyArray(UBound(MyArray))
    
    End Sub
    

    【讨论】:

    • 嗯,假设目前,数组只有 4 个 100 的项。该语句会将新的数组项添加到 100 位置。如何将其添加到下一个可用位置,即第 5 个位置?
    • a collection 在这种情况下会更合适。您不必在开始时指定集合的​​大小,并且像collectionObj.Add() 这样的简单方法会将新项目添加到当前队列的末尾。
    • 如果您真的想使用数组并将项目添加到数组中的下一个空(未分配)元素,这将是一个很好的新问题。
    • 我不知道 Collections 对象,Mehow。它似乎比数组更有趣。我现在将尝试阅读有关它们的内容。再次感谢
    • @TheWorldIsYours 没问题 :)
    【解决方案2】:

    您可以改用动态数组:

    Dim MyArray() As String
    
    ' Then to add a new element:
    Redim Preserve MyArray(1 to SafeUBound(MyArray) + 1)
    MyArray(SafeUBound(MyArray)) = InputBox("Who's yer daddy?")
    
    Function SafeUBound(vArray As Variant) As Long
    
    Dim x As Long
    
    On Error Resume Next
    x = UBound(vArray)
    If Err.Number = 0 Then
        SafeUBound = x
    Else
        SafeUBound = 0
    End If
    
    End Function
    

    调用 SafeUbound 是必要的,因为在未初始化的数组上调用 UBound 或 LBound 会引发错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多