如何使用vba在Excel中的ENTER键上调用函数

谷歌应该给我提供充足的例子,但他们似乎没有任何工作

我想要的:每次用户按下,然后释放,ENTER键,我的程序做一些事情(即创build一个MsgBox,或调用函数Foo)。 我更喜欢这种forms的MWE

我做了什么:我尝试了使用Googlesearch,但没有任何例子是function性的。 他们编译,但不要做任何事情。 我也确保保存在一个macros兼容的Excel格式。

我正在使用的是:我正在使用Office 365的64位Excel 2016

编辑:用户将这些信息input到工作表中。 我想拦截用户input,每次按ENTER键,将光标/活动单元格向下两行,所以每个单元格下面都有一个空单元格。 如果用户按Tab键,我想把光标/活动单元右边两列,所以在每个单元格的右边有一个空单元格。

编辑2:这是我现在应该工作,但什么都不做的MWE。 我将此添加到工作表,而不是作为一个模块

Sub SomeActions() MsgBox ("Hello") End Sub Private Sub Workbook_Open() Application.OnKey "~", "SomeActions" End Sub 

首先,做一个callbackSub ,执行你需要的逻辑。 把它放到一个新的代码模块(不是工作表代码):

 Sub SomeActions() ... End Sub 

然后,订阅OnKey事件,例如,当用户在VBA编辑器中打开工作簿(此代码进入ThisWorkbook )模块时:

 Private Sub Workbook_Open() Application.OnKey "~", "SomeActions" End Sub 

"~"表示回车键。 对于数字小键盘键使用"{ENTER}"

我想要的:每次用户按下,然后释放,ENTER键,为我的程序做一些事情(即创build一个MsgBox,或调用函数Foo)。
我更喜欢这种forms的MWE

如果我正确读了这个内容,你需要在每个用户input的值之间做一个空白行,每个用户input的值之间的空白列是正确的。

在工作表代码表上:

 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 

这发生在所有导航上。 如果您只希望在input时发生这种情况,请修改以适应Worksheet_Change事件macros而不是Worksheet_SelectionChange事件macros。