当我在单元格中输入以下函数作为UDF时:
Function VisibleBlankCells(r As Range) As Long
On Error Resume Next
VisibleBlankCells = Intersect(r.SpecialCells(xlCellTypeVisible), r.SpecialCells(xlCellTypeBlanks)).Count
On Error GoTo 0
End Function
r.SpecialCells(xlCellTypeBlanks)
将r
中的所有单元格评为空,无论它们是否包含文本。可能是什么原因和另一种解决方案?
答案 0 :(得分:1)
开始摆脱On Error Resume Next
- 你应该总是假设你的代码会失败并相应地解释它,简单地忽略错误只会使问题复杂化。
其次,没有必要使用Intersect
- 只是直接识别可见细胞,然后使用另一个SpecialCells()
方法来识别空白子细胞。
Function VisibleBlankCells(r As Range) As Long
VisibleBlankCells = r.SpecialCells(xlCellTypeVisible).SpecialCells(xlCellTypeBlanks).Count
End Function
用这个测试:
Sub test_code()
Dim r As Range: Set r = Selection
Debug.Print CountBlanks(r)
End Sub
Function CountBlanks(r As Range) As Long
CountBlanks = r.SpecialCells(xlCellTypeVisible).SpecialCells(xlCellTypeBlanks).Count
End Function
答案 1 :(得分:0)
这种过滤机制在UDF中不起作用(有关信息,请参阅this)。我建议在你的UDF中循环:
Public Function VisibleBlankCells(rng As Range) As Long
Dim i As Integer
Dim cell As Range
i = 0
For Each cell In rng
If cell.Rows.Hidden = False And _
cell.Columns.Hidden = False And _
cell.Value = "" Then
i = i + 1
End If
Next
VisibleBlankCells = i
End Function
但是,更新和功能可能存在一些问题: