VBA错误:如何在VBA中定义和初始化数组

时间:2019-05-22 04:09:30

标签: arrays excel vba dimensions static-initialization

我从Microsoft复制了此代码,但是它不起作用。

Dim Pixels(1 To 3) As Integer Pixels = Array(1, 2, 3)

执行时,我在Array语句中的'1'上遇到错误 说“无效的外部程序”。

我正在从初始化模块运行代码,并希望有一种快速的方法来初始化“像素”,并希望我可以使用“数组”。

感谢您的帮助。 Mac

2 个答案:

答案 0 :(得分:2)

这里有一些示例方法...

Public Sub DefineArray()
    Dim i As Long

    ' ---------------------------------------------------------------
    ' Using the Array function
    ' ---------------------------------------------------------------
    Dim arrTest1 As Variant

    arrTest1 = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

    For i = 0 To UBound(arrTest1)
        Debug.Print arrTest1(i)
    Next

    ' ---------------------------------------------------------------
    ' ReDim Preserve
    ' ---------------------------------------------------------------
    Dim arrTest2() As String

    For i = 0 To 10
        ReDim Preserve arrTest2(i)
        arrTest2(i) = i
    Next

    For i = 0 To UBound(arrTest2)
        Debug.Print arrTest2(i)
    Next

    ' ---------------------------------------------------------------
    ' Fixed at declaration
    ' ---------------------------------------------------------------
    Dim arrTest3(10) As String

    For i = 0 To UBound(arrTest3)
        arrTest3(i) = i
    Next

    For i = 0 To UBound(arrTest3)
        Debug.Print arrTest3(i)
    Next

    ' ---------------------------------------------------------------
    ' Using a function that returns an array, e.g. Split
    ' ---------------------------------------------------------------
    Dim strTest As String, arrTest4 As Variant

    strTest = "This is a test"
    arrTest4 = Split(strTest, " ")

    For i = 0 To UBound(arrTest4)
        Debug.Print arrTest4(i)
    Next

    ' ---------------------------------------------------------------
    ' From a range
    ' ---------------------------------------------------------------
    Dim arrTest5 As Variant, lngRow As Long, lngCol As Long

    arrTest5 = Sheet1.Range("A1:K10").Value

    For lngRow = LBound(arrTest5, 1) To UBound(arrTest5, 1)
        For lngCol = LBound(arrTest5, 2) To UBound(arrTest5, 2)
            Debug.Print arrTest5(lngRow, lngCol)
        Next
    Next
End Sub

希望这会给您一个很好的横截面,并且根据注释,确保它包含在函数或过程(子)中。看看我的例子。

答案 1 :(得分:0)

您可以在下面尝试此示例。

Dim Pixcels(2) As Integer

Pixcels(0) = 1

Pixcels(1) = 2

Pixcels(2) = 3