我正在努力在VBA中转换为数组:
Dim list As Range
Set list = Range(series, series.End(xlDown))
list.Select
Dim table() As Variant
Set table = list.value
我的理解是value
返回一个数组吗?我不明白为什么VBA会告诉我"can't assign to array"
。
我的list
范围在Select
的Excel中看起来像那样,我的目标是将其作为一个数组,以便我可以使用类似Format(table.Rows(i).Columns(1).value, "yyyy-mm-dd")
的格式来设置日期格式,循环播放我的桌子。
02-Sep-09 1.00
18-Sep-09 1.00
16-Oct-09 1.00
20-Nov-09 1.00
18-Dec-09 1.00
19-Mar-10 1.00
18-Jun-10 1.00
顺便说一句,是否可以修改表格?
谢谢!
答案 0 :(得分:4)
这里有很多问题。
问题1
Set table = list.value
表不是对象,因此您无法设置它。尝试:
table = list.value
问题2
series是与图表关联的VBA关键字。请选择一个名称,例如MyWSTable,这对VBA没有任何意义。
问题3
工作表名称本身不是范围。尝试:
Dim Table() As Variant
Table = Names("MyWSTable").RefersToRange.Value
注意:您不需要变量列表,也不需要选择范围。
回答格式问题
以下代码将重新格式化您的日期:
For inxrow = 1 To UBound(Table, 1)
For inxcol = 1 To UBound(Table, 2)
Table(inxrow, 1) = "ddd d mmm yyyyy"
Table(inxrow, 2) = ""
Next
Next
Names("MyWSTable").RefersToRange.NumberFormat = Table
答案 1 :(得分:2)
您可以删除您的选择:list.Select
为了确保在为数组指定范围时不会出错,最好将数组声明为变体:
Dim table As Variant
table = Range(series, series.End(xlDown)).Value
答案 2 :(得分:1)
正在弹出该错误消息,因为您使用 SET 来填充数组。丢弃SET,它应该加载。
您可以按如下方式直接填充数组:
Dim table() As Variant
table=Range(series, series.End(xlDown))
省略选择步骤可使您的代码更安全,更快捷。
很遗憾,您无法直接将值加载为日期。您必须循环遍历阵列中的每个项目并将它们转换为日期。
答案 3 :(得分:0)
你这是错误的。您应该使用范围的NumberFormat
属性来指定显示格式。像这样:
Range("A:A").NumberFormat = "yyyy-mm-dd"