【问题标题】:AHK in MS Excel (Cell Selection Issue With Script)MS Excel 中的 AHK(脚本的单元格选择问题)
【发布时间】:2021-06-05 13:31:19
【问题描述】:

我使用 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 中! 当我选择一系列单元格时,选择框就在那里,但公式中没有单元格引用。 例如:求和 C3:C10 变成 =sum() 公式中实际上没有选择任何单元格。 如果我不断尝试上下多次.. 它显示,但从来没有一致。

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

提前谢谢你

【问题讨论】:

    标签: excel autohotkey


    【解决方案1】:

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

    Shift Down, Up Arrow, Shift Up
    Shift Down, Up Arrow, Shift Up
    Shift Down, Up Arrow, 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", "P"))
            SendInput, {Blind}{Alt Up}{Right}
        else
            SendInput, {Down}
    return
    #If
    

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

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

    那么发生了什么?
    首先我们使用简单的重映射语法(docs)CapsLock 重映射为Shift

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

    热键是使用 * 修饰符创建的.

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

    【讨论】:

    • 感谢 0x464e 的回复。但是,我尝试使用 sendInput 命令和 {Blind},但它仍然不起作用。这是我的完整脚本:
    • 该评论似乎缺少某些内容?它对我来说似乎工作得很好:/ i.imgur.com/bVpNIip.gif
    • 对评论感到抱歉。我试图编辑,但它说我只有 5 分钟左右的时间。我的原始脚本的行为是使用 CAPS+J/K/L/我移动光标而不选择左/下/右/上。用大写字母按 Alt 后,它会选择。您的代码真的很好,我只是无法修改它以在选择时做出原始的 ALT 行为。
    • 哦,对了,我的版本正好相反。如果可能的话,我建议就这样吧。使代码更容易。如果没有,您必须发送 alt up。
    • 非常感谢您的持续跟进??我已经使用这个脚本多年了,在 Excel 之前,现在更改它真的很混乱 :) 我如何发送 alt 以避免在按键之间释放 shift (Alt) 键?
    猜你喜欢
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 2012-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-24
    • 1970-01-01
    相关资源
    最近更新 更多