经上次发帖求助,自动创建了ComboBox控件    Set mcolCombos1 = New Collection
    For i = 1 To 5
        Dim ctlCombo1 As ComboBox
        Set ctlCombo1 = Frame1.Controls.Add("Forms.combobox.1", "modular subbce" & i, True)
         
        With ctlCombo1
            .Left = 200
            .Top = 30 + (i - 1) * 50 + 6
            .Width = 120
            .Height = 20
            .AddItem "M  5/2 Monostable"
            .AddItem "B  5/2 Bistable"
        End With
         
        Dim objMyCombo1 As MyCombo
        Set objMyCombo1 = New MyCombo
        
        Set objMyCombo1.mctlCombo = ctlCombo1
        objMyCombo1.mlngIndex = i
         
        mcolCombos1.Add objMyCombo1
    Next i此外自己创建了几个TextBox控件Dim oTX As Control
    Dim i As Integer
    With UserForm1
        For i = 1 To 5        
            Set oTX = Frame1.Controls.Add("Forms.textbox.1", "Txt" & i, True)
            With oTX
                .Left = 100
                .Top = 30 + (i - 1) * 50 + 6
                .Width = 80
                .Height = 20
            End With
        Next i
    End With目的是用户自行选择窗体动态生成的ComboBox中的Additem值,选择完分别将值的代码部分显示在TextBox中,将解释保留在ComboBox中。如若选择"M  5/2 Monostable"则TextBox中显示为“M”,ComboBox中显示为“5/2 Monostable”。
由于水平有限,现有以下几个问题:
1.若为窗体控件很容易将两者区分,用窗体控件的change()事件就可解决,但若为动态添加的控件无法进行操作。
2.曾尝试在类模块中加以处理,代码如下:Option Explicit
 
Public WithEvents mctlCombo As ComboBoxPublic mlngIndex As Long
Public mcolCombosVal1 As String
Public mcolCombosVal1x As String
 
Private Sub mctlCombo_Change()
    MsgBox mcolCombosVal1
    mcolCombosVal1x = mcolCombos(1).mctlCombo.Value
    mcolCombosVal1 = Mid(mcolCombosVal1x, 1, 1)
    UserForm1.Controls("Txt1").Text = mcolCombosVal1
    mcolCombos(1).mctlCombo.Value = Mid(mcolCombosVal1x, 4)
End Sub运行时提示错误“对象变量或with变量块未设置”
不知是为何错误?请指导,水平有限敬请谅解,谢谢!

解决方案 »

  1.   

    https://download.csdn.net/download/bakw/9619630 我原来发过一个例子,参考一下.
      

  2.   

    试试这样:Option Explicit
      
    Public WithEvents mctlCombo As ComboBox
     
    Public mlngIndex As Long
    Public mstrCombosVal1 As String
    Public mstrCombosVal1x As String
      
    Private Sub mctlCombo_Change()
        MsgBox mstrCombosVal1
        mstrCombosVal1x = mctlCombo.Text
        mstrCombosVal1 = Mid(mstrCombosVal1x, 1, 1)
        UserForm1.Controls("Txt1").Text = mstrCombosVal1
        mctlCombo.Text = Mid(mstrCombosVal1x, 4)
    End Sub
      

  3.   

    如果只处理第一个combobox控件的话,可以这样:Option Explicit
       
    Public WithEvents mctlCombo As ComboBox
      
    Public mlngIndex As Long
    Public mstrCombosVal1 As String
    Public mstrCombosVal1x As String
       
    Private Sub mctlCombo_Change()
        if mlngIndex <> 1 Then
            Exit Sub
        End If
        MsgBox mstrCombosVal1
        mstrCombosVal1x = mctlCombo.Text
        mstrCombosVal1 = Mid(mstrCombosVal1x, 1, 1)
        UserForm1.Controls("Txt1").Text = mstrCombosVal1
        mctlCombo.Text = Mid(mstrCombosVal1x, 4)
    End Sub