, чтобы мне не приходилось вручную настраивать пути в каждом макросе, если он изменяется
Если это когда-либо нужно изменить, то семантически это не Const
. Ключом к написанию кода, который вам не нужно постоянно изменять, является отделение кода от данных .
Путь к файлу, который иногда необходимо изменить, можно рассматривать как некий параметр конфигурации.
Имейте модуль, который может читать настройки, где бы они ни находились, и возвращать значение настройки, учитывая некоторую клавишу .
Сами настройки могут располагаться на (скрытом?) Рабочем листе, в таблице ListObject
со столбцами Key
и Value
и использоваться с функциями INDEX
+ MATCH
(с использованием ранней привязки). WorksheetFunction
функции будут выдавать ошибки во время выполнения при наличии несуществующей ключевой строки):
Option Explicit
Public Function GetSettingValue(ByVal key As String) As Variant
With SettingsSheet.ListObjects(1)
GetSettingValue = Application.WorksheetFunction.Index( _
.ListColumns("Value").DataBodyRange, _
Application.WorksheetFunction.Match(key, .ListColumns("Key").DataBodyRange, 0))
End With
End Function
Variant
сохранит подтип Value
, поэтому для значения String
вы получите Variant/String
; для значения Date
вы получите Variant/Date
, для числового значения вы получите Variant/Double
, а для значения ИСТИНА / ЛОЖЬ вы получите Variant/Boolean
.
Теперь, когда нужно изменить путь к файлу, ваш код не:
Dim path As String
path = GetSettingValue("ImageFolderPath")
А если вам нужно больше настроек, у вас нет кода для добавления:
Dim otherThing As String
otherThing = GetSettingValue("OtherThing")
Все, что вам нужно сделать, это убедиться, что используемые строковые ключи соответствуют содержимому столбца Key
в вашем SettingsSheet
.