Excel VBA根据用户选择的样式选项使功能易失

时间:2017-01-16 18:46:44

标签: excel vba excel-vba

我正在尝试制作一个UDF,以验证用户定义的样式选项,特别是在这种情况下,ListObjects,但我希望得到一个普遍的答案。

举一个示例表:Table1

我的UDF如下,出于演示目的,我们在单元格A2中:

=TableHeaderExists("Table1")

该函数返回一个结果:

Public Function TableHeaderExists(table_name As String) As Boolean

  TableHeaderExists = ThisWorkbook.ActiveSheet.ListObjects(table_name).ShowHeaders

End Function

A2现在返回一个结果。但是当用户取消选中“设计选项卡”中的复选框,条件发生变化时,它不会重新计算。

所以我在函数中添加了Application.Volatile

A2仍然不会重新计算。我删除了Application.Volatile并添加了ActiveSheet.Calculate

在这种情况下,它适用于一次更改,仅适用于一次更改。

我注意到的是,如果我编辑表格中的任何数据,任何数据,那么具有验证功能的那些单元格将被重新计算,但不会在样式选项被更改时重新计算。

因此,我尝试通过验证标题的范围来获得结果,这也就像验证“ShowHeaders”一样,只是在身体数据以某种方式改变后更新,而不是外观:

Public Function TableHeaderExists(table_name As String) As Boolean

Dim tbl As ListObject
Dim hdrRng As Range

Application.Volatile

Set tbl = ActiveSheet.ListObjects(table_name)
Set hdrRng = tbl.HeaderRowRange

If Not hdrRng Is Nothing Then
 TableHeaderExists = True
Else
 TableHeaderExists = False
End If

1 个答案:

答案 0 :(得分:0)

我担心这不起作用:

UDF仅在以下情况下计算:

  • 触发计算事件
  • UDF的其中一个参数变脏或UDF变脏 被标记为易变的

更改设计选项卡中的复选框不会触发计算,因此无法计算UDF。