Excel-如何locking用作定义名称的公式?

所以我在工作簿中创build了一个“名称”,以帮助我使用macros来运行高级filter。 这是公式:

=OFFSET('Property Data'!$A$6,,,COUNTA('Property Data'!$A$5:$N$69),14) 

这工作正常,除了我有一个“删除”函数写入工作簿,允许您删除行…包括第6行。当第6行被删除该公式中的“名称”更改为:

 =OFFSET('Property Data'!#REF!,,,COUNTA('Property Data'!$A$5:$N$69),14) 

这显然破坏了高级filter的macros,因此用户不能编辑数据库中的现有条目。

所以我需要做的是find一种方法来locking这个公式,以便它不会抛出一个错误,指出被引用的单元格已经被删除,并且只是使用新的行6。

我已经使用方括号“{}”看过类似的东西,但是我不确定这是如何工作的。 有什么想法吗?

你应该修改你的名字公式,它不会被行删除修改。

两种方式:

  1. 将其固定到一个永远不会被删除的行,例如,如果行1永远不会被删除使用

     =OFFSET('Property Data'!$A$1,5,,COUNTA('Property Data'!$A$5:$N$69),1) 
  2. 使用INDIRECT指定范围

     =OFFSET(INDIRECT("'Property Data'!$A$6"),,,COUNTA('Property Data'!$A$5:$N$69),14) 

对于这两个(和你原来的)行删除也可能会影响'Property Data'!$A$5:$N$69部分。 如果这不可取,请使用INDIRECT来指定。

每次有人删除一行时重新分配公式。

检测删除的行

 Private Sub Worksheet_Activate() glOldRows = Me.UsedRange.Rows.Count End Sub Private Sub Worksheet_Change(ByVal Target As Range) If Me.UsedRange.Rows.Count < glOldRows Then MsgBox “Row deleted” End If glOldRows = Me.UsedRange.Rows.Count End Sub 

现在,您要用重新分配replaceMsgBox行。

 ThisWorkbook.Names("FilterData").RefersTo = "=OFFSET('Property Data'!$A$6,,,COUNTA('Property Data'!$A$5:$N$69),14)" 

所以最终的结果应该是这样的:

希望这可以帮助。

干杯