Google应该为我提供充足的示例,但它们似乎都不起作用
我想要的是什么:每次用户按下然后释放ENTER键,我的程序都要做某事(即创建一个MsgBox,或调用函数Foo)。我更喜欢MWE的形式
我做了什么:我已经尝试使用Google搜索,但没有一个示例正常运行。他们编译,但不做任何事情。我还确保以宏兼容的Excel格式保存。
我正在使用的是什么:我正在使用Excel 2016,64位使用Office 365
编辑:用户正在将此信息输入工作表。我想拦截用户输入,每次按ENTER键时,将光标/活动单元格向下移动两行,因此每个单元格下面都有一个空单元格。如果用户按Tab键,我想将光标/活动单元格对齐两列,因此每个单元格右侧都有一个空单元格。
编辑2:这是我现在所拥有的MWE哪个应该有效,但什么都不做。我将此添加到工作表中,而不是作为模块
Sub SomeActions()
MsgBox ("Hello")
End Sub
Private Sub Workbook_Open()
Application.OnKey "~", "SomeActions"
End Sub
答案 0 :(得分:2)
首先,制作一个执行所需逻辑的回调Sub
。将它放入一个新的代码模块(不是工作表代码):
Sub SomeActions()
...
End Sub
然后,订阅OnKey
事件,例如,当用户在VBA编辑器中打开工作簿(此代码进入ThisWorkbook
)模块时:
Private Sub Workbook_Open()
Application.OnKey "~", "SomeActions"
End Sub
"~"
表示输入键。对于数字键盘键,请使用"{ENTER}"
。
答案 1 :(得分:1)
我想要的:每次用户按下然后释放ENTER键,我的程序都要做某事(即创建一个MsgBox,或调用函数Foo)。
的形式
我希望以MWE
如果我读得正确,你需要在每个用户输入值之间输入一个空白行,并且每个用户输入值之间的空白列都是正确的。
在工作表代码表中:
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
Application.EnableEvents = False
Dim r As Long, c As Long
If Target.Row / 2 <> Int(Target.Row / 2) Then r = 1
If Target.Column / 2 <> Int(Target.Column / 2) Then c = 1
Target.Offset(r, c).Activate
Application.EnableEvents = True
End Sub
所有导航都会发生这种情况。如果您只想在输入中进行此操作,请修改以适合Worksheet_Change事件宏而不是Worksheet_SelectionChange事件宏。