У меня есть друг с проектом VBA в Excel. В этом проекте много Форм, которые всплывают и выполняют различные функции во время использования электронной таблицы. Некоторые из них имеют сложные методы Form_Initialize
, которые полагаются на другие существующие вещи (это не проблема, когда проект используется, как ожидалось).Доступ к элементам управления пользовательской формой VBA без экземпляра формы
Мы пытаемся распечатать имена каждого элемента управления в каждой форме приложения. Наша проблема заключается в том, что коллекция VBA.UserForms
содержит только те формы, которые уже были созданы, и мы не можем создавать экземпляры всех форм без их выполняемых методов Form_Initialize
.
Например:
For Each f In VBA.UserForms
Debug.Print f.Name
Debug.Print "----------------------"
For Each c In f.Controls
Debug.Print c.Name
Next c
Next f
не делает ничего, если не используется никаких форм/загруженную. Этот код:
For Each c in frmConfig.Controls
Debug.Print c.Name
Next c
Сначала выполняется frmConfig.Form_Initialize()
, затем перебирает элементы управления на форме печати их имена. Это приводит к сбоям, поскольку вещи, которые должны произойти до того, как эта форма доступна, не произошли.
Можно ли получить имена элементов управления в форме БЕЗ создания экземпляра формы (исключая выполнение frmConfig.Form_Initialize()
)?
Любая помощь очень ценится!
+ 1 Прекрасный вопрос .. заставил меня думать, какое-то время :) –
вы думали о втором (по желанию) конструктор для инициализации? – 2013-04-04 11:40:20
@mehow: Да, это было рассмотрено, но это одноразовое, что мы хотим сделать, и переключение логики ctor на другую функцию почти так же трудоемко, как просто открытие форм в режиме проектирования и запись всех контрольных имен вручную ... –