Нет, подпрограммы Click
должны оставаться в модуле кода UserForm. В самом строгом смысле, пользовательская форма - это класс в документе «контейнер». Дизайнер UserForm и модуль кода являются частью объекта class / UserForm. Все кнопки «Нажми» зависят от этой ссылки.
(Это аналогичная ситуация с самим Документом и модулем ThisDocument
в проекте VBA документа. Документ является классом / объектом и ThisDocument
модулем кода. Элементы управления ActiveX (которые являются элементами управления UserForm) на поверхности документа также полагайтесь на связь между визуальной частью и кодом.)
Что вы можете сделать - это переместить код внутри процедур Click в другой (простой) модуль. Оставьте только одну строку кода в процедуре, которая «вызывает» код в этом модуле. Если код работает с пользовательской формой и / или элементами управления, вам необходимо передать эти объекты в качестве аргументов.
Это может выглядеть так:
'Code in the UserForm module
Private Sub CheckBox1_Click()
CheckBoxClick Me, Me.CheckBox1
End Sub
'Code in a regular module
Sub StartUserForm()
Dim frm As frmTest
Set frm = New frmTest
frm.Show
End Sub
Sub CheckBoxClick(frm As frmTest, ck As MSForms.CheckBox)
Debug.Print frm.NAME, ck.Caption, ck.value
frm.CheckBox2.value = Not ck.value
End Sub