如何使用 vba 在 Excel 中调用 ENTER 键上的函数
How to call a function on ENTER key in Excel using vba
Google 应该为我提供充足的示例,但其中 none 似乎有效
我想要的: 每次用户按下然后释放 ENTER 键时,我的程序都会执行某些操作(即创建 MsgBox,或调用函数 Foo ).我更喜欢 MWE
的形式
我做了什么:我试过谷歌搜索但是none的例子是有用的。他们编译,但不做任何事情。我还确保以兼容宏的 Excel 格式保存。
我正在使用:我正在使用 Excel2016,64 位 Office 365
编辑: 用户正在将此信息输入到工作表中。我想拦截用户输入,每次他们按 ENTER 时,将 cursor/active 单元格向下移动两行,因此每个单元格下方都有一个空单元格。如果用户按下 tab,我想将 cursor/active 单元格向右移两列,因此每个单元格的右侧都有一个空单元格。
编辑 2: 这是我现在拥有的 MWE,它应该可以工作,但什么都不做。我将其添加到工作表中,而不是作为模块
Sub SomeActions()
MsgBox ("Hello")
End Sub
Private Sub Workbook_Open()
Application.OnKey "~", "SomeActions"
End Sub
首先,创建一个回调 Sub
来执行您需要的逻辑。将其放入新代码模块(不放入工作表代码):
Sub SomeActions()
...
End Sub
然后,订阅OnKey
事件,例如,当用户在VBA编辑器中打开工作簿(此代码进入ThisWorkbook
)模块时:
Private Sub Workbook_Open()
Application.OnKey "~", "SomeActions"
End Sub
"~"
表示 Enter 键。对于数字键盘键,请使用 "{ENTER}"
.
What I want: Everytime the user presses, and then releases, the ENTER key, for my program to do do something (ie. create a MsgBox, or call function Foo).
I would prefer this in the form of a MWE
如果我没看错的话,您需要在每个向下的用户输入值之间留一个空行,在每个向右的用户输入值之间留一个空白列。
工作中sheet代码sheet:
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 event macro instead of a Worksheet_SelectionChange 事件宏。
Google 应该为我提供充足的示例,但其中 none 似乎有效
我想要的: 每次用户按下然后释放 ENTER 键时,我的程序都会执行某些操作(即创建 MsgBox,或调用函数 Foo ).我更喜欢 MWE
的形式我做了什么:我试过谷歌搜索但是none的例子是有用的。他们编译,但不做任何事情。我还确保以兼容宏的 Excel 格式保存。
我正在使用:我正在使用 Excel2016,64 位 Office 365
编辑: 用户正在将此信息输入到工作表中。我想拦截用户输入,每次他们按 ENTER 时,将 cursor/active 单元格向下移动两行,因此每个单元格下方都有一个空单元格。如果用户按下 tab,我想将 cursor/active 单元格向右移两列,因此每个单元格的右侧都有一个空单元格。
编辑 2: 这是我现在拥有的 MWE,它应该可以工作,但什么都不做。我将其添加到工作表中,而不是作为模块
Sub SomeActions()
MsgBox ("Hello")
End Sub
Private Sub Workbook_Open()
Application.OnKey "~", "SomeActions"
End Sub
首先,创建一个回调 Sub
来执行您需要的逻辑。将其放入新代码模块(不放入工作表代码):
Sub SomeActions()
...
End Sub
然后,订阅OnKey
事件,例如,当用户在VBA编辑器中打开工作簿(此代码进入ThisWorkbook
)模块时:
Private Sub Workbook_Open()
Application.OnKey "~", "SomeActions"
End Sub
"~"
表示 Enter 键。对于数字键盘键,请使用 "{ENTER}"
.
What I want: Everytime the user presses, and then releases, the ENTER key, for my program to do do something (ie. create a MsgBox, or call function Foo).
I would prefer this in the form of a MWE
如果我没看错的话,您需要在每个向下的用户输入值之间留一个空行,在每个向右的用户输入值之间留一个空白列。
工作中sheet代码sheet:
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 event macro instead of a Worksheet_SelectionChange 事件宏。