首页 > 解决方案 > OnKey还要按初始键

问题描述

嗨,我正在尝试将宏附加到组合键,并运行初始组合键,但它似乎不起作用。

与此相关,我稍后会解释为什么有办法将按下的键作为变量发送,或者以某种方式捕获它?例如: Application.OnKey "{LEFT}", "testMessage({LEFT})" ,但这对我不起作用。在下面的示例中,SendKeys "{RIGHT}" 实际上出于某种原因触发了 NumLock,我听说这是 Excel 的一个错误,但如果我可以将密钥作为变量发送,我可以使用它以不同的方式模拟 SendKeys ,如偏移量。

亲切的问候,丹尼尔

Sub onKeyToggle()
If ActiveSheet.CodeName = "WS_Deliverables" Then
    Application.OnKey "{LEFT}", "testMessage"
    Application.OnKey "{RIGHT}", "testMessage"
    Application.OnKey "{UP}", "testMessage"
    Application.OnKey "{DOWN}", "testMessage"
Else
    Application.OnKey "{LEFT}", ""
    Application.OnKey "{RIGHT}", ""
    Application.OnKey "{UP}", ""
    Application.OnKey "{DOWN}", ""
End If
End Sub

Sub testMessage()
SendKeys "{RIGHT}"
MsgBox "pressed"
End Sub

标签: excelvba

解决方案


为了将键重置为正常含义,您必须按如下方式更改代码。而且您还必须确保代号确实是WS_Deliverables并且您不是在谈论工作表的可见名称。

Sub onKeyToggle()
    If ActiveSheet.CodeName = "WS_Deliverables" Then
        Application.OnKey "{LEFT}", "testMessage"
        Application.OnKey "{RIGHT}", "testMessage"
        Application.OnKey "{UP}", "testMessage"
        Application.OnKey "{DOWN}", "testMessage"
    Else
        Application.OnKey "{LEFT}"
        Application.OnKey "{RIGHT}"
        Application.OnKey "{UP}"
        Application.OnKey "{DOWN}"
    End If
End Sub

推荐阅读