2017-02-16 113 views
1

任何人都可以请解释什么是这个错误的原因?代码对我来说看起来非常好。编译错误:预期的数组 - 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.Range("A1").Offset(i, 0) 
    Next i 

End Sub 
+6

您已经将'prodCode'声明为一个字符串,但不是一个字符串数组 – YowE3K

+2

'prodCode()As String' –

+0

@ YowE3K谢谢!那太简单了! –

回答

1

您已经声明prodCode作为一个字符串,而不是作为一个字符串数组。如果您希望将该变量用作数组,则需要使用prodCode() As String


注:

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已被用来改变:您还可以通过使用一个Variant数组,它允许你再到“负荷”在一次传送中操作阵列加快你的代码了数组的形状从一个1 To n, 1 To 1二维数组到一个1 To n一维数组。