网络安全检测|网络安全服务|网络安全扫描-香港墨客投资移动版

主页 > 业界资讯 > Routers配置

Vba 在特定范围内按Enter键时,无论工作表是否已

Vba 在特定范围内按Enter键时,无论工作表是否已更改,都可以在Excel 2010中运行宏

vba excel

Vba 在特定范围内按Enter键时,无论工作表是否已更改,都可以在Excel 2010中运行宏,vba,excel,Vba,Excel,问题的简短版本:当用户在给定单元格范围内点击数字[Enter]键时,如何在Excel 2010中运行宏,以及自上次运行宏以来他们是否更改了电子表格 更长的版本:我在Excel 2010中有一个宏,目前我在工作表上有一个按钮,用户可以按下按钮运行它。用户输入4个数据单元(在A2:D2中)并运行宏以使用数据填充多张图纸上的多个表格。用户可以在一次操作中输入几百组数据,并且当前将鼠标悬停在按钮上,输入数据,然后单击鼠标而不移动鼠标以点击按钮。我想通过按下[Enter]键来简化宏,这样他们就可以把手放在

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

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

我已经找到了,但答案是使用工作表更改,用户不需要输入键。我还发现,它在[Enter]键上使用,但也需要将工作表更改为可用

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

有用的名称/数字/事物:

数据范围始终在表1单元格A2:D2中

要运行的宏名为“InsertIntoTables()”,不接受任何参数

目前没有使用其他应用程序范围的宏或事件

宏已处理“我的范围”中的空单元格或不正确归档的单元格

如果还有其他需要提供答案的地方,我很乐意提供。

这只是为了让您开始。假设用鼠标单击按钮运行InsertIntoTables()。我假设InsertIntoTables()位于标准模块中。(这使得从另一个子系统呼叫变得容易)

首次运行:

Sub NumericEnter() Application.OnKey "{ENTER}", "InsertIntoTables" End Sub 运行此操作后:

触摸数字键盘ENTER键与鼠标单击按钮的效果相同

正常的回车键将不受影响

要恢复数字键盘输入键,请运行以下操作:

Sub ClearEnter() Application.OnKey "{ENTER}", "" End Sub 您必须完成的内容:

无论哪个工作表处于活动状态,数字键盘输入键都将调用sub。您必须添加逻辑以检测哪个工作表处于活动状态并采取适当的操作。当子单元完成时,必须选择所需的单元。您必须记住在退出之前运行还原子系统

编辑#1:

我有两张工作表;Sheet1和Sheet2。
Sheet1是我要使用“特殊”回车键的工作表

我将以下内容放入标准模块中:

Sub NumericEnter() Application.OnKey "{ENTER}", "InsertIntoTables" End Sub Sub ClearEnter() Application.OnKey "{ENTER}", "" End Sub Sub InsertIntoTables() MsgBox "Inserting" End Sub 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 我将以下内容放在表1代码区中:

Sub NumericEnter() Application.OnKey "{ENTER}", "InsertIntoTables" End Sub Sub ClearEnter() Application.OnKey "{ENTER}", "" End Sub Sub InsertIntoTables() MsgBox "Inserting" End Sub 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 我在工作簿代码区域中放置了以下内容:

Sub NumericEnter() Application.OnKey "{ENTER}", "InsertIntoTables" End Sub Sub ClearEnter() Application.OnKey "{ENTER}", "" End Sub Sub InsertIntoTables() MsgBox "Inserting" End Sub 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\u Open()宏的目的是确保我们从激活Sheet1和激活“特殊”ENTER键开始

编辑#2:

改用这个:

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

您是否尝试过ON键宏??为什么键必须是数字键?为什么不是功能键?您是否考虑过使用一个可以在几秒钟内设置的快捷键?(开发者选项卡>宏>选项)@Variatus使用数字[Enter]键的想法是,他们将只输入数字数据,用户更喜欢数字键盘,因此如果他们可以在该区域使用一个直观的按键,这是有意义的。必须按[F2]或[Alt+K]这样的键才能将其分解,就像单击鼠标一样。@Gary的学生正在向您演示如何做您想做的事情。我要亲自告诉你们,你们对这个解决方案的感觉是正确的:它是复杂的。这是因为您拒绝Excel处理您的需求的方式。每次修改4个单元格中的任何一个单元格时,应使用工作表\u Change事件运行现有过程。宏应检查所有条目是否存在,并仅在它们存在时更新表。根本不需要按任何键。请勿“错误”运行宏,或忘记运行宏,或在错误的工作表上运行宏。@Variatus我同意您的评估。使用更改事件来运行代码要容易得多。但是,一些设计师希望在单击按钮或触摸Enter键之前,让用户有机会检查输入的值并进行视觉验证。这就是为什么许多web应用程序依赖于提交按钮来完成事务。因为我不是使用工作簿的人,所以我正在尝试为我的用户删除步骤。有没有一种方法可以在不必手动运行任何一个OnKey子函数的情况下实现这一点,这样{Enter}在其他地方仍然会正常运行?您可以使用一对工作表事件宏来实现这一点。使用Activate Event宏调用NumericEnter()并使用Deactivate Event宏调用ClearEnter()您能将其扩展为完整答案吗?它可能有用,但我不完全知道如何实现它。如果你能扩展它,我很乐意把它标记为正确的。@MisterB看我的编辑#1这太接近了!在床单上,它做了我需要的一切。我调整了我的宏来处理一些额外的检查,所以它工作得很好。问题是,如果我转到任何其他工作表,数字[Enter]键将不起任何作用。没有

(责任编辑:admin)