Часто вызываемые подпрограммы / функции: копировать в каждый модуль и объявлять Private или хранить в одном модуле и объявлять Public? Спектакль? - PullRequest
0 голосов
/ 15 июня 2019

У меня есть несколько пользовательских подпрограмм и функций в моей основной книге VBA Excel, которые я вызываю почти из каждой подпрограммы. Например: подпрограмма rng (), которая принимает адрес начальной ячейки большого диапазона и возвращает различные параметры для этого большого диапазона, такие как: rangeLength, rangeWidth, startRow, lastRow, firstCol, lastCol и т. Д.

Пока что я скопировал этот Sub rng () в конец каждого нового модуля и объявил его закрытым. Однако это становится неприятностью, потому что каждый раз, когда я что-то улучшаю в этом Sub rng () Я должен скопировать более новую версию в каждый модуль, и теперь у меня их несколько десятков.

Я думал, что сделаю коллекцию для этого , но после прочтения коллекций Excel VBA в различных источниках, включая stackoverflow, я отказался от миссии, поскольку они в действительности снижают производительность в большинстве случаев и требуют большого количества кода.

Я знаю, что многие кодеры советуют не объявлять какие-либо переменные как публичные , так как это может привести к проблемам со смешиванием имен переменных и т. Д., Но кроме этого есть какая-то другая разница?

Я думал, что создам один модуль и сохраню все те «функциональные» подпрограммы и функции, которые я часто вызываю. Мне интересно, не повредит ли это каким-либо образом производительности или вызовет другие ошибки?

    ' 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
    '
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...