从子到功能

时间:2019-10-01 05:02:57

标签: excel vba

目标是计算具有功能(而不是子功能)的范围内的注释数。

我想将Sub转换为Function,因为我希望范围可以变化,并且用户希望以公式形式输入

我已经在互联网上搜索并获得了正确的功能。但是,为了学习,需要知道为什么我的Sub起作用而Function不能起作用

Function CommentsCounter(myRange3 As Range) As Long

'This one is mine - not working

CommentsCounter = myRange3.SpecialCells(xlCellTypeComments).Count

End Function

Sub working_just_fine()

'This one is working

Dim myRange4 As Range

Set myRange4 = Range("CO1:CO497")

Range("CO505").Value = myRange4.SpecialCells(xlCellTypeComments).Count

End Sub

它给出的是单元格总数而不是范围内的注释数

1 个答案:

答案 0 :(得分:0)

有趣的问题,我尝试了一些奇怪的事情,例如声明一个公共变量,然后从Sub调用Function并将SpecialCells.Count的结果放入公共变量并从中访问Function。令人惊讶的是,与分别调用Sub相比,从Function调用Sub的结果不同。作为解决方案,此Function应该完成您要达到的目标,尽管在很大的范围内可能会有点慢,因为它会遍历范围内的每个单元格(我尚未进行广泛的测试就可以了)

Function CommentsCounter(myRange3 As Range) As Long

CommentsCounter = 0
For Each rngCell In myRange3
    If Not rngCell.Comment Is Nothing Then CommentsCounter = CommentsCounter + 1
Next

End Function