Range.Calculate不更新单元格中的值

时间:2014-02-13 18:43:41

标签: excel vba excel-vba

我有一个代码可以进行大量的计算,包括数组,这些代码运行得很好,但计算后它不会更新的一行除外。

要计算该范围,即上述行的总和,我正在使用:

Application.ScreenUpdating = True
Application.Range(Worksheets("Report2").Cells(40,4).Address & ":" & Worksheets("Report2").Cells(41, 33).Address).Dirty
Application.Range(Worksheets("Report2").Cells(40,4).Address & ":" & Worksheets("Report2").Cells(41,33).Address).Calculate
Application.ScreenUpdating = False

如果有人能为此提供任何信息,那将是很棒的。 谢谢。

RGDS, 罗德尼

4 个答案:

答案 0 :(得分:3)

也许您处于自动计算模式,而Report2不是活动工作表:

Range.Dirty是错误的,总是在活动表上工作

Range.Calculate不会在自动模式下重新计算未静音的单元格。

有关Range.Calculate

的其他限制,请参阅http://www.decisionmodels.com/calcsecretsg.htm

http://www.decisionmodels.com/calcsecretsh.htm有关使用VBA计算公式的更多信息。

答案 1 :(得分:0)

简单回答 - 你有轻微的疏忽......

在第一行放入"Report2"并在下一行放入"Report1"作为工作表名称。

希望这可以解决问题!!

答案 2 :(得分:0)

要捎带@John Bustos的建议,你在“,30”之间也有一个不必要的空间

修正了“Report1”和“,30”错误修正后的代码:

Application.ScreenUpdating = True
Application.Range(Worksheets("Report2").Cells(40,4).Address & ":" & Worksheets("Report2").Cells(41,33).Address).Dirty
Application.Range(Worksheets("Report2").Cells(40,4).Address & ":" & Worksheets("Report2").Cells(41,33).Address).Calculate
Application.ScreenUpdating = False

如果您遇到第二行问题,请尝试在使用以下方法调用单元格之前激活工作表:

ThisWorkbook.Sheets("Report2").Activate

答案 3 :(得分:0)

实际上,如果Report2不是活动工作表,则代码还有另一个问题:范围计算将计算活动工作表上的等效范围

我认为你真正想做的事情更像是这样的事情

Worksheets("Report2").Cells(40, 4).Resize(2, 30).calculate