经常调用的子例程/函数:复制到每个模块并声明为Private还是保留在一个模块中并声明Public?性能?

时间:2019-06-15 20:27:08

标签: excel vba performance

在我的主要VBA excel工作簿中,我有一些自定义子例程和函数,几乎从每个子例程都可以调用该子例程和函数。 例如:子例程rng(),它接受较大范围的起始单元格的地址,并返回该较大范围的各种参数,例如:rangeLength,rangeWidth,startRow,lastRow,firstCol,lastCol等。

目前,我已将此Sub rng()复制到每个新模块的底部,并声明为私有。但是,这变得令人讨厌,因为每次我改进此Sub rng()时, )我必须将较新的版本复制到每个模块中,现在已经有几十个了。

我以为我会为此做一个集合,但是在阅读了包括stackoverflow在内的各种资源中的excel VBA集合后,我放弃了任务,因为在大多数情况下它们实际上会降低性能,并且需要进行大量编码

我知道许多编码人员建议不要将任何变量声明为公共变量,因为这可能导致混淆变量名称等问题,但是除此之外还有其他区别吗?

我当时想创建一个模块,并保留所有那些我经常调用的“功能”子功能。我想知道它是否会以任何方式损害性能或导致其他错误?

    ' Below code copied into each module and declared Private
    Private rngWhole as range
    Private rngWidth as range
    Private lastRow as long

    Private Sub rng(startCell as Range, Optional startRow as Long, _
                    Optional startCol as String)

            'Get the desired range properties and set into variables
            Set rngWhole = ...
            Set rngWidth = ...
            Set lastRow = ...

    End Sub

    ' VS


    ' Same code, kept only in only one module and declared public
    Public rngWhole as range
    Public rngWidth as range
    Public lastRow as long

    Public Sub rng(startCell as Range, Optional startRow as Long, _
                    Optional startCol as String)

            'Get the desired range properties and set into variables
            Set rngWhole = ...
            Set rngWidth = ...
            Set lastRow = ...

    End Sub
    '

0 个答案:

没有答案