【问题标题】:Excel – Detect if 2 specific keys being pressed at onceExcel – 检测是否同时按下了 2 个特定键
【发布时间】:2013-11-05 02:05:06
【问题描述】:

我不知道这是否可能。我正在使用 Excel 并使用 VB 脚本。有没有办法检测是否同时按下了两个键以及它们是哪个键?那么如果是那些被按下的键,我可以使用 If/Then 语句来执行我需要执行的任何过程吗?

我知道如果我有类似组合框的东西,我可以使用 keydown 功能来检测按下的单个键,但这仅适用于一个键而不是两个键。另外,我没有使用组合框、文本框或其他任何东西。我严格使用单元格,所以似乎没有任何类似 keydown 的东西来检测甚至按下单个键。

再次,我需要它检测同时按下的两个键。我还希望它在工作簿级别也检测到这一点,而不是每个单独的工作表,因为有多个工作表,并且希望这些按键能够从一张工作表到下一张工作表。

请让我知道这是否可能,但我觉得这是不可能的。

【问题讨论】:

  • 你看过VBA的OnKey函数吗?它适用于 Ctrl、Shift 和其他此类键以及“常规”键(如“A”)。
  • 谢谢,这似乎是一个好的开始,不,我还没有尝试过使用它。我正在查找有关它的信息。问题是,我不知道在哪里放置 onkey 事件。当按键被按下时,似乎没有任何选项会触发此操作。我在它旁边放了一个标记,所以当代码运行时,它会在这个标记处暂停,但是当我按下键时,什么都不会触发。我看到人们通过在 Visual Studios 中创建的插件在 Excel 中使用它的文章,但我需要弄清楚如何在不使用插件的情况下直接在 Excel 中执行此操作。
  • 我确实弄明白了,谢谢。我必须在 ThisWorkbook 下放置“onkey”命令,以便它何时打开。所以我会把它放在“Private Sub Workbook_Open()”中。然后我需要在 ThisWorkbook 下创建一个子例程,并将其引用到这个例程中。对于要运行的 onkey 例程,请确保指定“ThisWorkbook.Routine”,其中“Routine”是新子类别的名称。否则,您可以创建一个模块,无论您调用什么 Sub,您都不会指定“ThisWorkbook.Routine”,只需指定“Routine”即可。不过我不想使用模块。感谢您让我知道 onkey!
  • 这几乎就像我想要的那样工作。我打开另一个工作簿进行测试,它延续到其他打开的工作簿。我只希望它适用于特定的工作簿,而不是所有打开的工作簿。然后,如果我关闭具有代码的工作簿并在不同的工作簿上按这些键,它将重新打开包含代码的工作簿。为了让钥匙停止工作,我必须关闭所有 Excel 会话。有没有办法让这段代码严格引用这个工作簿而不是所有工作簿?

标签: excel vbscript keypress onkeypress


【解决方案1】:

道格,

感谢您的建议,因此我想通了。在这里,以防其他人发现这很有用:

私有子 Workbook_Activate() '当工作簿处于活动状态时,它将在标准 Ctrl + C 的位置运行脚本。 Application.onkey "^{c}", "ThisWorkbook.cCopy" 结束子 私有子 Workbook_Deactivate() '当另一个工作簿处于活动状态时,这将禁用此脚本,因此标准 Ctrl + C 将再次工作。 应用程序.onkey "^{c}" 结束子 子 cCopy() '这是激活时运行的脚本。这仅用于测试目的。 Worksheets("Sites").Range("I1").Value2 = "Yes" 结束子

【讨论】:

    猜你喜欢
    • 2014-01-15
    • 2016-10-31
    • 2011-06-22
    • 2017-09-03
    • 1970-01-01
    • 2015-04-22
    • 2012-11-12
    • 2012-08-18
    • 1970-01-01
    相关资源
    最近更新 更多