我正在尝试确保构建的数组具有我期望的值。

应该将Cards数组填充到Shoe数组中。

当我计算数组的值时,我得到了预期的104,但是当我将值粘贴到Excel工作表中时,仅填充了13个单元格。

有没有一种简单的方法来检查数组的内容?

Sub CreateShoe()

Dim decks As Integer
decks = 2


Dim Cards As Variant
Dim shoe As Variant
Dim cnt As Integer


Cards = Array(2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10, "A")
ReDim shoe(1 To 52 * decks)

cnt = 1

For i = LBound(Cards) To UBound(Cards)
shoe(cnt) = Cards(i)
cnt = cnt + 1
Next i

Range("A1:A99") = WorksheetFunction.Transpose(shoe)

End Sub

最佳答案

您可以使用Join

Sub test()
    Dim Directions As Variant
    Directions = Array("North", "South", "East", "West")
    Debug.Print Join(Directions, ", ")
End Sub


哪些印刷品

North, South, East, West


在立即窗口中。另外,如果您使用调试器单步执行代码,则可以在“本地窗口”中展开数组的名称并检查各个元素。

编辑时:在最后一点上扩展。如果在VBA编辑器中选择View -> Locals Window并在将shoe发送到工作表的代码行之前设置断点(通过单击行的左侧),则应该看到以下内容:

arrays - 检查阵列VBA的值-LMLPHP

如果运行sub,它将进入中断模式,如下所示:

arrays - 检查阵列VBA的值-LMLPHP

然后,如果在shoe上展开,则会看到:

arrays - 检查阵列VBA的值-LMLPHP

这足以表明您没有在索引13之后初始化shoe。其他人已经发布了显示此bug来源的答案-但这确实是一项重要技能,能够根据您的问题检查的值。数组。

在“编辑”中,Join不适用于既不是Variant也不是String的数组。如果您有一个声明为例如的数组

Dim Directions(1 to 4) as Integer


您可以先通过以下功能运行它:

Function ToVariant(v As Variant) As Variant
    Dim temp As Variant
    Dim i As Long
    ReDim temp(LBound(v) To UBound(v))
    For i = LBound(v) To UBound(v)
        temp(i) = v(i)
    Next i
   ToVariant = temp
End Function


然后Join(ToVariant(Directions), ", ")将按预期工作。

09-25 17:54