我有一个非常大的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表示法,因为我的客户不喜欢它。
答案 0 :(得分:1)
您可以修改THIS_CELL技巧,通过更改初始选定的单元格来生成必要的偏移量,从而完全删除对OFFSET
函数的依赖性。这些方向的第一步说明选择单元格A1(这很重要!)的原因是THIS_CELL始终引用您选择的单元格。你不想要你选择的单元格。你想要左边的1或17列。
(从Create a named formula called THIS_CELL被盗和修改)
=!Q1
注意:确保选中 R1 单元格。该公式与ActiveCell相关。
在范围下:选择工作簿。
单击“确定”。
重复使用名称THE_CELL_WAY_BEHIND_ME和=!A1
引用。
关闭名称管理器。
使用=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似乎强制重新计算。
我在
中添加postActiveSheet.EnableCalculation = False
ActiveSheet.EnableCalculation = True
在保存之前已经解决了问题。