excel VBA不同的工作表范围到数组

时间:2018-08-06 07:05:02

标签: excel vba excel-vba

我有这段代码可以将数据读入数组。

Public Const DATASHEET As String = "Data Entry"

由于某些原因,它起作用:

Function SomeCalculation(col As Integer) As Double
Dim data_table As Variant
Dim lastrow as Integer

lastrow = Worksheets(DATASHEET).Cells(Worksheets(DATASHEET).Rows.Count, col).End(xlUp).row
data_table = Range(Cells(1, col), Cells(lastrow, col + 5)).Value

但这失败了:

Function SomeCalculation(col As Integer) As Double
Dim data_table As Variant
Dim lastrow as Integer

lastrow = Worksheets(DATASHEET).Cells(Worksheets(DATASHEET).Rows.Count, col).End(xlUp).row
data_table = Worksheets(DATASHEET).Range(Cells(1, col), Cells(lastrow, col + 5)).Value

VBA在尝试执行最后一行时抛出错误。

第一个代码块的问题当然是我的数据存储在另一个工作表上的函数所在的单元格中。

有人有什么想法为什么会失败,和/或实现同一件事的另一种方法吗?

请注意,最大行有效(计算右表中的行)

谢谢!

2 个答案:

答案 0 :(得分:0)

尝试替换

data_table = Worksheets(DATASHEET).Range(Cells(1, col), Cells(lastrow, col + 5)).Value

使用

with Worksheets(DATASHEET)
    data_table = Range(.Cells(1, col), .Cells(lastrow, col + 5)).Value
end with

答案 1 :(得分:0)

只需完全引用单元格即可

data_table = Worksheets(DATASHEET).Range( _
  Worksheets(DATASHEET).Cells(1, col), _
  Worksheets(DATASHEET).Cells(lastrow, col + 5)
).Value

此外,请使用Long而不是Integer-整数在VBA中始终以long形式存储,因此它们会占用尽可能多的空间,只会给您更窄的数字范围。