我们可以将像普通一维数组一样的ArrayList分配给Excel范围吗?

时间:2012-12-23 08:09:27

标签: excel-vba vbscript wsh vba excel

考虑下面的ArrayList:

   Dim myAL As New ArrayList()
    myAL.Add("The")
    myAL.Add("quick")
    myAL.Add("brown")
    myAL.Add("fox")
    myAL.Add("jumped")
    myAL.Add("over")
    myAL.Add("the")
    myAL.Add("lazy")
    myAL.Add("dog")

那么现在我们可以将其值水平设置为Excel范围吗?或者在此之前我们需要执行任何转换?

CODE

Option Explicit

    Dim myQueue,i
    Set myQueue = CreateObject("System.Collections.ArrayList")
    'Dim Set Dic = CreateObject("Scripting.Dictionary

    myQueue.Add("jumped")
    myQueue.Add("over")
    myQueue.Add("")
    myQueue.Add("")
    myQueue.Add("dog")
    myQueue.Add("Cat")

    i=0
    Do While myQueue.Count > i

      MsgBox(myQueue(i))
    i=i+1
    Loop

    MsgBox("Capacity=" & myQueue.Capacity & "Count:" & myQueue.Count)

    myQueue.Remove("dog")

    MsgBox("Capacity=" & myQueue.Capacity & "Count:" & myQueue.Count)

    i=0
    Do While myQueue.Count > i

      MsgBox(myQueue(i))
    i=i+1
    Loop

当我们执行任何删除操作时,ArrayList的大小是否会像字典对象一样自动调整,或者我们需要使用任何(Re)Dim语句来处理大小?

谢谢,

1 个答案:

答案 0 :(得分:1)

首先,您需要将ArrayList设置为数组:

listArray = myAl.ToArray()

然后水平粘贴:

Range("A1").Resize(, UBound(listArray, 1) + 1) = listArray

垂直粘贴:

Range("A1").Resize(UBound(listArray, 1) + 1) = Application.Transpose(listArray)

使用Remove / RemoveRange删除项目时,可以调用.Count属性以获取更新的数组大小。 arraylist上没有Ubound / LBound。