Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
编译错误:应为数组-VBA_Vba - Fatal编程技术网

编译错误:应为数组-VBA

编译错误:应为数组-VBA,vba,Vba,谁能解释一下这个错误的原因吗?代码在我看来很好 Public n As Long, i As Long, prodCode As String Private Sub newArray() n = wsProducts.Range("A1", wsProducts.Range("A1").End(xlDown)).Rows.Count ReDim prodCode(n) For i = 1 To n prodCode(i) = wsProducts.

谁能解释一下这个错误的原因吗?代码在我看来很好

Public n As Long, i As Long, prodCode As String
Private Sub newArray()

    n = wsProducts.Range("A1", wsProducts.Range("A1").End(xlDown)).Rows.Count

    ReDim prodCode(n)

    For i = 1 To n
        prodCode(i) = wsProducts.Range("A1").Offset(i, 0)
    Next i

End Sub

您已将prodCode声明为字符串,但未声明为字符串的数组

如果希望将该变量用作数组,则需要将
prodCode()用作字符串


注意:您还可以通过使用变体数组来加快代码速度,该数组允许您在一次传输操作中“加载”数组:

Public n As Long, prodCode() As Variant
Private Sub newArray()

    n = wsProducts.Range("A1", wsProducts.Range("A1").End(xlDown)).Rows.Count
    'P.S. That statement would simplify to 
    'n = wsProducts.Range("A1").End(xlDown).Row

    prodCode = Application.Transpose(wsProducts.Range("A1:A" & n)

End Sub

Application.Transpose
已用于将数组的形状从
1改为n,1改为1
二维数组,改为
1改为n
一维数组。

您已声明
prodCode
为字符串,但不是字符串数组
prodCode()为字符串
@YowE3K谢谢!那太容易了!顺便说一句-如果将
prodCode()声明为Variant
(或者在本例中,甚至将
prodCode声明为Variant
),则可以通过将循环替换为
prodCode=Application.Transpose(wsProducts.Range(“A1:A”&n))