В Word VBA можно ли разделить модуль кода формы на два модуля кода? - PullRequest
0 голосов
/ 30 апреля 2018

В моем файле Word есть форма MyNiceForm. Конечно, с ним связан модуль кода, который содержит процедуры _Click (). (Возможно, они называются обработчиками событий, но это не влияет на мой вопрос.)

У меня так много процедур _Click (), что я хотел бы разделить их на отдельный модуль кода, но я не могу понять, как это сделать. Я несколько уверен, что VBA не позволяет мне помещать процедуру _Click () в обычный модуль кода (модуль кода «не в форме»).

1 Ответ

0 голосов
/ 30 апреля 2018

Нет, подпрограммы 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...