在其他子函数中调用对象的事件函数集

时间:2018-05-29 14:44:35

标签: excel vba excel-vba

我在Excel VBA中有一个UserForm,其中有不同的对象,如CheckBox,RadioButtons,TextEdit Box等。每个Object都有不同的事件函数,但我想在用户定义的子函数中调用一些事件函数,如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

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

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

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

您在示例中缺少部分代码;如果没有清晰的图片,很难确定你要做什么。有可能从另一个人那里调用一个事件过程,出于多种原因这是一个坏主意。

而不是像你想要的那样调用私有程序,而不是像这样:

Private Sub myEvent()
    'event code here
End Sub

Sub mySub()
    myEvent()
End Sub

...您最好将需要共享的代码移动到共享模块,有点像这样:

Public Sub mySubInSharedModule()
    'event code here
End Sub

Private Sub myEvent()
    Call mySubInSharedModule()
End Sub

Public Sub mySub()
    Call mySubInSharedModule()
End Sub

在本网站和其他网站上有许多文章进一步解释了这一点。要开始使用,请参阅this search以及this Stack Overflow question