Слово vba - если курсор находится в ячейке / закладке - запустить код - PullRequest
4 голосов
/ 25 июня 2009

У меня есть шаблон документа, который содержит несколько разделов и несколько таблиц. Дело в том, что я пытаюсь вставить выпадающий список внутри ячеек таблицы. И чтобы выпадающий список работал, документ должен быть защищен. Но если я защищаю весь раздел, в котором находится таблица, вся таблица защищена.

Итак, мне было интересно, есть ли способ выполнения макрокода, ЕСЛИ пользователь нажимает на выпадающий список? Затем код защищает документ, заставляя фактически работать элемент управления, затем выбирает вариант, и когда пользователь щелкает за пределами поля, документ должен быть незащищенным.

Возможно ли это?

Ответы [ 2 ]

5 голосов
/ 25 июня 2009

На самом деле в Word VBA есть событие WindowSelectionChange, которое вы можете использовать. Он описан в файле справки Word VBA в разделе «Использование событий с объектом приложения».

Хитрость заключается в том, чтобы назначить ваше приложение переменной в модуле класса (я назвал мой EventClassModule), используя ключевое слово WithEvents:

Public WithEvents App As Word.Application

Затем в обычном событии Document Open вы можете инициализировать переменную для текущего приложения:

Dim oEvents As New EventClassModule
Private Sub Document_Open()
    Set oEvents.App = Word.Application
End Sub

Вернувшись в EventClassModule, вы используете событие WindowSelectionChange, чтобы проверить, является ли выбор таблицей:

Private Sub App_WindowSelectionChange(ByVal Sel As Selection)
    If Sel.Information(wdWithInTable) And ThisDocument.ProtectionType = wdNoProtection Then
        ThisDocument.Protect wdAllowOnlyFormFields
    ElseIf ThisDocument.ProtectionType <> wdNoProtection Then
        ThisDocument.Unprotect
    End If
End Sub

Этот код будет вызываться всякий раз, когда курсор меняет местоположение. Я протестировал его, и он немного привередливый (по какой-то причине объект oEvents имеет тенденцию становиться неинициализированным), но, надеюсь, это станет началом вашего решения.

0 голосов
/ 25 июня 2009

Вместо того, чтобы использовать раскрывающийся список на панели инструментов форм, вы можете использовать ComboBox на панели инструментов управления. Тогда вы можете использовать событие щелчка ComboBox. Вы также можете прикрепить код к событию GotFocus / LostFocus, когда пользователь щелкает за пределами ComboBox.

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