Несколько экземпляров одной формы Excel VBA.

Программирование на Visual Basic for Applications
Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Несколько экземпляров одной формы Excel VBA.

Сообщение Avtopic » 21.03.2006 (Вт) 14:39

Заранее извиняюсь, если ошибаюсь в терминологии.
Допустим, имеется форма UserForm1

В разных местах одновременно вызываю несколько экземпляров этой формы:

Dim FrmExmp1 As UserForm1
Set FrmExmp1 = New UserForm1
FrmExmp1.Show vbModeless
….
End Sub


Dim FrmExmp2 As UserForm1
Set FrmExmp2 = New UserForm1
FrmExmp2.Show vbModeless
….
End Sub


Где мне писать:
Set FrmExmp1 = Nothing
Set FrmExmp2 = Nothing

Или при Unload само собой происходит “очистка” FrmExmp1 и FrmExmp2?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 21.03.2006 (Вт) 14:46

Очистка не происходит. Происходит выгрузка. Очистка произойдёт сама когда надо.
А что, у тебя локальным переменным присваиваются формы, которые живут дольше процедуры, из которой вызваны?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 21.03.2006 (Вт) 15:32

Спасибо за ответ!

А что, у тебя локальным переменным присваиваются формы, которые живут дольше процедуры, из которой вызваны?

А что, разве нет?
Процедура вызова формы нужно мне чтобы настроить конкретный экземпляр.

Public Sub Show_FormProduser()
Dim FrmExmp1 As UserForm1
Set FrmExmp1 = New UserForm1
FrmExmp1.Show vbModeless
….
End Sub

И после этого выполняются другие процедуры, а формы еще на экране и если нужно там меняются что-то или оттуда меняется что-то.

Если вы говорите мне что очистка или выгрузка FrmExmp1 происходит в конце той же процедуры, то тогда добавлю что, вопрос пробудил следующий факт: явно чувствуется что после открытия четырех- пяти экземпляров формы и их закрытия книга явно тормозит, а без них часами работаю в нем, и проблем нет.
Хотя, после вашего ответа я думаю, не вина ли это MSFlexGrid находящегося на форме.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 21.03.2006 (Вт) 15:43

По окончании процедуры Show_FormProduser переменная FrmExmp1 очищается сама. А что творится внутри у экселя во время разработки в нём большого интерфейса, это отдельный разговор, но баги там внутри есть.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 21.03.2006 (Вт) 16:04

И еще побеспокою, если можно:
Когда имею конкретную форму Напр: FormObjects, FormPartner
в любом месте кода закрываю их Unload FormObjects или Unload FormPartner,
но когда имеются открытие вышеуказанным способом формы и, не зная их имена и зная их Caption-s,
которые сам указываю в процедурах открытия, как их закрывать программно?
Признаюсь, как я их закрываю- нахожу их hWnd и DestroyWindow но чувствую, что это похоже на то, когда что-то насильно выбивают изо рта у Excel, и последний остается в шоке. Можно так закрывать?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 21.03.2006 (Вт) 16:11

Не приходило в голову добавлять открытые формы в коллекцию?
Или использовать коллекцию forms, в моём экселе её нет, но может быть?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 21.03.2006 (Вт) 16:32

Коллекцию forms я тоже пробовал, но безрезультатно.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 21.03.2006 (Вт) 16:35

И как же пробовал?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 21.03.2006 (Вт) 16:44

Пробовал написать что-то похожее

For Each Frm In MSForms.???Form или Excel. ??? или Application.???

If Frm.Caption = "..." Then Unload Frm

Next

Но увы ничего подобного в Brouser-е не нашел

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 21.03.2006 (Вт) 16:48

Avtopic
Я конечно ценю здоровое чувство юмора, но знаешь, до определённых пределов всё-таки. Это называется "пробовал"...
GSerg писал(а):моём экселе её нет, но может быть?

Значит не может быть.
GSerg писал(а):Не приходило в голову добавлять открытые формы в коллекцию?

В свою собственную, вынужденно уточню я?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 21.03.2006 (Вт) 17:05

В этот момент как раз никакого юмора с моей стороны, потому что эта бандура тормозит практический, законченный проект.
Я понял, что вы имели в виду собственную коллекцию. Но для него нужно хотя бы перейти к написанию кода, а я, находясь в форуме, написал то, что я пробовал сделать и в какой коллекции искал решение. Вед могло же случится такое, что если есть
Application.ActiveWorkbook.Sheets

То может есть

Application.ActiveWorkbook.Forms

Или

Application. Forms

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 21.03.2006 (Вт) 17:12

Avtopic писал(а):Коллекцию forms я тоже пробовал, но безрезультатно

Это мною было расценено как "кодил, не получилось".
А оказалось "искал, не нашёл".
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 21.03.2006 (Вт) 17:14

искал, не нашёл :)

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 21.03.2006 (Вт) 17:15

Ну дык делай свою. Если форм нефиксированное количество.
А если фиксированное - сделай массив as form.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 21.03.2006 (Вт) 17:22

Спасибо за помощь! Попробую используя коллекцию.

$€rg
Обычный пользователь
Обычный пользователь
 
Сообщения: 99
Зарегистрирован: 11.01.2006 (Ср) 10:15
Откуда: Санкт-Петербург

Сообщение $€rg » 23.03.2006 (Чт) 18:04

UserForms
процесс печатания программного кода укрепляет моральные устои С. Каммингс VBA4Dummies
:study:

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 25.03.2006 (Сб) 13:46

Да, действительно UserForms. Спасибо!


Вернуться в VBA

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

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

    TopList