Excel vba -get ActiveX Control флажок, когда запускается обработчик событий - PullRequest
2 голосов
/ 07 июня 2010

У меня есть таблица Excel, которая разделена на разные разделы с именованными диапазонами. Я хочу скрыть именованный диапазон, когда установлен флажок. Я могу сделать это для одного флажка, но я хотел бы иметь одну функцию, которая может скрыть соответствующий раздел на основе флажка вызова. Я планировал вызвать эту функцию из event_handlers, когда флажки нажаты, и передать флажок в качестве аргумента.

Есть ли способ получить доступ к объекту флажка, который вызывает обработчик события?

Это работает:

Sub chkDogsInContest_Click()

    ActiveSheet.Names("DogsInContest").RefersToRange.EntireRow.Hidden = Not chkMemberData.Value

End Sub

Но вот что я хотел бы сделать:

Sub chkDogsInContest_Click()

    Module1.Show_Hide_Section (<calling checkbox>)

End Sub

Эти функции определены в другом модуле:

'The format for the the names of the checkbox controls is
'CHECKBOX_NAME_PREFIX + <name>
'where "name" is also the name of the associated Named Range

Public Const CHECKBOX_NAME_PREFIX As String = "chk"


Public Function CheckName_To_SectionName(ByRef strCheckName As String)

    CheckName_To_SectionName = Mid(strCheckName, CHECKBOX_NAME_PREFIX.Length() + 1)

End Function


Public Sub Show_Hide_Section(ByRef chkBox As CheckBox)

    ActiveSheet.Names(CheckName_To_SectionName(chkBox.Name())).RefersTo.EntireRow.Hidden = True

End Sub

Ответы [ 2 ]

2 голосов
/ 08 июня 2010

Поскольку вы используете обычные (Active-X) флажки на обычном рабочем листе, лучше всего создать событие Click для каждого подпункта, а затем вызвать одну подпрограмму для Hide с параметром имени флажка, например :

Private Sub chkCheckBox1_Click()

    If chkCheckBox1.Value = True Then
        Call RangeHide("CheckBox1")
    End If

End Sub

Private Sub RangeHide(rangetohide As String)

    Range(rangetohide).EntireRow.Hidden = True

End Sub
0 голосов
/ 10 июня 2010

Я думаю, что ответ состоит в том, чтобы создать другой класс, в котором есть объект флажка, и объявить этот объект «WithEvents». Затем я могу создать метод chkBox_clicked (), который будет вызываться всякий раз, когда любой флажок, являющийся членом этот класс нажал. Я также могу сохранить диапазон внутри объекта.

http://www.cpearson.com/excel/Events.aspx

Имеет больше информации ... Отличный сайт для Excel VBA.

РЕДАКТИРОВАТЬ: Это не работает. Смотрите мой комментарий ниже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...