excelvba公式don';我不能完全计算

excelvba公式don';我不能完全计算,vba,excel,Vba,Excel,我有一个切换单元格,可以在工作簿的多个工作表中输入计算结果。目标是,无论何时更改此切换单元格,工作簿都会重新计算并提供更新编号 我已打开手动计算 下面是我尝试过的方法(注意代码在一张表格中) Private子工作表\u更改(ByVal目标作为范围) 如果不相交(目标,单元格(3,4))则为空 应用。计算 如果结束 Private子工作表\u更改(ByVal目标作为范围) 如果不相交(目标,单元格(3,4))则为空 应用程序 如果结束 Private子工作表\u更改(ByVal目标作为范围)

我有一个切换单元格,可以在工作簿的多个工作表中输入计算结果。目标是,无论何时更改此切换单元格,工作簿都会重新计算并提供更新编号

我已打开手动计算

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

Private子工作表\u更改(ByVal目标作为范围)
如果不相交(目标,单元格(3,4))则为空
应用。计算
如果结束
Private子工作表\u更改(ByVal目标作为范围)
如果不相交(目标,单元格(3,4))则为空
应用程序
如果结束
Private子工作表\u更改(ByVal目标作为范围)
如果不相交(目标,单元格(3,4))则为空
Application.calculatealReBuild
如果结束
Private子工作表\u更改(ByVal目标作为范围)
如果不相交(目标,单元格(3,4))则为空
范围(“DI:DI”)。计算
'来计算驱动更新数字的特定范围
如果结束
这些方法都不起作用。唯一的方法是保存工作簿并计算所有内容

有什么想法吗

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

到目前为止唯一有效的解决方案是,强制计算所有驱动最终结果的单元。希望有一个更优雅的解决方案。总运行时间~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
强制重新计算所有相关范围


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

事件是否发生,您是否真正进入了
中,如果
?您是否尝试了
Application.Calculation=xlCalculationAutomatic
?具体计算的是什么(内置函数或非易失性VBA UDF?),什么是
应用程序.CalculationMode
?如果您单步执行代码并暂停If语句,那么Target.Address和Cells(3,4).Address是什么?从放置debug.print/msgbox开始,以确保子文件被触发。您可以执行
工作表(“仪表板”)。计算
,看看它是否适合您。
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