2015-07-13 2 views
1

У меня есть модуль («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 после объявления, что он не работает («Ошибка компиляции: неверная внешняя процедура»).

Возможно ли это? Или есть, возможно, какое-то обходное решение? Или есть веская причина, по которой вы не можете этого сделать (если так, я бы хотел узнать!). Спасибо за любые идеи!

ответ

2

Is there a way I can define addressFileName to be used globally as well?

Использование

public const addressFileName as string = "C:\Batman.xslx" 

Обратите внимание, что вы не сможете изменить строку, но можно ссылаться из любого места в вашем проекте. Это должно быть в верхней части листа модуля, а не листа кода рабочего листа. См. Declaring Constants для получения дополнительной информации.

+0

Спасибо Jeeped! Вот и все. Есть ли какие-либо большие недостатки от использования глобальных констант вместо объявления их в каждом макросе? Быстрый вопрос: если я определяю это глобально, то в sub noTwo() измените его на 'addressFileName =" C: \ Superman "', вернется ли он обратно к глобальному определению (C: \ Batman) или останется последнее объявление («C: \ Superman»)? – BruceWayne

+1

** Обратите внимание, что вы не сможете изменить строку **. Он не будет возвращаться, потому что вы не можете его изменить, чтобы начать. Я использую глобалы для многих часто используемых строк; базовые URL-адреса приходят на ум. Недостатком является то, что ** вы не сможете изменить строку **. 'Const' является коротким для константы, и var не будет постоянным, если вы можете его изменить. Бонус в том, что вам нужно только вручную настроить их в одном месте, если обстоятельства меняются. – Jeeped

+0

D'oh! Да, теперь я помню 'const' от языка C. Спасибо, тонна Jeeped! – BruceWayne

Смежные вопросы