在VBA中刷新一个dynamic范围

这很可能是你的一个基本问题,我自己学了vba,所以我缺乏一些基本面。

我有一个计算回报的模拟电子表格。 模拟的数量不是恒定的,所以我只想刷新电子表格的一部分。 我的代码是这样的:

Worksheets("Monte Carlo").Range(Cells(1, 1), Cells(4 + MaxN, 1001)).Calculate 

返回一个错误。

感谢您的帮助

尝试resize,而不是在单元格内执行math运算:

 Worksheets("Monte Carlo").Cells(1,1).resize(4 + MaxN, 1001).Calculate 

如果失败,请尝试使用范围对象

 Dim rngData as Range Set rngData = Worksheets("Monte Carlo").Cells(1,1).resize(4 + MaxN, 1001) rngData.Calculate 

下面的代码应该工作(在我的系统上testing):

 Dim MaxN As Long With Worksheets("Monte Carlo") MaxN = .UsedRange.SpecialCells(xlCellTypeLastCell).Row .Range(.Cells(1, 1), .Cells(MaxN, 1001)).Calculate End With 

请注意,您的Range结束于MaxN行(无需在此处添加4,因为MaxN已经是最后一行),并且列1001(!!)等于列ALM。 因此,只有在打开支持许多列(版本2007+而不是兼容模式)的Excel文件时,才需要确保运行此macros。