无法写入动态范围

时间:2013-11-25 04:40:33

标签: vba excel-vba excel

我想在包含多个表格的Excel工作表上自动更新范围。

我有

Dim datarange as Range
Dim dataend as Integer
dataend = Worksheets("Sheet2").Range("B2").CurrentRegion.Rows.Count
Set datarange = Worksheets("Sheet2").Range(Cells(2, 2), Cells(8, dataend))

这是为了更新另一张图表上的图表范围。

当我在即时窗口中打印Worksheets("Sheet2").Range("B2").CurrentRegion.Rows.Count时,它返回数字7,所以我知道它正在计算行数。但是当我尝试运行代码时,我收到一条错误消息“应用程序定义或对象定义错误”。我不知道为什么Cells属性不会取dataend变量的值。

2 个答案:

答案 0 :(得分:1)

如果您在没有合格工作表参考的情况下使用Cells(),则默认为活动工作表,因此您需要限定两个参考文件,以确保它们指向Sheet2:

With Worksheets("Sheet2")
Set datarange = .Range(.Cells(2, 2), .Cells(8, dataend))
End With

答案 1 :(得分:0)

您输入Cell,表示活动工作表。

您可以使用

Set datarange = Worksheets("Sheet2").Range(Worksheets("Sheet2").Cells(2, 2), Worksheets("Sheet2").Cells(8, dataend)

获得范围。

但代表性太长了。因此,您可以使用with ... end with来简化它,就像@Tim Williams在答案中所写:

With Worksheets("Sheet2")
Set datarange = .Range(.Cells(2, 2), .Cells(8, dataend))
End With

意思相同。