VBA:事件处理程序(鼠标右键单击)在Word 2016中不起作用(代码在Word 2010中完美运行)

时间:2019-04-05 13:08:25

标签: vba events ms-word handler

我已经在vba中开发了一个代码,该代码在文字文件中使用鼠标的右键单击。单击鼠标右键时,我使用事件处理程序提取典型菜单。

它在Word 2010中效果很好。但是现在,迁移到Word 2016,我无法使其正常工作。

代码如下:

我有一个与此相关的班级模块:

FOO

在普通模块中,我有:

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

这在Word 2010中工作正常。当单击鼠标右键时,它没有显示菜单,因此通过 GetAsyncKeyState ,我可以执行用户单击鼠标右键时想要做的任何事情。 / p>

现在,在Word 2016中,该程序会执行单击鼠标右键时应该执行的操作,但是此外,还会显示单击右键时Word中的典型菜单,这意味着该事件处理程序不会工作了。

我怀疑配置中的某些选项正在阻止事件处理程序正常工作,但我找不到它。

有人可以帮忙吗?

谢谢

3 个答案:

答案 0 :(得分:0)

此代码应在 Office 2016 上运行(已在2013年测试,并且可以运行):

  
      
  1. 创建一个新的 class模块并将其命名为:cRightClickEventHandler。复制此代码:
  2.   
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. 插入新的模块,复制粘贴代码:
  2.   
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模块,复制并粘贴代码:
  2.   
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

希望这会有所帮助。

找到原始解决方案here

答案 1 :(得分:0)

好的,我想我发现了会发生什么。事件处理程序可与其他事件完美配合(窗口激活或双击)。因此,这种特定型号的计算机以及可能是鼠标驱动程序似乎有问题。

答案 2 :(得分:0)

对我有用。

  • 是否可以对一个Word文档进行处理,这对于一次激活的所有Word文档来说似乎都改变了。
  • 除了删除单词“标准”菜单外,还可以将代码更改为在标准右键菜单上添加为新项