У меня есть несколько пользовательских подпрограмм и функций в моей основной книге 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
'