我找不到实际定义数组的方法,推送一些值并将它们作为字符串输出到VBA中?(新阵列,推送,加入)

Tot*_*.js 2 arrays vba join

我已经找到了如何创建一个数组,但我不能轻易推送项目.我必须保持下一个位置的索引,并在每次推送项目时递增;

我还发现了一个具有漂亮的.Add方法的集合,其行为与push方法完全相同.但是我如何加入他们?全局Join方法不适用于Collections.

我在这里缺少什么?任何人都可以帮我定义一个数组,在没有索引的情况下轻松推送项目,然后将它们输出到一个用","间隔的字符串?

谢谢

SWa*_*SWa 10

你不能直接这样做.VBA中的数组通常需要在使用前进行索引和标注.

您可以在分配变量之前使用动态数组并调整大小:

Dim arr() As String
ReDim arr(0)

arr(UBound(arr)) = "Some String"
ReDim Preserve arr(UBound(arr) + 1)
arr(UBound(arr)) = "Some Other String"
ReDim Preserve arr(UBound(arr) + 1)
arr(UBound(arr)) = "Some 3rd String"

MsgBox Join(arr, ",")
Run Code Online (Sandbox Code Playgroud)

保留关键字维护数组中的值而不是覆盖它们.通常不建议采用上述方法,因为Preserve价格昂贵,只允许您调整数组的最后一个维度.

在VBA环境中,集合是不同的,速度较慢且通常不太灵活(您没有说过哪个环境,但我会假设Excel)

Dim coll As Collection
Dim itm As Variant
Dim tempS As String


Set coll = New Collection
coll.Add "Some String"
coll.Add "Some Other String"
coll.Add "Some 3rd String"

For Each itm In coll
    tempS = tempS & itm & ","
Next itm

MsgBox Left(tempS, Len(tempS) - 1)
Run Code Online (Sandbox Code Playgroud)

您需要遍历它们以构建数组.

根据您的需求,还有许多其他选择

内置方法

对于字符串,看看拆分:

Const stri As String = "Some String, Some Other String, Some 3rd String"
Dim arr() As String

arr = Split(stri, ",")

MsgBox Join(arr, ",")
Run Code Online (Sandbox Code Playgroud)

使用外部对象

脚本字典

Dim dic As Object

Set dic = CreateObject("scripting.Dictionary")
dic.Add "1", "Some String"
dic.Add "2", "Some Other String"
dic.Add "3", "Some 3rd String"

Debug.Print Join(dic.items, ",")
Run Code Online (Sandbox Code Playgroud)

.Net arrayList

Dim al As Object

Set al = CreateObject("System.Collections.Arraylist")
al.Add "Some String"
al.Add "Some Other String"
al.Add "Some 3rd String"

MsgBox Join(al.ToArray(), ",")
Run Code Online (Sandbox Code Playgroud)