【问题标题】:Why does this ISVISIBLE() custom function return #VALUE! until I press return?为什么这个 ISVISIBLE() 自定义函数返回 #VALUE!直到我按下回车键?
【发布时间】:2017-06-29 10:15:28
【问题描述】:

Formula to decide if cell is visible 的这个答案建议使用这个函数来判断单元格是否可见:

Function isvisible(rng As Range)
    isvisible = Not (rng.EntireColumn.Hidden Or rng.EntireRow.Hidden)
End Function

此功能与INDIRECT() 结合使用效果很好。我在A1 中有一个单元格引用,我正在使用isvisible(INDIRECT(A1))

但是,当我隐藏A1 所指的单元格(在另一张纸上)时,我会得到#VALUE!,直到我进入编辑栏并按回车键。

我的问题是:

  1. 为什么会这样?
  2. 如何防止出现#VALUE! 错误?

编辑:

通过单击带有宏代码的一系列复选框来隐藏/取消隐藏行,如下所示:

Private Sub CheckBox1_Click()
    Rows("13:17").Hidden = Not Rows("13:17").Hidden
End Sub

【问题讨论】:

  • 我无法重现您的错误。当我隐藏单元格时,我没有得到#Value! - 在重新计算工作簿之前,函数结果根本不会改变。您使用 Indirect 的方式一定有问题。 A1单元格的内容是什么?
  • @RADO:该值为“BA2 Optional”!F15(引用另一张纸)。该公式连接工作表名称、F 列和行号,位于单元格 C2 中:="'BA2 Optional'!F"&C2
  • 我仍然无法重现您的错误;很可能,因为我使用的是空白工作簿,而您有一个更复杂的工作簿。此链接可能对您有所帮助:stackoverflow.com/questions/4170983/vba-udf-returning-value
  • @RADO:我没有创建这个工作簿,所以只是偶然发现了基于复选框隐藏/取消隐藏行的 VBA 代码。我已将其编辑到问题中。
  • 啊,那不一样。现在我已经复制了它。请看下面的答案,

标签: excel user-defined-functions vba


【解决方案1】:

像这样更改您的代码:

Private Sub CheckBox1_Click()
    Rows("13:17").Hidden = Not Rows("13:17").Hidden
    ThisWorkbook.Worksheets("MySheet").Calculate
End Sub

其中 MySheet 是具有 isvisible 功能的工作表的名称。如果你有很多张公式,重新计算整本书:

Private Sub CheckBox1_Click()
    Rows("13:17").Hidden = Not Rows("13:17").Hidden
    Application.Calculate
End Sub

【讨论】:

  • 谢谢 - 我打算发布一个重复的答案,因为我们同时有同样的想法:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-14
  • 1970-01-01
相关资源
最近更新 更多