VBA将范围转换为数组和格式日期

时间:2011-11-30 09:31:33

标签: excel-vba vba excel

我正在努力在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

顺便说一句,是否可以修改表格?

谢谢!

4 个答案:

答案 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"