多组合变更声明

问题描述 投票:0回答:3

是否有一个简单的循环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
excel vba excel-vba
3个回答
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

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

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

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


0
投票

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

如何通过使用一个类,你可以通过搜索轻松找到数百个例子。

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

类的好处在于,您只需编写一次事件,然后将其分配给几乎无限数量的控件。

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

© www.soinside.com 2019 - 2024. All rights reserved.