多组合变更声明

时间:2017-12-26 13:40:33

标签: excel vba excel-vba

是否有一个简单的循环combobox_change命令,如下面的代码?

Private Sub ComboBox1_Change()
    nkm = cmbslno.ListIndex + 1
    Set wk = Sheets("kkm" & nkm)
    TextBox1.Text = Application.WorksheetFunction.VLookup(ComboBox1, wk.Range("A33:B52"), 2, 0)
End Sub
Private Sub ComboBox2_Change()
    nkm = cmbslno.ListIndex + 1
    Set wk = Sheets("kkm" & nkm)
    TextBox2.Text = Application.WorksheetFunction.VLookup(ComboBox2, wk.Range("A33:B52"), 2, 0)
End Sub
Private Sub ComboBox3_Change()
    nkm = cmbslno.ListIndex + 1
    Set wk = Sheets("kkm" & nkm)
    TextBox3.Text = Application.WorksheetFunction.VLookup(ComboBox3, wk.Range("A33:B52"), 2, 0)
End Sub
Private Sub ComboBox4_Change()
    nkm = cmbslno.ListIndex + 1
    Set wk = Sheets("kkm" & nkm)
    TextBox4.Text = Application.WorksheetFunction.VLookup(ComboBox4, wk.Range("A33:B52"), 2, 0)
End Sub

我想简化一个命令行

for i = 1 to 15
......... "code above" .....
next

3 个答案:

答案 0 :(得分:0)

学习循环控制。以下是在循环中与控件交互的基本方法示例。

    Dim cCont As Control
    For Each cCont In Me.Controls
        If TypeName(cCont) = "CheckBox" Then
            Me.Controls("TextBox" & i) =  False
        End If
    Next cCont
    For Each cCont In Me.Controls
        If TypeName(cCont) = "TextBox" Then
            Me.Controls("TextBox" & i) = "whatever"
        End If
    Next cCont
    For Each cCont In Me.Controls
        If TypeName(cCont) = "ComboBox" Then
            Me.Controls("ComboBox" & i) = "whatever"
        End If
    Next cCont

如果你的控件具有某种一致的命名约定,你可以用这个做很多事情。你的例子看起来好像是这样,但是值得一提的是很多人在第一次出发时并没有把这么多想法放到他们的控件中。

另外要注意,如果你有标签条,那么它也会对这些标签进行控制。

答案 1 :(得分:0)

您尝试实现的目标可以使用一个程序完成,并被调用15次。

Sub MyChange ()
  For i = 1 to 15
    Call ChangeCmb(i)
  Next
End Sub

要调用的子:

Private Sub ChangeCmb(index as Integer)
    nkm = cmbslno.ListIndex + 1
    Set wk = Sheets("kkm" & nkm)
    Me.Controls("TextBox" & i).Text = Application.WorksheetFunction.VLookup(Me.Controls("ComboBox" & i), wk.Range("A33:B52"), 2, 0)
End Sub

答案 2 :(得分:0)

您可以将代码(事件)分配给循环中的控件。

通过使用课程,你可以通过搜索轻松找到数百个例子。

如果只有某些组合框必须执行某些操作,则可以在循环中根据控件的名称或标记进行测试。

课堂上的好处是你只编写了一次你的事件,并且你可以将它分配给几乎无限数量的控件。

限制受影响控件的另一种方法是将它们放入容器中:frame,multitab等......