vba - Excel VBA 公式不能完全计算

标签 vba excel

我有一个切换单元格,它在我的工作簿中的多个工作表中提供计算。目标是,每当更改此切换单元格时,工作簿都会重新计算并提供更新编号。

我打开了手动计算。

以下是我尝试过的方法(注意代码在表格中)

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Cells(3, 4)) Is Nothing Then
        Application.Calculate
    End If

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Cells(3, 4)) Is Nothing Then
        Application.CalculateFull
    End If

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Cells(3, 4)) Is Nothing Then
        Application.CalculateFullRebuild
    End If

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Cells(3, 4)) Is Nothing Then
        range("DI:DI").calculate 
        'to calculate the specific range which drives the updated numbers
    End If

这些方法都不起作用。唯一的方法是保存工作簿并计算所有内容。

有什么想法吗?

- - - - - - - - - - - - - - -编辑 - - - - - - - - - - ---------

迄今为止唯一有效的解决方案,强制计算所有驱动最终结果的单元格。希望有更优雅的解决方案。总运行时间 ~3 秒\
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Cells(3, 4)) Is Nothing Then
        Worksheets("Dashboard").Range("af3").Calculate
        Worksheets("Base").Range("R1:R50000").Calculate
        Worksheets("Control").Range("R1:R50000").Calculate
        Worksheets("Base").Range("DI1:DI50000").Calculate
        Worksheets("Control").Range("DI1:DI50000").Calculate
        Worksheets("Dashboard").Range("W10:W5000").Calculate
        Worksheets("Dashboard").Range("L10:L5000").Calculate
        Worksheets("Dashboard").Range("Y10:Aa5000").Calculate
        Worksheets("Dashboard").Range("B2:B7").Calculate
end if

最佳答案

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Cells(3, 4)) Is Nothing Then
        Worksheets("Dashboard").Range("af3").Calculate
        Worksheets("Base").Range("R1:R50000").Calculate
        Worksheets("Control").Range("R1:R50000").Calculate
        Worksheets("Base").Range("DI1:DI50000").Calculate
        Worksheets("Control").Range("DI1:DI50000").Calculate
        Worksheets("Dashboard").Range("W10:W5000").Calculate
        Worksheets("Dashboard").Range("L10:L5000").Calculate
        Worksheets("Dashboard").Range("Y10:Aa5000").Calculate
        Worksheets("Dashboard").Range("B2:B7").Calculate
end if

强制重新计算所有相关范围。

其他方法可能不起作用,因为文件很大(~30mb)

关于vba - Excel VBA 公式不能完全计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47057697/

相关文章:

vba - VBA代码中的IF AND公式

vba - 尝试从 Worksheet Sub : 'Run-time Error: 1004' 调用 Module Sub

excel - 使用 YouTube API 的 HTTP POST 请求的请求正文中包含什么内容?

email - 在 Exchange 环境中从 Excel 发送电子邮件

excel - 为 VBA 类模块创建 DLL 还是更好的替代方案?

vba - 如何在 ms access vba 中运行追加查询作为事务的一部分

excel - 如何使用 Excel VBA 确定整个工作簿中的任何单元格中是否存在错误

arrays - 如何使用VBA隐藏多列列表框中的列

excel - 在Excel VBA中构建矩阵

r - 计算R中多列数据的总和、均值和方差