在指定范围内对表运行宏,如果所做的任何更改
在整个VBA练习中,当特定范围或单元格发生更改时,您将需要运行宏。在这种情况下,要在对目标范围进行更改时运行宏,请使用change事件。
`link:/ excel-macros-and-vba-events-in-vb [VBA中的事件]使我们能够在发生特定事件时运行宏。
语法VBA范围更改事件
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("your_range")) Is Nothing Then call your_macro End If End Sub
该事件在模块中不起作用。您需要将它们写入对象(工作表,图表,工作簿)。
拉特有一个例子来学习在指定范围内进行更改时如何运行宏。
示例:运行VBA宏当在范围A2:A100中进行更改时,首先,选择将在其上发生事件的工作表。在VBA编辑器中双击该工作表,然后复制下面的代码或上面的通用代码,然后根据需要进行更改。
在此示例中,我想在工作表2上的范围A2:A100中进行更改时运行宏/ VBA代码。为此,我在项目资源管理器中双击sheet2。它将打开该工作表的编码页面。您可以右键单击工作表,然后单击查看代码以执行相同的操作。
我需要使用更改事件。为此,我们使用默认的subroutineWorksheet_Change(ByVal Target As Range)。进行指定的更改时触发。所以我们的代码是这样的:
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("A2:A100")) Is Nothing Then Call TestEvent End If End Sub
在Sheet2的范围A2:A100中进行任何更改时,都会调用子例程TestEvent,如上面的gif所示。
TestEvent是module2中的公共子例程。它只是弹出一条消息,表明该事件正在运行。
Sub TestEvent() MsgBox "Event is working!" End Sub
如何运作?
我们提出了一个条件:
如果Not Intersect(Target,Range(“ A2:A100”))Nothing则HereIntersect(Target,Range(“ A2:A100”))Is Nothing如果对Range A2:A100进行任何更改,则Nothing返回True。我们在此语句之前放置一个Not运算符,该运算符将反转“ Intersect(Target,Range(“ A2:A100”))“给出的输出。因此,如果在范围A2:A100中未进行任何更改,则表达式将返回Falls,并且subTestEvent不会获得调用。如果您确实在范围A2:A100中的任何单元格中进行了更改,则表达式将返回True,并且事件将发生。这就是这里发生的事情。
注意:您可以在此块中放置任何子例程。它可以来自任何模块。但这应该是一个公共子例程。您可以将范围设置为任意程度。整个表都是极限。
|是的,当您在指定范围内进行更改时,可以通过这种方式调用子例程或运行宏/ VBA代码。这是一个基本的事件示例。仅当更改基于文本时,才会触发此事件。基于文本的意思是,如果您在单元格中写入任何内容或将其删除,事件将触发。如果更改单元格的格式,则不会触发。还有其他方法可以做到这一点。
希望对您有所帮助。如果您对此VBA主题或任何其他与excel有关的主题有任何疑问,请告诉我下面的评论部分。并查看下面提到的其他相关和热门帖子。
相关文章:
使用突出显示当前行和列的简单VBA代码 ** |使用此小VBA代码段突出显示工作表的当前行和列。
`link:/ events-in-vba-the-worksheet-events-excel-vba [Excel VBA中的工作表事件] ** |当您希望在工作表上发生指定事件时运行宏时,工作表事件非常有用。
热门文章:
50 Excel快捷方式以提高生产率更快地完成任务。这50个快捷键将使您在Excel上的工作速度更快。
Excel中的VLOOKUP函数在Excel 2016中为COUNTIF使用此惊人的功能对条件进行计数。您无需过滤数据即可计算特定值。
Countif功能对于准备仪表板至关重要。
如何在Excel中使用SUMIF函数这是仪表板的另一个重要功能。这可以帮助您汇总特定条件下的值。