Динамическое добавление контрола на UserForm в VBA.
От: Tamago41  
Дата: 03.07.04 09:40
Оценка:
Помогите пожалуйста разобраться.
Я пишу AddIn в VB 6.0 для среды разработки VBA. Проблема: как добавить контрол на созданную UserForm'у через AddIn. Если писать AddIn для среды разработки VB 6.0, то там есть объекты Control и Form, и все это легко делается, а в VBA другая объектная модель.
Заранее спасибо.
Re: Динамическое добавление контрола на UserForm в VBA.
От: par  
Дата: 03.07.04 10:05
Оценка:
Здравствуйте, Tamago41, Вы писали:

T>Помогите пожалуйста разобраться...

используй методы VB Environment(VBE)

Sub AddFormNax() ' :)
VBE.ActiveVBProject.VbComponents.Add(vbext_ct_MSForm) 
' ета строчка добавит тебе в проект форму с именем UserForm1,далее
Static MyForm as object
Set MyForm=UserFrom1
'Ето привяжет  MyForm к свежесозданной форме,а дальше самое хитрое ;) 
MyForm.Controls.Add("Forms.ListBox.1","xz",true)
'ессно вместо ЛистБокс можно какой угодно компонент из стандартных вписать
MyForm.Show 0
End Sub


в общем как то так ето так делается , на память пишу , поколупайся
там посмотришь

ааа самое главное как ето стереть
сам бы ни в жисть не догадался если б не РСДН
VBE.ActiveVBProject.VbComponents.Remove VBE.ActiveVBProject.VbComponents("UserForm1")


VbComponents по идее коллекция , только ссылку типа "MyForm" оно не принимает
в качестве параметра при удалении, а только путь к обекту в дереве ВБЕ,
так что имей ввиду
Re[2]: Динамическое добавление контрола на UserForm в VBA.
От: Tamago41  
Дата: 03.07.04 10:50
Оценка:
Здравствуйте, par, Вы писали:

par>используй методы VB Environment(VBE)


par>[vb]

par>Sub AddFormNax() '
par>VBE.ActiveVBProject.VbComponents.Add(vbext_ct_MSForm)
par>' ета строчка добавит тебе в проект форму с именем UserForm1,далее
par>Static MyForm as object
par>Set MyForm=UserFrom1
Я не могу так установить ссылку на UserFrom1 т.к. поднимется ошибка "Variables not define"

par>'Ето привяжет MyForm к свежесозданной форме,а дальше самое хитрое

par>MyForm.Controls.Add("Forms.ListBox.1","xz",true)
par>'ессно вместо ЛистБокс можно какой угодно компонент из стандартных вписать
Кстати у меня еще один вопрос: Как можно добавить ссылку на компонент, а затем всавить этот компонент на форму.
Re[3]: Динамическое добавление контрола на UserForm в VBA.
От: par  
Дата: 03.07.04 11:08
Оценка:
Здравствуйте, Tamago41, Вы писали:

T>Здравствуйте, par, Вы писали:


par>>используй методы VB Environment(VBE)


par>>[vb]

par>>Sub AddFormNax() '
par>>VBE.ActiveVBProject.VbComponents.Add(vbext_ct_MSForm)
par>>' ета строчка добавит тебе в проект форму с именем UserForm1,далее
par>>Static MyForm as object
par>>Set MyForm=UserFrom1
T>Я не могу так установить ссылку на UserFrom1 т.к. поднимется ошибка "Variables not define"

aaa пардон я ДЫБЫЛ
как Можно объект Статиком объявлять

во первых пиши паблик или дим наверху вне процедуры для MyForm,
во вторых проверь добавляется ли у тебя форма
UserForm1?


par>>'Ето привяжет MyForm к свежесозданной форме,а дальше самое хитрое

par>>MyForm.Controls.Add("Forms.ListBox.1","xz",true)
par>>'ессно вместо ЛистБокс можно какой угодно компонент из стандартных вписать
T>Кстати у меня еще один вопрос: Как можно добавить ссылку на компонент, а затем всавить этот компонент на форму.
НЕТ, для вбе , насколько я понимаю методы , должны ссылаться напрямую на
объекты в дереве ВБЕ, посмотри пример с удалением формы
Re[4]: Динамическое добавление контрола на UserForm в VBA.
От: Tamago41  
Дата: 03.07.04 11:52
Оценка:
Спасибо за все, но я нашел другой способ.
Re[5]: Динамическое добавление контрола на UserForm в VBA.
От: par  
Дата: 03.07.04 18:31
Оценка:
Здравствуйте, Tamago41, Вы писали:

T>Спасибо за все, но я нашел другой способ.


пропиши плиз примером, тема мне тоже интересна
Re[6]: Динамическое добавление контрола на UserForm в VBA.
От: Tamago41  
Дата: 05.07.04 06:27
Оценка:
dim vbComponent as vbide.vbComponent
dim mvbProject as vbide.vbProject

Set vbComponentForm = mvbProject.VBComponents.Add(vbext_ct_MSForm)

vbComponentForm.Designer.Controls.Add "Forms.ListBox.1", "xz", True
'vbComponentForm.Designer — Заменяет объект формы
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.