让Excel从VBA中刷新工作表上的数据

时间:2008-09-30 18:54:25

标签: excel vba excel-vba

如何在Excel中获取电子表格数据,以便在VBA中重新计算自己,而不会仅仅更改单元格值?

6 个答案:

答案 0 :(得分:56)

以下几行可以解决问题:

ActiveSheet.EnableCalculation = False  
ActiveSheet.EnableCalculation = True  

修改.Calculate()方法不适用于所有功能。我在带有附加阵列功能的工作表上测试了它。我正在使用的生产单很复杂,我不想测试.CalculateFull()方法,但它可能有效。

答案 1 :(得分:16)

这应该可以解决问题......

'recalculate all open workbooks
Application.Calculate

'recalculate a specific worksheet
Worksheets(1).Calculate

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

答案 2 :(得分:7)

有时Excel会打嗝并需要一个启动才能重新应用等式。在某些情况下,当您使用自定义公式时会发生这种情况。

确保您拥有以下脚本

ActiveSheet.EnableCalculation = True

重新应用选择方程式。

Cells(RowA,ColB).Formula = Cells(RowA,ColB).Formula

然后可以根据需要循环。

答案 3 :(得分:6)

您也可以尝试

Application.CalculateFull

Application.CalculateFullRebuild

如果您不介意重建所有打开的工作簿,而不仅仅是活动工作表。 (CalculateFullRebuild也会重建依赖项。)

答案 4 :(得分:3)

我在VBA中关闭背景图像(DRAFT水印)时出现问题。我的更改没有显示(使用Sheets(1).PageSetup.CenterHeader = ""方法执行) - 所以我需要一种方法来刷新。 ActiveSheet.EnableCalculation方法部分地解决了这个问题,但没有涵盖未使用的细胞。

最后,我找到了我需要的一个衬垫,当它不再被设置时使图像消失: -

Application.ScreenUpdating = True

答案 5 :(得分:0)

更新数据连接后,某些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