微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MS Excel 中的 AHK脚本的单元格选择问题

如何解决MS Excel 中的 AHK脚本的单元格选择问题

我开始了一个使用 CAPSLock 键导航的小脚本(这只是代码的一部分):

SetCapsLockState,AlwaysOff
CapsLock & i::
    if getkeystate("alt") = 0
            Send,{Up}
    else
            Send,+{Up}
return
CapsLock & l::
    if getkeystate("alt") = 0
            Send,{Right}
    else
 send,+{Right}
return

它在任何地方都能完美运行......除了在 MS Excel 中! 当我选择一系列单元格时,选择框在那里,但公式中没有单元格引用。 例如: Summing C3:C10 变成 =sum() 公式中实际上没有选择任何单元格。 如果我不断尝试上下多次......它会显示,但永远不会一致。

知道如何解决这个问题吗?

提前致谢

解决方法

问题来自于您的 shift 键在两次按键之间被释放。
例如,尝试在 Excel 中按这样的键,您会发现实际上并没有选择单元格,而只是突出显示了它们:

Shift Down,Up Arrow,Shift Up
Shift Down,Shift Up
...

因此,您将不得不在整个选择过程中一直按住 Shift。
这是我能想到的:

CapsLock::Shift

#If,GetKeyState("CapsLock","P")
*i::
    if (GetKeyState("Alt","P"))
        SendInput,{Blind}{Alt Up}{Up}
    else
        SendInput,{Up}
return

*l::
    if (GetKeyState("Alt",{Blind}{Alt Up}{Right}
    else
        SendInput,{Down}
return
#If

或者就像这样用三元来写得更干净:

CapsLock::Shift

#If,"P")
*i::SendInput,% GetKeyState("Alt","P") ? "{Blind}{Alt Up}{Up}" : "{Up}" 
*l::SendInput,"P") ? "{Blind}{Alt Up}{Right}" : "{Right}"
#If

这是怎么回事?
首先,我们使用简单的重映射语法(docs)CapsLock 重映射到 Shift

然后我们使用 #If(docs)IL 创建上下文相关的热键。
热键仅在 CapsLock物理状态关闭时触发。
我们需要物理状态,因为逻辑状态(默认)被重新映射为 shift。

热键是使用 * 修饰符(docs) 创建的,因此即使 Shift 和/或 Alt 它们也会触发> 被按住。

我切换了 Send 命令 SendInput,因为它是推荐的更快、更可靠的发送模式(docs)
然后是关于{Blind}。通常,当您使用发送命令发送某些内容时,它会自动释放您可能持有的任何修饰符。但是如果您使用盲发送模式(docs),则不会发生这种情况。所以 Shift 仍然一直被按住。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。