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的公式中被盗和修改)
- 在当前的工作表中,select单元格R1 (这很重要!)
- 打开名称pipe理器(Ctl + F3)
- 点击新build…
- 在名称中input“THE_CELL_BEHIND_ME”
- input以下公式:
=!Q1
注意:确保单元格R1被选中。 这个公式是相对于ActiveCell的。
-
在范围下:select工作簿。
-
点击OK。
-
重复使用名称THE_CELL_WAY_BEHIND_ME和
=!A1
来引用。 -
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
在保存之前,这已经解决了这个问题。