向多个控件添加一个函数

时间:2017-01-03 09:14:08

标签: vba excel-vba controls excel

假设我有一个包含5行的用户表单。每行包含多个控件,例如:

<Text field> | <Text field> | <Combo box>

当在任一行中更改第一个控件/列(文本字段)的值时,我有一个我想调用的函数。如果没有制作五个单独的_Change函数(每行一个),这是否可行?

1 个答案:

答案 0 :(得分:0)

将Eventhandlers添加到多个控件中有一种相当快速但不合理的脏方法......

i)使用Change定义要呼叫的功能。 Afaik它必须是普通模块中的Public Function

ii)使用RunCode - 调用您的函数的事件创建一个Access-makro(而不是VBA)。

enter image description here

iii)将事件添加到您的控件中,无论是在您的设计视图中还是在

Private Sub Form_Current()
    Dim ctl
    For Each ctl In Me.Controls
        With ctl
            If .ControlType = acTextBox Then
                .OnChange = "Makro1"
            End If
        End With
    Next ctl        
End Sub

注意:

  • 上面的代码将事件添加到所有文本框中(由于我是懒惰的)。交换If .ControlType = acTextBox Then以检查您的喜好。你可以使用标签,智能标签,简单的名称约定,如tbx_c1r1或控制数组,如果你喜欢

  • 如果您的函数以某种方式包含Caller,则会变得更加困难。一定要发布你的功能,也许我们可以找到一些方法。

希望这有帮助!如果有人想出一个更聪明的方法,我会很高兴的。