2016-04-16 102 views
2

这很可能是您的一个基本问题,我自己学习了vba,因此我缺乏一些基本知识。在VBA中刷新动态范围

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

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

返回一个错误。

谢谢您的帮助

回答

2

尝试调整,而不是进行细胞内的数学:

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 
0

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

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)结束。因此,只有在打开支持许多列的Excel文件(兼容模式下的版本2007+和而不是)时,才需要确保您正在运行此宏。