当单元格更改其值,双击,选择工作表等时,您可能需要运行宏/ VBA代码段。在所有这些情况下,我们都使用工作表事件处理程序。每当某个事件发生时,事件处理程序都会帮助我们运行VBA代码。

在本文中,我们将简要了解每个工作表事件处理程序。

什么是工作表事件处理程序?工作表事件处理程序是工作表模块本地的子例程。

在哪里编写工作表事件处理程序代码?

image

工作表事件仅写在工作表对象中。如果您在某个模块或类模块中编写工作表事件,则不会有错误,但它们将无法工作。

要写入工作表对象。双击它或右键单击并单击查看代码。将显示代码编写区域。

如何为工作表上的特定事件编写代码?

现在,当您处于编辑模式时,在左上角的下拉菜单中将看到常规。单击下拉列表,然后选择工作表。

现在,在右上角的下拉列表中,将显示所有事件。选择所需的内容,该事件的骨架代码将为您编写。

image

每个事件都有一个固定的过程名称。这些是保留的子例程名称。您不能将它们用于图纸上的其他子例程。在模块中,它们将作为常规子例程工作。

重要提示:该列表中的每个子例程将在指定的事件上运行。

一种工作表事件过程只能在一张纸上写一次。如果在一张纸上写两个相同的事件处理过程,将导致错误,并且不会执行任何操作。当然,该错误将是模棱两可的子例程。

让我们简要地了解每个事件。

1. TheWorksheet_Change(按范围分配ByVal目标)事件当我们对包含工作表的任何更改(不包括格式设置)触发此事件。如果您想对整个工作表进行任何更改,则代码为:

Private Sub Worksheet_Change(ByVal Target As Range)

'do somehting

Msgbox "done something"

End Sub

“目标”始终是活动单元。

另一个示例:如果A1更改,您可能希望将日期和时间放入单元格B1中。在这种情况下,我们使用worksheet_change事件。代码如下所示:

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = "$A$1" Then

Range("B1").Value2 = Format(Now(), "hh:mm:ss")

End If

End Sub

这将仅针对单元格A1。

如果要定位范围,请使用以下示例:

`link:/ events-in-vba-run-macro-如果有任何更改,请在工作表范围内运行[如果在指定范围内对工作表进行了任何更改,请运行宏] ==== 2. The Worksheet_SelectionChange(ByVal目标范围)*事件顾名思义,此事件在选择更改时触发。换句话说,如果您的光标位于单元格A1中,并且移动到了其他某个单元格,则该子例程中的代码将运行。

下面的代码将改变活动单元格的颜色,只要它发生变化并且是偶数行。

现在,只要我的光标在偶数行上移动,它就会被着色。奇数行单元将被保留。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Target.Row Mod 2 = 0 Then

Target.Interior.ColorIndex = 22

End If

End Sub

Worksheet_SelectionChange事件的另一个示例:

image

链接:/ vba最简单的vba代码中的事件以突出显示当前行和列的使用[使用突出显示当前行和列的简单VBA代码]

3. Worksheet_Activate()事件包含工作表的事件代码激活时触发此事件。

此事件的骨架代码为:

一个简单的示例是在选择工作表名称时显示它。

Private Sub Worksheet_Activate()

End Sub

一旦您进入包含此代码的工作表,该事件就会运行,并显示一条消息“您在工作表名称上”

Private Sub Worksheet_Activate()

MsgBox "You are on " & ActiveSheet.Name

End Sub

(在我的情况下是sheet2)。

4. Worksheet_Deactivate()事件离开包含工作表的代码时触发此事件。换句话说,如果您想做一些事情,例如在离开工作表时隐藏行或其他任何东西,请使用此VBA事件。语法为:

下面的示例Worksheet_Deativate事件将简单地弹出一条消息,提示您已离开母版纸,而您将离开该纸。

Private Sub Worksheet_Deactivate()

'your code

'

End Sub
Private Sub Worksheet_Deactivate()

MsgBox "You Left The Master Sheet"

End Sub

image

===

5. Worksheet_BeforeDelete()* Event此事件在您确认删除包含VBA事件的图纸时触发。语法很简单:

以下代码将询问您是否要复制即将删除工作表的内容。

Private Sub Worksheet_BeforeDelete()

End Sub

6. The Worksheet_BeforeDoubleClick(ByVal Target为Range,Cancel为Boolean)*事件双击目标单元格时触发此事件。此VBA工作表事件的语法为:

Private Sub Worksheet_BeforeDelete()

ans = MsgBox("Do you want to copy the content of this sheet to a new sheet?", vbYesNo)

If ans = True Then

'code to copy

End If

End Sub

如果您未设置目标单元格或范围,则每次在工作表上双击都会触发它。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

End Sub

Cancel变量是一个布尔变量。如果将其设置为True,则默认操作不会发生。这意味着,如果双击该单元格,则不会进入编辑模式。

如果您双击任何单元格,则下面的代码将使单元格充满颜色。

下面的代码针对单元格A1。如果已经用指定的颜色填充,则它将消失。它很像一个类似按钮或复选框。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

Cancel = True

Target.Interior.ColorIndex = 7

End Sub

7. TheWorksheet_BeforeRightClick(ByVal目标为范围,取消为布尔值)*事件右键单击目标单元格时触发此事件。此VBA工作表事件的语法为:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

If Target.Address = "$A$1" Then



Cancel = True

If Target.Interior.ColorIndex = 4 Then

Target.Interior.ColorIndex = xlColorIndexNone

Else

Target.Interior.ColorIndex = 4

End If



End If



End Sub

image

如果右键单击,下面的代码将用值1填充单元格。

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)

Cancel = True

'

'your code

'

End Sub

由于我们将“取消”运算符设置为True,因此不会显示默认的右键单击选项。

8. TheWorksheet_Calculate()*事件如果您希望在excel计算工作表时发生某些事情,请使用此事件。每当excel计算工作表时,它将触发。语法很简单:

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)

Cancel = True

Target.Value = 1

End Sub

6. Worksheet_FollowHyperlink(ByVal目标为超链接)*事件单击表上的超链接时,将运行此过程。此事件处理程序的基本语法为:

Private Sub Worksheet_Calculate()

'

'your code

'

End Sub

您可以根据需要设置目标超链接。如果未设置目标超链接,则在包含工作表的代码上单击任何超链接时,该超链接将被执行。

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)

'

'your code

'

End Sub

是的,这些是一些基本的工作表事件,如果您了解这些事件,它们将非常方便。以下是一些您可能想阅读的相关文章。

如果您对本文或任何其他与excel / VBA相关的文章有任何疑问,请在下面的评论部分中告诉我们。

相关文章:

`链接:/在进行任何更改时,使用提示将工作表更改事件运行到宏[使用进行任何更改的工作表更改事件在宏中运行] **因此,为了在工作表更新时运行宏,我们使用VBA的工作表事件。

`link:/ events-in-vba-run-macro-如果有任何更改,在工作表范围内运行[如果在指定范围内在工作表上进行了任何更改,则运行宏] **若要在指定范围内的值更改时运行宏代码,请使用此VBA代码。它检测到在指定范围内所做的任何更改,并将触发该事件。

`link:/ vba中的事件-最简单的vba代码以突出显示当前行和列使用[使用突出显示当前行和列的最简单VBA代码]“ |使用此VBA小片段突出显示工作表的当前行和列。

热门文章:

`链接:/ keyboard-formula-shortcuts-50-excel-shortcuts可提高您的生产率[50 Excel快捷方式以提高生产率]更快地完成任务。这50个快捷键将使您在Excel上的工作更加快捷。

Excel中的VLOOKUP函数 |这是excel中最常用和最受欢迎的功能之一,用于从不同范围和工作表中查找值。链接:/ tips-countif-in-microsoft-excel [在Excel 2016中为COUNTIF]使用此惊人的功能对条件进行计数。您无需过滤数据即可计算特定值。

Countif功能对于准备仪表板至关重要。

链接:/ excel-formula-and-function-excel-sumif-function [如何在Excel中使用SUMIF函数]这是仪表板的另一个重要功能。这可以帮助您汇总特定条件下的值。