在VBA中让Excel表格从数据源刷新数据

51

如何在Excel中使用VBA使电子表格数据自动重新计算,而不是通过修改单元格值这种笨拙的方式?

6个回答

63
以下几行代码可解决此问题:
ActiveSheet.EnableCalculation = False  
ActiveSheet.EnableCalculation = True  

编辑: .Calculate() 方法并不能适用于所有函数。我在一个包含插件数组函数的工作表上进行了测试。 我使用的生产工作表足够复杂,我不想测试 .CalculateFull() 方法,但它可能会奏效。


1
实际上,对于这个问题,有不同级别的 .Calculate() 和 .CalculateFull() 方法。 - GSerg
2
我已经在一个工作表上测试了Calculate函数,但并不是所有单元格中的函数都会重新计算。你也可以通过切换“dirty”位来实现,但我发现这是最简单的解决方案。 - Lance Roberts
使用EnableCalculation属性是个好主意,因为它允许在工作表级别上重新计算单个工作表。相比之下,Application.CalculateFull会强制对所有数据进行完整的计算,不仅限于单个工作表或工作簿,而是包括所有打开的工作簿!这可能会导致过度计算,特别是当用户打开了几个不相关的、潜在复杂的工作簿时。 - drwatsoncode
我写了一个关于刷新“活动工作簿”而不与其他打开的工作簿一起刷新的答案。 - Calculus Knight

20

这应该能解决问题...

'recalculate all open workbooks
Application.Calculate

'recalculate a specific worksheet
Worksheets(1).Calculate

' recalculate a specific range
Worksheets(1).Columns(1).Calculate

对我来说 Calculate 能起作用,但 EnableCalculation 却无效。 - hoang tran

8
有时候 Excel 会出现故障,需要重启以重新应用公式。这种情况通常在使用自定义公式时发生。请确保您有以下脚本。
ActiveSheet.EnableCalculation = True

重新应用所选的方程式。
Cells(RowA,ColB).Formula = Cells(RowA,ColB).Formula

这可以根据需要进行循环。

6
你也可以尝试一下

Application.CalculateFull

或者

Application.CalculateFullRebuild

如果您不介意重建所有打开的工作簿,而不仅仅是活动工作表,请使用CalculateFullRebuild。此选项还会重建依赖关系。


3
我在使用VBA时遇到了一个问题,即无法关闭背景图片(DRAFT水印)。我使用代码Sheets(1).PageSetup.CenterHeader =“”进行更改,但更改没有显示出来。所以我需要一种刷新的方法。使用ActiveSheet.EnableCalculation部分解决了这个问题,但未覆盖未使用的单元格。
最终,我通过使用一行代码找到了需要的功能,在不设置图像时使其消失:
Application.ScreenUpdating = True

1

在数据连接更新后,一些UDF未能执行。我正在使用一个子程序,尝试重新计算单个列:

Sheets("mysheet").Columns("D").Calculate

但是上述语句没有效果。除了kambeeks建议替换公式之外,以上解决方案都没有帮助,并且在更新期间启用手动重新计算时很快。下面的代码解决了我的问题,即使不完全负责OP“kluge”评论,它也提供了一种快速/可靠的解决方案,以强制重新计算用户指定的单元格。
Application.Calculation = xlManual
DoEvents
For Each mycell In Sheets("mysheet").Range("D9:D750").Cells
    mycell.Formula = mycell.Formula
Next
DoEvents
Application.Calculation = xlAutomatic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接