首页 > 解决方案 > 在其他子函数中调用对象的事件函数集

问题描述

我在 Excel VBA 中有一个用户表单,其中包含不同的对象,如 CheckBox、RadioButtons、TextEdit Box 等。每个对象都有不同的事件函数,但我想在用户定义的子函数中调用一些事件函数,如 UserForm_Init() 函数,以便重新利用用它们编写的相同代码。

例子:

Private Sub  CheckBox1_Click() [Later changed to public also]
    If CheckBox1.Value Then
         --- Code
    End If
End Sub

Private Sub    CheckBox2_Click()
      If CheckBox2.Value Then
         --- Code
      End If
End Sub

Private Sub    RadioButton1_Click()
    If RadioButton1.Value Then
         --- Code
    End If
End Sub

' User Defined Function
Sub UserForm_Init()
     CheckBox1_Click()
     CheckBox2_Click()
     RadioButton1_Click()
End Sub

但是当我尝试编译时显示编译错误,我如何在用户定义的子函数中执行这些对象事件函数。

我知道我可以在事件函数中编写单独的函数,并为用户定义的子函数调用这些单独的函数。但是在这种情况下,重新更改整个代码将太困难了。我只能选择在子函数中调用这些事件函数来执行。

我如何执行这些操作,在用户定义的子函数 [UserForm_Init()] 中调用事件函数?

标签: vbaexcel

解决方案


VBA 不使用花括号。此代码不会与这些一起编译。VBA 需要SubEnd Sub定义程序。

Sub CheckBox1_Click()

  if CheckBox1.Value Then
     --- Code
  end if
End Sub

Sub CheckBox2_Click()

  if CheckBox2.Value Then
     --- Code
  end if
End Sub

Sub RadioButton1_Click()

  if RadioButton1.Value Then
     --- Code
  End If
End Sub


Sub UserForm_Init()
 CheckBox1_Click()
 CheckBox2_Click()
 RadioButton1_Click()
End Sub

注意:如果您的自定义函数UserForm_Init不在表单的代码模块中,您需要限定过程名称,例如:

Sub UserForm_Init()
 UserForm1.CheckBox1_Click()
 UserForm1.CheckBox2_Click()
 UserForm1.RadioButton1_Click()
End Sub

根据您的实现,可能会出现额外的复杂性,但我希望这可以帮助您入门。


推荐阅读