Как макросом вызвать UserForm?

Программирование для CATIA.

Как макросом вызвать UserForm?

Сообщение techno » 26 май 2012 23:12

есть VB Project, в нём UserForm в которой я хочу очерёдность Макросов включать + пару параметров задать. А как Макрасом мою UserForm вызвать?
techno
Новичок
Новичок
 
Сообщения: 14
Images: 1
Зарегистрирован: 27 окт 2010 19:25

Re: Как макросом вызвать UserForm?

Сообщение lexincton » 27 май 2012 21:28

techno писал(а):есть VB Project, в нём UserForm в которой я хочу очерёдность Макросов включать + пару параметров задать. А как Макрасом мою UserForm вызвать?

Создай модуль с кодом

Sub CATMain()
UserForm.Show
End Sub

и поставь на кнопку
lexincton
Участник
Участник
 
Сообщения: 75
Images: 0
Зарегистрирован: 29 янв 2012 23:48
Откуда: Россия

курсор в коде

Сообщение techno » 28 май 2012 01:12

Спасибо.
Логично что этот же Модуль мне должен например в выпадающий список значения загружать. он это делает если курсор в коде после "End Sub" стоит. после нового запуска кати курсор в коде стоит перед "Sub CATMain", форма загружается, но в выпадающем списке ничего нет! кликаю в коде курсор после "End Sub" и всё работает. как этого спецэффекта избежать?

пример кода:

Sub CATMain()
UserForm.Show
UserForm.ComboBox.AddItem "мой текст"
End Sub
techno
Новичок
Новичок
 
Сообщения: 14
Images: 1
Зарегистрирован: 27 окт 2010 19:25

Re: Как макросом вызвать UserForm?

Сообщение Wireless_Fidelity » 28 май 2012 10:27

Здравствуйте.

UserForm.Show отображает форму в режиме по умолчанию - модальном. Это означает, что выполнение кода в процедуре, вызвавшей метод Show, продолжится только после того, как форма будет закрыта. Таким образом, строка с AddItem не выполняется, пока форма на экране.
Чтобы заполнить форму перед показом значений можно:

1) Поставить код заполнения перед вызовом Show, предварительно инициализировав форму
Код: Выделить всё
Sub CATMain()
Load UserForm
UserForm.ComboBox.AddItem "мой текст"
UserForm.Show
End Sub


2) Производить заполнение по событию Initialize в коде самой формы:
Код: Выделить всё
Sub UserForm_Initialize()
Me.ComboBox.AddItem "мой текст"
End Sub


3) Отображать форму в немодальном режиме. В этом случае может возникнуть необходимость сделать цикл, прерывающийся в момент закрытия формы.
Код: Выделить всё
Sub CATMain()
UserForm.Show vbModeless
UserForm.ComboBox.AddItem "мой текст"
End Sub


Хочу также добавить, что обсуждаемый в этой теме вопрос лучше было бы разместить на форумах соответствующей тематики - VBA программирования. К CATIA он отношение имеет, но лишь опосредованное.
Аватара пользователя
Wireless_Fidelity
Активный участник
Активный участник
 
Сообщения: 394
Зарегистрирован: 10 апр 2010 00:11

Re: Как макросом вызвать UserForm?

Сообщение techno » 28 май 2012 14:38

Спасибо за подробный ответ!

" обсуждаемый в этой теме вопрос лучше было бы разместить на форумах соответствующей тематики " - учту на будующее.
techno
Новичок
Новичок
 
Сообщения: 14
Images: 1
Зарегистрирован: 27 окт 2010 19:25

Re: Как макросом вызвать UserForm?

Сообщение timkaam » 28 июл 2015 15:21

А как выгрузить UserForm? При повторном вызове остаются последний выбор из Option Button, как этого избежать?
timkaam
Новичок
Новичок
 
Сообщения: 69
Зарегистрирован: 02 дек 2014 16:15

Re: Как макросом вызвать UserForm?

Сообщение Wireless_Fidelity » 29 июл 2015 09:10

Приветствую.

Для этого надо отображать форму, создавая экземпляры её класса. В этом случае объект будет уничтожаться автоматически при завершении макроса:

Код: Выделить всё
Sub CATMain()
  Dim formObject As UserForm1
  Set formObject = New UserForm1

  formObject.Show vbModal

  Set formObject = Nothing
End Sub
Аватара пользователя
Wireless_Fidelity
Активный участник
Активный участник
 
Сообщения: 394
Зарегистрирован: 10 апр 2010 00:11

Re: Как макросом вызвать UserForm?

Сообщение timkaam » 29 июл 2015 16:02

Wireless_Fidelity писал(а):
Set formObject = New UserForm1


на этой строчке выскакивает ошибка, пишет что объект require..не пойму что он хочет. Сам код программы сделал такой:

Dim formObject As UserForm
Set formObject = Materials
formObject.Show vbModal
Set formObject = Nothing
где Materials моя форма
timkaam
Новичок
Новичок
 
Сообщения: 69
Зарегистрирован: 02 дек 2014 16:15

Re: Как макросом вызвать UserForm?

Сообщение timkaam » 29 июл 2015 16:07

Всё, разобрался, ошибка была в форме) спасибо)
timkaam
Новичок
Новичок
 
Сообщения: 69
Зарегистрирован: 02 дек 2014 16:15

Re: Как макросом вызвать UserForm?

Сообщение timkaam » 31 июл 2015 08:10

Wireless_Fidelity писал(а):Приветствую.

Для этого надо отображать форму, создавая экземпляры её класса. В этом случае объект будет уничтожаться автоматически при завершении макроса:

Код: Выделить всё
Sub CATMain()
  Dim formObject As UserForm1
  Set formObject = New UserForm1

  formObject.Show vbModal

  Set formObject = Nothing
End Sub

А как в данном случае заполнить шапку формы? код в виде:
Private Sub UserForm_Activate()
Materials.Caption = ""
End Sub
не переобозначает название формы, и она остаётся UserForm...
Покапавшись, нашёл способ выгрузки модуля через команду Unload, но ваш метод тоже интересен)
timkaam
Новичок
Новичок
 
Сообщения: 69
Зарегистрирован: 02 дек 2014 16:15

Re: Как макросом вызвать UserForm?

Сообщение Wireless_Fidelity » 31 июл 2015 14:40

Код: Выделить всё
Me.Caption = ""


К программированию для CATIA Ваши вопросы не относятся, ответы будет быстрее найти на форумах по VBA (где обычно программируют под MS Office)
Аватара пользователя
Wireless_Fidelity
Активный участник
Активный участник
 
Сообщения: 394
Зарегистрирован: 10 апр 2010 00:11

Re: Как макросом вызвать UserForm?

Сообщение timkaam » 31 июл 2015 17:15

Спасибо за ответ, буду искать ответы там
timkaam
Новичок
Новичок
 
Сообщения: 69
Зарегистрирован: 02 дек 2014 16:15

Re: Как макросом вызвать UserForm?

Сообщение timkaam » 24 дек 2015 14:28

Подскажите как передать данные из CatMain в UserForm? Думал что автоматом подхватывает из тела основной программы, ан нет..не видит
....
....
разобрался)
timkaam
Новичок
Новичок
 
Сообщения: 69
Зарегистрирован: 02 дек 2014 16:15


Вернуться в CAA-RADE

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

cron