使用回车键在Excel 2010中运行宏,工作表是否已更改,何时按下特定范围

时间:2018-01-30 00:28:41

标签: excel vba excel-vba

问题的简短版本:当用户点击给定单元格范围内的数字[Enter]键时,如何在Excel 2010中运行宏,以及它们是否已更改自上次运行宏以来的电子表格?

更长版本:我在Excel 2010中有一个宏,我目前在工作表上有一个按钮,用户可以按下该按钮来运行它。用户输入4个数据单元格(在A2:D2中)并运行宏以使用数据填充多个表格上的多个表格。用户可以在一次坐下输入数百组数据,并且当前将鼠标悬停在按钮上,输入数据,并且单击鼠标而不移动它以按下按钮。我想通过按下数字[Enter]键来运行宏来简化它,这样他们就可以把手放在数字键区。

我找到this question,但答案是使用Worksheet_Change而用户不需要输入密钥。我还找到了this question,它在[Enter]键上使用,但也要求工作表更改为有用。

我的用户可能会多次使用相同的数据,因此我希望他们可以多次按[Enter]键。目前,宏通过选择A2(第一个包含数据的单元格)完成,因此用户可以输入新数据或再次按下它以再次运行它。我希望它从A2:D2范围内的任何地方运行,完成时选择A2(现在如此),如果在选择任何其他单元格时按下[Enter],或者选择任何其他工作表上的单元格,我希望它像目前一样向下移动一个单元格,而不运行任何宏

有用的名字/数字/东西:

  • 数据范围始终位于工作表1中,单元格A2:D2。
  • 要运行的宏名为" InsertIntoTables()"并且没有参数。
  • 目前尚未使用其他应用程序范围的宏或事件。
  • 宏已经在我的范围内处理空的或不正确提交的单元格。

如果还有其他必要提供答案,我很乐意提供答案。

1 个答案:

答案 0 :(得分:2)

这只是为了让你入门。假设用鼠标单击按钮运行InsertIntoTables()。我假设InsertIntoTables()位于标准模块中。 (这样可以轻松地从另一个子系统调用)

首先运行:

Sub NumericEnter()
    Application.OnKey "{ENTER}", "InsertIntoTables"
End Sub

运行完毕后:

  • 触摸数字键盘 ENTER 键与鼠标点击按钮效果相同
  • 正常的 ENTER 键不会受到影响

要恢复数字键盘 ENTER 键,请运行:

Sub ClearEnter()
    Application.OnKey "{ENTER}", ""
End Sub

您必须完成的工作:

无论哪个工作表处于活动状态,数字小键盘 ENTER 键都会调用您的小节。您必须添加逻辑以检测哪个工作表处于活动状态并采取适当的操作。子文件完成后,您必须选择所需的单元格。您必须记住在退出前运行恢复子。

修改#1:

我有两张工作表; Sheet1 Sheet2
Sheet1 是我想要使用" special" 输入键。

我将以下内容放在标准模块

Sub NumericEnter()
    Application.OnKey "{ENTER}", "InsertIntoTables"
End Sub

Sub ClearEnter()
    Application.OnKey "{ENTER}", ""
End Sub

Sub InsertIntoTables()
    MsgBox "Inserting"
End Sub

我将以下内容放在 Sheet1 代码区中:

Private Sub Worksheet_Activate()
    Call NumericEnter
End Sub

Private Sub Worksheet_Deactivate()
    Call ClearEnter
End Sub

我将以下内容放在工作簿代码区

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Call ClearEnter
End Sub

Private Sub Workbook_Open()
    Sheets("Sheet2").Activate
    Sheets("Sheet1").Activate
End Sub

Workbook_Open()宏的目的是确保我们从 Sheet1 活动和"特殊"开始。 ENTER 键激活。

修改#2:

请改用:

Sub ClearEnter()
    Application.OnKey "{ENTER}"
End Sub

参考:

Tims answer