VBA: обработчик событий (правая кнопка мыши) не работает в Word 2016 (код отлично работает в Word 2010) - PullRequest
2 голосов
/ 05 апреля 2019

Я разработал код в vba, который использует щелчок правой кнопкой мыши в текстовом файле.Я использую обработчик событий, чтобы вынуть типичное меню, щелкая правой кнопкой мыши.

В Word 2010 все работало идеально. Но теперь, переходя на слово 2016, я не могу заставить его работать.

Код выглядит следующим образом:

У меня есть один модуль класса с этим:

Public WithEvents appWord As Word.Application

Public Sub appWord_WindowBeforeRightClick(ByVal Sel As Selection, Cancel As Boolean)

cancel=true 'in this way I avoided the menu of word-right button mouse to be shown.

End Sub

И в обычном модуле у меня есть:

Dim X As New Class1

Public Sub Register_Event_Handler()

 Set X.appWord = Word.Application

End Sub

И врабочая подпрограмма:

Public Sub tipo1()

Register_Event_Handler

colorseleccion = 0

tiposeleccion = 1

seleccionatextoslevel1

End Sub

Это отлично работало в Word 2010. При щелчке правой кнопкой мыши меню не отображалось, поэтому с помощью GetAsyncKeyState я мог делать все, что хотелкогда пользователь щелкнул правой кнопкой мыши.

Теперь, в слове 2016, программа делает то, что должна делать при нажатии правой кнопки мыши, но в дополнение к этому типичное меню в слове при нажатии правой кнопкипоказано, что это означает, что обработчик событий больше не работает.

Я подозреваю, что какой-то параметр в конфигурации блокирует работу обработчика событий, но я не могу найти, что это такое.

Может ли кто-нибудь помочь?

Спасибо

Ответы [ 2 ]

0 голосов
/ 05 апреля 2019

Хорошо, я думаю, что нашел, что происходит.Обработчик событий отлично работает с другими событиями (активация окна или двойной щелчок).Поэтому, похоже, проблема с этой конкретной моделью компьютера и, возможно, драйверами мыши.

0 голосов
/ 05 апреля 2019

Этот код должен работать на Office 2016 (проверено в 2013 году и работает):

  1. Создайте новый модуль класса и назовите его: cRightClickEventHandler. Скопируйте этот код:
Public WithEvents oApp As Application

Private Sub Class_Initialize()
Set oApp = Application
End Sub

Private Sub Class_Terminate()
Set oApp = Nothing
End Sub

Private Sub oApp_WindowBeforeRightClick(ByVal Sel As Selection, Cancel As Boolean)
    CreateCommand
    Cancel = True
End Sub
  1. Вставить новый модуль , скопировать вставить код:
Option Explicit

Public Const sCommName As String = "Custom"

Public cApp As cRightClickEventHandler

Sub CreateCommand()
Dim cb As CommandBar
Dim ctr As CommandBarControl

On Error GoTo Err_CreateCommand

KillCommand

Set cb = Application.CommandBars.Add(sCommName, msoBarPopup)
Set ctr = cb.Controls.Add(msoControlButton)
With ctr
    .Caption = "Let's do it!"
    .TooltipText = .Caption
    .FaceId = 611
    .OnAction = "SayHello"
End With

cb.ShowPopup

Exit_CreateCommand:
    On Error Resume Next
    Set ctr = Nothing
    Set cb = Nothing
    Exit Sub

Err_CreateCommand:
    MsgBox Err.Description, vbExclamation, Err.Number
    Resume Exit_CreateCommand
End Sub


Sub KillCommand()
On Error Resume Next
    Application.CommandBars(sCommName).Delete
End Sub

Sub SayHello()
    MsgBox Selection.Text, vbInformation, "Hello..."
End Sub
  1. Найти ThisDocument модуль, скопировать и вставить код:
Option Explicit

Private Sub Document_Close()
   Set cApp = Nothing
End Sub

Private Sub Document_Open()
   Set cApp = New cRightClickEventHandler
End Sub

Это результат, если щелкнуть правой кнопкой мыши:

enter image description here

И вот что происходит, когда вы щелкаете по элементу пользовательского меню:

enter image description here

Надеюсь, это поможет.

Оригинальное решение было найдено здесь .

...