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

时间:2015-02-17 00:54:32

标签: excel vba

我有一个非常大的Excel工作簿(25个以上的工作表,15个以上的VBA模块)用于财务分析。

我注意到,在我手动保存工作簿2到3次之前,其中一个公式不显示值。保存之前,它将显示为短划线( - )。保存2到3次后,值将按预期显示。

我已经在我的宏运行中添加了一些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)

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

我正在使用in this other SO post描述的THIS_CELL技巧,因为此公式显示在此工作表的多个“表格”中。

我的客户不满意这个列显示为破折号,依赖它的列在他保存之前显示为N / A.据我所知,这种行为与THIS_CELL(或OFFSET)的使用有关,好像我删除了OFFSET,单元格按预期更新。但是,我无法看到如何摆脱它,因为我必须在工作表中的多个“表”上重复此公式,并让它们引用正确的单元格。我也无法切换到RC表示法,因为我的客户不喜欢它。

2 个答案:

答案 0 :(得分:1)

您可以修改THIS_CELL技巧,通过更改初始选定的单元格来生成必要的偏移量,从而完全删除对OFFSET函数的依赖性。这些方向的第一步说明选择单元格A1(这很重要!)的原因是THIS_CELL始终引用您选择的单元格。你不想要你选择的单元格。你想要左边的1或17列。

(从Create a named formula called THIS_CELL被盗和修改)

  1. 在当前工作表中,选择单元格 R1 (这很重要!)
  2. 打开名称管理器(Ctl + F3)
  3. 点击新建...
  4. 输入" THE_CELL_BEHIND_ME"进入姓名:
  5. 输入以下公式:参考:=!Q1
  6. 注意:确保选中 R1 单元格。该公式与ActiveCell相关。

    1. 在范围下:选择工作簿。

    2. 单击“确定”。

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

    4. 关闭名称管理器。

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

答案 1 :(得分:0)

我在CTRL + S save和ActiveWorkbook.Save之间进行了比较,在这种情况下,它们的工作方式不同。无论我通过VBA保存多少次,它都不会更新公式。 CTRL + S似乎强制重新计算。

我在

中添加post
ActiveSheet.EnableCalculation = False  
ActiveSheet.EnableCalculation = True

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