这是我第一次在VBA中使用数组。我试图根据某些条件检查我的数组的值。
我通过 Manager 检查我的数组值。窗口是空的。我做错了什么?
Option Explicit
Sub test()
'define dynamic array
Dim sn As Variant
Dim i As Long
'Loop through all the row
For i = 1 To Rows.Count
If Cells(i, 12).Value = "Renewal Reminder" And Not IsEmpty(Cells(i, 12).Value) Then
'assign cell value to array
sn = Cells(i, 1).Value
Debug.Print "aaa" ' there are 8 cell values that meet the condition
End If
Next i
End Sub
更新
Dim sn as Varient
突出显示错误
未定义的用户定义类型
答案 0 :(得分:2)
除了错误消息中显示的拼写错误之外,您实际上并没有将[Node [Leaf 5,Leaf 3,Leaf 6],Leaf 6,Leaf 44]
用作数组 - 您只是将每个值存储在标量变量中,替换之前该变量中的值。
以下内容对您有用:
sn
正如the answer Chemiadel中所提到的,如果你知道那是什么,最好使用适当的基类型来声明你的变量。
因此,如果您知道列A包含文本,请将Option Explicit
Sub test()
'define dynamic array
Dim sn As Variant
Dim cnt As Long
Dim i As Long
ReDim sn(1 To 1)
cnt = 0
'Loop through all the row
For i = 1 To Cells(Rows.Count, "L").End(xlUp).Row
If Cells(i, 12).Value = "Renewal Reminder" Then
'assign cell value to array
cnt = cnt + 1
ReDim Preserve sn(1 To cnt)
sn(cnt) = Cells(i, 1).Value
Debug.Print "aaa" ' there are 8 cell values that meet the condition
End If
Next i
For i = 1 To cnt
Debug.Print sn(i)
Next
End Sub
替换为
Dim sn As Variant
或者,如果是双精度数,请使用
Dim sn() As String
等。如果列A可以包含各种不同类型,则使用Dim sn() As Double
可能是合适的。
注意:使用Variant
时,您不必包含()
,因为Variant
变量可以在标量,数组,对象等之间切换。
答案 1 :(得分:1)
您需要以这种方式声明Array并避免 Variant 数据类型:
静态数组:固定大小的数组
dim sn(10) as String
动态数组:您可以在代码运行时调整数组大小。
dim sn() as String
使用ReDim Preserve扩展阵列,同时保留现有值
ReDim Preserve sn(UBound(sn) + 10)