如何使用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。