我在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()]中调用事件函数?
答案 0 :(得分:2)
VBA不使用花括号。此代码不会与这些代码一起编译。 VBA需要Sub
和End 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。