Function CreateObject(Where As UserForm1, sTerm As String, iNum As Integer, sFunc As String) ' Where - это форма, на которую нужно добавить элементы, sTerm - термин, iNum - номер элемента, sFunc - Название функции
Dim n As Integer
With Where
' добавление Label
With .Controls.Add("Forms.Label.1", sTerm & "_L1")
.Caption = sTerm
.Left = 10
.Top = 20 * iNum
.Height = 15
.Width = 20
End With
' добавление CheckBox
With .Controls.Add("Forms.CheckBox.1", sTerm & "_Ch1")
.Caption = "Купить"
.Left = 40
.Top = 20 * iNum
.Height = 15
.Width = 20
End With
With .Controls.Add("Forms.CheckBox.1", sTerm & "_Ch2")
.Caption = "Отложить"
.Left = 70
.Top = 20 * iNum
.Height = 15
.Width = 20
End With
' добавление CommandButton
With .Controls.Add("Forms.CommandButton.1", "CB" & iNum)
.Caption = "Выполнить"
.Top = 20 * iNum
.Height = 15
.Width = 20
.Left = 110
End With
' Обработчик нажатия кнопки
.Width = 200
.Height = 200
With ThisDocument.VBProject.VBComponents(.Name).CodeModule
n = .CountOfLines
.InsertLines n + 1, "Private Sub CB" & iNum & "_Click()"
.InsertLines n + 2, sFunc
.InsertLines n + 3, "Unload Me"
.InsertLines n + 4, "End Sub"
End With
End With
End Function
Sub RunForm()
Dim Arr As Variant
Dim i As Integer
Arr = Array("Золото", "Серебро", "Платина", "Лес", "Нефть")
For i = 0 To UBound(Arr)
CreateObject UserForm1, CStr(Arr(i)), i + 1, "MyFunc"
Next i
UserForm1.Show
End Sub
Sub MyFunc()
MsgBox$ "Работает"
End Sub
Option Explicit
Private cmdBArray() As clsBtnClick
Private Sub UserForm_Initialize()
Const elemNum As Integer = 10 ' сколько создать элементов
Const vHeight As Integer = 25 ' высота строки элементов
Const fWidth As Integer = 909 ' ширина формы
Const vBetween As Integer = 10 ' отступ между строками элементов
Const vTop As Integer = 42 ' отступ сверху до первого элемента
Const vBottom As Integer = 42 ' отступ от последнего элемента до нижнего края формы
Dim i As Integer
Me.Height = vTop + elemNum * (vHeight + vBetween) + vBottom ' отступы сверху-снизу-между элементами, плюс элементы
Me.Width = fWidth
For i = 1 To elemNum
' добаление первого флажка
With Me.Controls.Add("Forms.OptionButton.1", CStr(i) & "1_OB")
.Left = 51.75
.Top = vTop + (i - 1) * (vHeight + vBetween)
.Height = vHeight
.Width = 25
.GroupName = "Gr" & i ' группа используется для группировки флажков (может быть выставлен только один флаг из группы)
End With
' добавление второго флажка
With Me.Controls.Add("Forms.OptionButton.1", CStr(i) & "2_OB")
.Left = 159
.Top = vTop + (i - 1) * (vHeight + vBetween)
.Height = vHeight
.Width = 25
.GroupName = "Gr" & i ' группа используется для группировки флажков (может быть выставлен только один флаг из группы)
End With
' добавление combobox
With Me.Controls.Add("Forms.ComboBox.1", CStr(i) & "_ComB")
.Left = 222
.Top = vTop + (i - 1) * (vHeight + vBetween)
.Height = vHeight
.Width = 210
' сюда еще нужно добавить строки добавления элементов
'
'
End With
' добавление первого текстового поля
With Me.Controls.Add("Forms.TextBox.1", CStr(i) & "1_TB")
.Left = 444
.Top = vTop + (i - 1) * (vHeight + vBetween)
.Height = vHeight
.Width = 54
End With
' добавление второго текстового поля
With Me.Controls.Add("Forms.TextBox.1", CStr(i) & "2_TB")
.Left = 510
.Top = vTop + (i - 1) * (vHeight + vBetween)
.Height = vHeight
.Width = 300
End With
' добавление кнопки
ReDim Preserve cmdBArray(i - 1)
Set cmdBArray(i - 1) = New clsBtnClick
Set cmdBArray(i - 1).cmdB = _
Me.Controls.Add("Forms.CommandButton.1", CStr(i))
With cmdBArray(i - 1).cmdB
.Caption = "Записать"
.Left = 822
.Top = vTop + (i - 1) * (vHeight + vBetween)
.Height = vHeight
.Width = 48
End With
Next i
End Sub
Public Sub btnProc(i As Integer)
Dim myText As String
If Me.Controls(CStr(i) & "1_OB").Value Then _
MsgBox$ Me.Controls(CStr(i) & "1_TB").Text & Me.Controls(CStr(i) & "2_TB").Text & " назначен"
If Me.Controls(CStr(i) & "2_OB").Value Then _
MsgBox$ Me.Controls(CStr(i) & "1_TB").Text & Me.Controls(CStr(i) & "2_TB").Text & " заключен"
End Sub
Option Explicit
Public WithEvents cmdB As MSForms.CommandButton
Attribute cmdB.VB_VarHelpID = -1
Private Sub cmdB_Click()
Call Экспертиза.btnProc(CInt(Val(cmdB.Name))) ' здесь идет привязка к определенной форме
End Sub
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.