我已经在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中的典型菜单,这意味着该事件处理程序不会工作了。
我怀疑配置中的某些选项正在阻止事件处理程序正常工作,但我找不到它。
有人可以帮忙吗?
谢谢
答案 0 :(得分:0)
此代码应在 Office 2016 上运行(已在2013年测试,并且可以运行):
- 创建一个新的 class模块并将其命名为:
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
- 插入新的模块,复制粘贴代码:
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
- 找到
ThisDocument
模块,复制并粘贴代码:
Option Explicit
Private Sub Document_Close()
Set cApp = Nothing
End Sub
Private Sub Document_Open()
Set cApp = New cRightClickEventHandler
End Sub
这是当您右键单击时的结果:
这是您单击自定义菜单项时发生的情况:
希望这会有所帮助。
找到原始解决方案here。
答案 1 :(得分:0)
好的,我想我发现了会发生什么。事件处理程序可与其他事件完美配合(窗口激活或双击)。因此,这种特定型号的计算机以及可能是鼠标驱动程序似乎有问题。
答案 2 :(得分:0)
对我有用。