Excel VBA>保存工作簿之前,公式不会更新

我有一个非常大的Excel工作簿(25 +工作表,15 + VBA模块)进行财务分析。

我注意到一个公式不会显示一个值,直到我手动保存工作簿2 – 3次。 保存之前,它将显示为一个破折号( – )。 保存2 – 3次后,数值显示为预期。

我已经在我的macros运行已经放了一些ActiveWorkbook.Save ,但他们似乎并没有影响这种情况。

问题的公式是(对于一个单元格):

 =OFFSET(THIS_CELL, 0, -1)+INDEX('ExternalWorksheet'!$A$1:$CR$300,MATCH("Some Term",'ExternalWorksheet'!$A:$A,0),MATCH($B5,'ExternalWorksheet'!$1:$1,0))+INDEX('ExternalWorksheet'!$A$1:$CR$300,MATCH("Some Other Term",'ExternalWorksheet'!$A:$A,0),MATCH($B5,'ExternalWorksheet'!$1:$1,0))+INDEX('ExternalWorksheet'!$A$1:$CR$300,MATCH("Yet Another Term",'ExternalWorksheet'!$A:$A,0),MATCH($B5,'ExternalWorksheet'!$1:$1,0))-OFFSET(THIS_CELL, 0, -17) 

(我知道这是不守规矩,我没有创build它,我只是程序员;))

我正在使用THIS_CELL技巧,因为这个公式出现在这个工作表的多个“表”中。

我的客户不喜欢这个列显示为破折号和依赖它的列出现N / A直到他保存。 从我所知道的情况来看,这种行为与THIS_CELL(或OFFSET)的使用有关,就好像我删除OFFSET一样,单元格按预期更新。 然而,我不能看到如何摆脱它,因为我不得不在工作表中的多个“表”重复此公式,并让他们引用正确的单元格。 我也不能切换到RC符号,因为我的客户不喜欢它。

您可以修改THIS_CELL欺骗,通过更改初始选定的单元格以产生必要的偏移量,完全消除对OFFSET函数的依赖性。 这些方向的第一步select单元格A1(这很重要!)的原因是THIS_CELL总是指您select的单元格。 你不想要你select的单元格。 你想要一个1或17列在左边。

(从创build一个名为THIS_CELL的公式中被盗和修改)

  1. 在当前的工作表中,select单元格R1 (这很重要!)
  2. 打开名称pipe理器(Ctl + F3)
  3. 点击新build…
  4. 在名称中input“THE_CELL_BEHIND_ME”
  5. input以下公式: =!Q1

注意:确保单元格R1被选中。 这个公式是相对于ActiveCell的。

  1. 在范围下:select工作簿。

  2. 点击OK。

  3. 重复使用名称THE_CELL_WAY_BEHIND_ME和=!A1来引用。

  4. closures名称pipe理器。

使用=THE_CELL_BEHIND_ME=OFFSET(THIS_CELL, 0, -1)相同, =OFFSET(THIS_CELL, 0, -17) =THE_CELL_WAY_BEHIND_ME=OFFSET(THIS_CELL, 0, -17)

我做了CTRL + S保存和ActiveWorkbook.Save ,在这种情况下,他们的工作方式不同。 无论我通过VBA保存多less次,都不会更新公式。 CTRL + S似乎是强制重新计算。

从这个post我join

 ActiveSheet.EnableCalculation = False ActiveSheet.EnableCalculation = True 

在保存之前,这已经解决了这个问题。