【发布时间】: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