У меня есть модуль («Module1»), который имеет несколько макросов. Некоторые из них я бегу назад к спине (он разделяет длину кода и облегчает отладку/устранение неполадок). В верхней части этого модуля, у меня есть:Объявлять и определять переменную глобально (внутри модуля)?
Option explicit
Dim addressFileName as String
Sub noOne()
addressFileName = "C:\Batman.xslx"
End Sub
Sub noTwo()
msgbox("You want to use the file " & addressFileName)
End Sub
отлично работает, если я бегу Нун(), а затем noTwo() после него. Однако, если мне нужно отлаживать subTwo() и запустить макрос, он не распознает «addressFileName».
Есть ли способ, которым я могу определить addressFileName
для использования в глобальном масштабе? Просто добавьте addressFileName = "C:\Batman.xslx
после объявления, что он не работает («Ошибка компиляции: неверная внешняя процедура»).
Возможно ли это? Или есть, возможно, какое-то обходное решение? Или есть веская причина, по которой вы не можете этого сделать (если так, я бы хотел узнать!). Спасибо за любые идеи!
Спасибо Jeeped! Вот и все. Есть ли какие-либо большие недостатки от использования глобальных констант вместо объявления их в каждом макросе? Быстрый вопрос: если я определяю это глобально, то в sub noTwo() измените его на 'addressFileName =" C: \ Superman "', вернется ли он обратно к глобальному определению (C: \ Batman) или останется последнее объявление («C: \ Superman»)? – BruceWayne
** Обратите внимание, что вы не сможете изменить строку **. Он не будет возвращаться, потому что вы не можете его изменить, чтобы начать. Я использую глобалы для многих часто используемых строк; базовые URL-адреса приходят на ум. Недостатком является то, что ** вы не сможете изменить строку **. 'Const' является коротким для константы, и var не будет постоянным, если вы можете его изменить. Бонус в том, что вам нужно только вручную настроить их в одном месте, если обстоятельства меняются. – Jeeped
D'oh! Да, теперь я помню 'const' от языка C. Спасибо, тонна Jeeped! – BruceWayne