VBA в Excel: файл глобальных констант
Я работаю над некоторыми сценариями VBA для рабочего листа Excel, и я создал модуль, который содержит целый список в основном строк, хранящих имя каждого из моих полей базы данных. Таким образом, если кто-то изменяет базу данных, он может обновить переменную VBA в модуле, и тогда все мои скрипты, которые ссылаются на глобальную переменную вместо имени поля напрямую, даже не знают разницы.
В любом случае, я буду работать в нескольких разных несвязанных листах excel, и я хотел бы, чтобы все они имели доступ к этому модулю. В худшем случае я мог бы скопировать модуль вручную в каждую книгу, но было бы здорово, если бы все они могли ссылаться на один и тот же файл... возможно ли что-то подобное в VBA/Excel?
Кроме того, прямо сейчас мои переменные выглядят просто так:
Global tblDeviceType As String
А затем я инициализирую их в функции в модуле, которая вызывается при открытии книги. Есть ли лучший способ сохранить все мои константы или это так работа?
О да, и я на самом деле не объявлял их как константы, так как некоторые из них имеют более сложные типы данных (например, диапазоны) и не могут быть статически объявлены - по крайней мере, казалось, что они не могут.
4 ответов:
Есть несколько способов, которыми вы, вероятно, можете это сделать:
- основывайте все листы excel на одном и том же шаблоне excel. Таким образом, все они могут получить доступ к коду, объявленному в шаблоне. Но тогда вы должны распространять шаблон, как я думаю.
- Создайте библиотеку DLL activex, а затем ссылайтесь на нее в каждом шаблоне excel.
- или вы можете загрузить модуль динамически во время выполнения. Вы бы использовали такой метод, как эта книга.VBProject.VB components.Импортировать(). Вероятно, вам придется запустить свой метод, который заполняет переменные вручную. (Обратите внимание, что я не проверял это) более подробную информацию об этом типе манипуляции excel можно найти здесь
В качестве альтернативы можно создать текстовый файл (Microsoft Scripting Runtime library - > Class Scripting.TextStream), где вы можете сохранить свои переменные и загрузить их, когда захотите прочитать.
Поместите текстовый файл в центральное место, доступное всем листам.
Для диапазонов можно сохранить адрес диапазона в текстовом файле.Дайте мне знать, если я что-то упускаю.
Можно создать электронную таблицу Excel со всеми именами, затем использовать именованные диапазоны, имеющие то же имя, что и глобальные, изменить код для использования именованных диапазонов и сделать лист надстройкой.
Я бы просто скопировал модуль в другие электронные таблицы.
Edit: вы также можете создать пустую электронную таблицу с модулем в ней, а затем сделать это надстройкой. Я не знаю, будут ли глобалы в Excel работать таким образом, но попробовать стоит. Пожалуйста, напишите сюда, если вы делайте и это работает или нет.
На самом деле самый простой способ-это добавить модуль в a .XLA excel addin файл. Затем добавьте этот файл через диалоговое окно Excel Addins.
Модуль теперь доступен глобально для всех решений excel, запущенных под этой учетной записью пользователя.
Comments