动态地使ComboBox在工作表更改中可见 - VBA 2007

时间:2013-11-13 12:38:04

标签: vba combobox textbox userform worksheet

我创建了一个带有多页的用户表单。在其中一个部分中,我有 TextBoxes ComboBoxes 的组合。共有 9 框彼此相邻。它们都是源于它背后的Excel工作表的控件。当用户将数据输入第一个框时,它会动态创建另外9个框,这些框对应于下一行。这个过程重复。现在, 第9 框是 TextBox 可见性 < / strong>设置为 false 第8个 框是 ComboBox 。如果 8th 框中的值为 “现有” 那么 的可见性第9个 Box True

这就是我动态创建其他TextBoxes / ComboBoxes的方法:

Private Sub Worksheet_Change(ByVal Target As Range)
    Select Case Left(Target.Address, 2)
        Case Is = "$A"
        Dim cCntrl As Control
        Dim i As Integer
        For i = 0 To 8
        //skipping to case 7 and 8
        Case Is = 7
            Set cCntrl = UserForm1.Frame13.Controls.Add("Forms.ComboBox.1", "Login" & i & Target.Row + 1, True)
            With cCntrl
                .Width = UserForm1.ComboBox240.Width
                .Height = UserForm1.ComboBox240.Height
                .Top = (10 + UserForm1.ComboBox240.Height) * (Target.Row - 1)
                .Left = UserForm1.ComboBox240.Left
                .ControlSource = "'Multi Branch'!" & Chr(65 + i) & Target.Row + 1
                .List = Worksheets("Setup").Range("BILLING").Value
                .Style = fmStyleDropDownList
            End With
            Case Is = 8
                Set cCntrl = UserForm1.Frame13.Controls.Add("Forms.TextBox.1", "Login" & i & Target.Row + 1, True)
            With cCntrl
                .Width = UserForm1.TextBox287.Width
                .Height = UserForm1.TextBox287.Height
                .Top = (10 + UserForm1.TextBox287.Height) * (Target.Row - 1)
                .Left = UserForm1.TextBox287.Left
                .ControlSource = "'Multi Branch'!" & Chr(65 + i) & Target.Row + 1
                .Name = "BTwo" & (Target.Row - 1)
                .Visible = False
            End With
        End Select
    Next

以下是我目前正在改变可见性的方式:

        Case Is = "$H"
        If Target.Value = "Existing" Then
            UserForm1.Controls("BTwo" & Target.Row - 2).Visible = True
        Else
        If Target.Row = 2 Then Exit Sub
            UserForm1.Controls("BTwo" & Target.Row - 2).Visible = False
        End If
    End Select

此方法在技术上有效,但仅在我离开第8个方框后。这似乎是OnExit的一种举动。第一行我只是做了一个onchange事件,工作正常。有关如何更改变更的可见性的任何想法 没有 必须选择其他框?

0 个答案:

没有答案