AndVGri
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Подключаешь Tools/References Microsoft Forms 2.0 Object Library Microsoft Visual Basic for Application Extesibility 5.3 В настройках безопасности разрешаешь модификацию VBProject Добавляешь модуль с названием "QuestionFormModule" Размещение элементов управления всё на тебе, добавление 1 "галочки" для примера Код: Option Explicit Public Sub ShowQuestionForm() MyShowForm1.Controls.Add "Forms.CheckBox.1", "myCheck1" MyShowForm1.Show End Sub | Далее, в другом модуле следующий код процедуры вызова этой формы Код: Public Sub CreateQuestionForm() Dim pVBE As VBProject Dim pForm As VBComponent Dim pModule As CodeModule Dim sFormName As String, vId As Long Dim sParts As String, sNewName As String 'получаем ссылку на проект Set pVBE = Application.VBE.ActiveVBProject Set pModule = pVBE.VBComponents("QuestionFormModule").CodeModule 'получаем номер формы, как часть её имени '3 строка в модуле "QuestionFormModule" должна начинаться 'с "MyShowForm" sParts = Mid$(pModule.Lines(3&, 1&), 11&, InStr(11&, pModule.Lines(3&, 1&), ".") - 11&) vId = CLng(sParts) 'получаем название создаваемой в проекте формы sFormName = "MyShowForm" & CStr(vId) 'создаём форму Set pForm = pVBE.VBComponents.Add(vbext_ct_MSForm) pForm.Name = sFormName 'вызываем форму на выполнение ShowQuestionForm 'удаляем форму из проекта pForm.DesignerWindow.Close pVBE.VBComponents.Remove pForm Set pForm = Nothing 'назначаем новое имя формы, увеличив её номер на 1 в процедуре 'формирования и запуска формы (иначе сбой при повторном запуске) sNewName = "MyShowForm" & CStr(vId + 1&) For vId = 3& To pModule.CountOfLines pModule.ReplaceLine vId, Replace(pModule.Lines(vId, 1&), sFormName, sNewName) Next vId End Sub | |