我试图在VBA中为数组分配一些值,问题是当我尝试打印数组的每个值时,我得到的值多于预期值,因为第一个值被赋值给Header。
我有这样的值:
这是我的代码:
Function xyz()
Dim Category as Variant
Set Category = Sheets("Reports").Range("A4:A8")
End Function
我得到的价值是:
MsgBox Category(0) =Category
MsgBox Category(1) =Global
MsgBox Category(2) =KAM
MsgBox Category(3) =Salesman
MsgBox Category(4) =External
MsgBox Category(5) =Admin
据我所知,数组的Option Base默认设置为'0',那么为什么Category(0)值考虑“A3”单元而不是“A4”单元?
答案 0 :(得分:1)
Sheets("Reports").Range("A4:A8")
正在返回Range
个对象,您可以引用与该范围相关的单元格。例如,如果您在标题上方的单元格中放置一些示例文本,并尝试MsgBox Category(-1)
,则会显示该值。
看看这个:http://msdn.microsoft.com/en-us/library/office/ff841096%28v=office.15%29.aspx
由于Item
是Range
类的默认属性,因此您可以在不明确使用Range.Item
的情况下引用它(例如,Category(0)
在您的示例中与{Category.Item(0)
相同1}})
Item
属性 - 无论是在Category.Item(0)
中明确提供,还是在您的情况下隐含地在Category(0)
中提供,都会返回另一个范围,表示其地址相对于您的范围的单元格。这就是为什么如果你运行我的测试并用单元格A2中的示例文本调用MsgBox Category(-1)
,它将显示该文本。
仅供参考:如果您想证明Category(0)
实际上是一个范围,请运行MsgBox TypeName(Category.Cells(0))