如何基于VBA EXCEL中的单元格值创build一个隐藏行的函数

我创build了这个函数来根据单元格的值隐藏一些行。

Function myTest(Unit As String) ThisWorkbook.Worksheets("TESTING").Rows("15:16").Select If Unit = "XXX" Then Selection.EntireRow.Hidden = True Else Selection.EntireRow.Hidden = False myTest= "1" End If End Function 

当单位值不是“XXX”时,function工作正常,但当它是“XXX”时,调用此function的单元格将获得#VALUE!

如果你关心返回单元格是否隐藏,那么你可以保留它作为一个函数。 否则,使其成为一个Sub并摆脱下面的myTest = ...行。 在VBA中select单元几乎总是一个可怕的想法。 这是不可靠的,越野车和一个巨大的放缓。 下面的代码是我可以给你做的最简洁的function。 它直接将Unit = "XXX"的True / False评估应用于行的Hidden属性。 我添加了一个显式的布尔返回types。

 Function myTest(Unit As String) As Boolean ThisWorkbook.Worksheets("Sheet5").Rows("15:16").EntireRow.Hidden = (Unit = "XXX") myTest = Not (Unit = "XXX") End Function 

为了更接近你的结构,你可以使用范围对象:

 Function myTest(Unit As String) As String Dim rng As Range rng = ThisWorkbook.Worksheets("TESTING").Rows("15:16") If Unit = "XXX" Then rng.EntireRow.Hidden = True myTest = "0" Else rng.EntireRow.Hidden = False myTest= "1" End If End Function 

或者你可以使用With块:

 Function myTest(Unit As String) As String With ThisWorkbook.Worksheets("TESTING").Rows("15:16") If Unit = "XXX" Then .EntireRow.Hidden = True myTest = "0" Else .EntireRow.Hidden = False myTest= "1" End If End With End Function