所以我创建了一个"名称"在我的工作簿中帮助我使用宏来运行高级过滤器。这是公式:
=OFFSET('Property Data'!$A$6,,,COUNTA('Property Data'!$A$5:$N$69),14)
除了我有一个"删除"写入工作簿的函数,允许你删除行...包括第6行。当第6行被删除时,这个" name"更改为:
=OFFSET('Property Data'!#REF!,,,COUNTA('Property Data'!$A$5:$N$69),14)
这显然会破坏高级过滤器的宏,因此用户无法编辑数据库中的现有条目。
所以我需要做的是找到一种方法来锁定这个公式,这样它就不会抛出一个错误,说明要引用的单元格已被删除,而它只使用新的第6行。
我已经看到使用括号" {}"但我不确定这是怎么回事。有什么想法吗?
答案 0 :(得分:1)
您应修改您的名称公式,否则行删除不会修改。
两种方式:
将其锚定到一个永远不会被删除的行,例如,如果从未删除第1行,请使用
=OFFSET('Property Data'!$A$1,5,,COUNTA('Property Data'!$A$5:$N$69),1)
使用INDIRECT
指定范围
=OFFSET(INDIRECT("'Property Data'!$A$6"),,,COUNTA('Property Data'!$A$5:$N$69),14)
对于这些(和您的原始)行删除也可能会影响'Property Data'!$A$5:$N$69
部分。如果不希望这样做,请使用INDIRECT
来指定。
答案 1 :(得分:0)
每当有人删除一行时重新分配公式。
检测deleted row。
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
现在您要将MsgBox
行替换为重新分配。
ThisWorkbook.Names("FilterData").RefersTo = "=OFFSET('Property Data'!$A$6,,,COUNTA('Property Data'!$A$5:$N$69),14)"
所以最终的结果应该是:
希望这有帮助。
干杯