在vba中使用动态事件处理程序

时间:2013-02-11 06:54:42

标签: excel-vba vba excel

我创建了一个表单,我在其中动态创建Textboxes和相应的Comboboxes以及Combobox更改事件。这是创建组合框事件处理程序的类

Option Explicit

Public WithEvents cbx As MSforms.Combobox
Private avarSplit As Variant

Sub SetCombobox(ctl As MSforms.Combobox)
  Set cbx = ctl
End Sub

Private Sub cbx_Change()
 Dim i As Integer
  If cbx.ListIndex > -1 Then
  'MsgBox "You clicked on " & cbx.Name & vbLf & "The value is " & cbx.Value
  avarSplit = Split(cbx.Name, "_")
    'DecessionOnValue
 End If
End Sub

以下是表单上的代码,它动态创建文本框和组合框

Function AddTextBox(Frame1 As frame, numberOfColumns As Integer)

 Dim counter As Integer
 Dim i As Integer
 Dim TxtBox As MSforms.TextBox
 For counter = 1 To numberOfColumns
                                     'Forms.CommandButton.1
    Set TxtBox = Frame1.Controls.Add("Forms.TextBox.1")
    TxtBox.Name = "tb_" + CStr(counter)
    'Bouton.Caption = "Test"
    TxtBox.Visible = True
    i = Property.TextBoxDisable(TxtBox)
    ' Defining coordinates  TextBox height is 18
    If counter = 1 Then
        TxtBox.Top = 23
    Else
        TxtBox.Top = (18 * counter) + 5 * counter
    End If
        TxtBox.Left = 50
   Next counter
End Function

Function Combobox(Frame1 As frame, numberOfColumns As Integer)

Dim counter As Integer
Dim i As Integer
Dim CbBox As MSforms.Combobox
Dim cbx As ComboWithEvent

If pComboboxes Is Nothing Then Set pComboboxes = New Collection
   For counter = 1 To numberOfColumns
                                     'Forms.CommandButton.1
    Set CbBox = Frame1.Controls.Add("Forms.ComboBox.1")
    CbBox.Name = "cb_" + CStr(counter)
    i = AddComboboxValues(CbBox)
  ' Defining coordinates  TextBox height is 18
    If counter = 1 Then
        CbBox.Top = 23
    Else
        CbBox.Top = (18 * counter) + 5 * counter
    End If
        CbBox.Left = 150
        Set cbx = New ComboWithEvent
        cbx.SetCombobox CbBox
        pComboboxes.Add cbx
    Next counter
    i = AddScrollBar(Frame1, counter)

End Function

Combobox事件处理程序工作正常但我的问题是我不知道如何复制文本框的文本或根据动态组合框中选择的值启用禁用文本框。

谢谢, Jatin

1 个答案:

答案 0 :(得分:0)

你将使用它,例如:

Me.Controls(“ControlName”)。Visible = True或者不是Visible,你可以使用启用,禁用等。