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

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

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

这些代码仅适用于工作簿的组件。那是工作簿本身,是工作表和范围。

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

工作簿事件仅写在工作簿对象中。如果您在某个常规模块中编写工作簿事件,则不会有任何错误,但它们将不起作用。

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

如何为工作簿中的特定事件编写代码?

现在,当您处于编辑模式时,在左上角的下拉菜单中,您将看到常规。单击下拉列表,然后选择工作簿。在右上角的下拉列表中,将显示所有事件。选择所需的内容,该事件的骨架代码将为您编写。

每个事件都有一个固定的过程名称。这些是以workbook_开头的保留子例程名称。您不能将它们用于其他子例程(可以,但是它们将是常规子例程)。

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

_一种类型的工作簿事件过程只能在一个工作簿上编写一次。如果您在一个工作簿中编写两个相同的事件处理过程,则将导致错误,并且不会执行任何操作。

当然,该错误将是模棱两可的子例程。_

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

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

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

'do something

Msgbox "done something"

End Sub

“ Sh”始终是活动工作表。 “目标”始终是活动单元。

另一个例子:如果A1更改,您可能需要将日期和时间放在Cel,prB1中。在这种情况下,我们使用workbook_sheetchange事件。代码如下所示:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

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

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

End If

End Sub

由于我们尚未指定“ sh”对象,因此这将仅针对每张纸上的单元格A1。

  1. Workbook_Activate()事件激活包含工作簿的事件代码时,将触发此事件。此事件的骨架代码为:

Private Sub Workbook_Activate()

End Sub

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

Private Sub Workbook_Activate()

MsgBox "You are on workbook " & Activeworkbook.Name

End Sub

一旦您进入包含此代码的工作簿,该事件就会运行,并显示一条消息“您在工作簿名称上”(在我的情况下是sheet2)。

  1. Workbook_Open()事件这是最常见的问题之一,即在工作簿打开后如何立即运行宏。这就是答案。打开工作簿后,将立即运行此工作簿事件。与Workbook_Activate()不同,此代码仅运行一次,而不是每次激活时都运行。

Private Sub Workbook_Open()

'your code

'

End Sub

下面的示例Workbook_Open事件将在您打开包含工作簿的代码时简单地弹出欢迎消息。

Private Sub Workbook_Open()

MsgBox "Welcome to the Master File"

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

Private Sub Workbook_Deactivate()

'your code

'

End Sub

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

Private Sub Workbook_Deactivate()

MsgBox "You Left The Master Sheet"

End Sub
  1. Workbook_BeforeClose()事件当您确认删除包含工作表的VBA事件时,将触发此事件。语法很简单:

Private Sub Workbook_BeforeClose(Cancel as Boolean)

End Sub

如果您想保持工作簿打开,可以将“取消”设置为true。

以下代码将询问您是否要保存即将关闭工作簿的内容。

Private Sub Workbook_BeforeClose(Cancel as Boolean)

ans = MsgBox("Do you want to save the content of this workbook?", vbYesNo)

If ans = True Then

thisworkbook.save

End If

End Sub
  1. Workbook_BeforeSave(ByVal SaveAsUI为Boolean,Cancel为Boolean)事件此事件在保存工作簿之前触发。语法很简单:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

End Sub

如果工作簿(而不是VBA)发生更改,则SaveAsUI设置为True。

如果您希望不保存工作簿,则可以将“取消”设置为true。

下面的代码将询问您是否要保存即将保存工作簿的内容。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean,Cancel as Boolean)

ans = MsgBox("Do you really want to save the content of this workbook?", vbYesNo)

If ans = False Then

Cancel = True

End If

End Sub
  1. Workbook_BeforeSave(ByVal SaveAsUI为布尔值,Cancel为布尔值取消)事件该事件在保存工作簿之前触发。语法很简单:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

End Sub

如果工作簿(而不是VBA)发生更改,则SaveAsUI设置为True。

如果您希望不保存工作簿,则可以将“取消”设置为true。

下面的代码将询问您是否要保存即将保存工作簿的内容。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean,Cancel as Boolean)

ans = MsgBox("Do you really want to save the content of this workbook?", vbYesNo)

If ans = False Then

Cancel = True

End If

End Sub
  1. Workbook_NewSheet(ByVal Sh As Object)事件当您向工作簿中添加新工作表时,将触发此事件。语法很简单:

Private Sub Workbook_NewSheet(ByVal Sh As Object)

End Sub

Sh是图纸对象。该类型实际上是一个核心对象,因此,如果我们添加图表表,宏表或对话框表,该事件仍然有效。

下面的代码将添加并显示新添加的工作表的名称。

Private Sub Workbook_NewSheet(ByVal Sh As Object)

MsgBox "You added a new sheet. " & Sh.Name

End Sub

工作簿对象还有更多事件。我们不能在这里讨论它们。如果您想了解某些特定事件,请在下面的评论部分中询问。我希望我能够在本文中解释工作簿事件的基础。在下面的评论部分中告诉我,它是否对您有帮助。

相关文章:

使用进行任何更改时使用工作表更改事件运行宏因此,为了在工作表更新时运行宏,我们使用VBA的工作表事件。

如果在指定范围内对表进行了任何更改,则运行宏 |若要在指定范围内的值更改时运行宏代码,请使用此VBA代码。它检测到在指定范围内所做的任何更改,并将触发该事件。

使用突出显示当前行和列的最简单VBA代码使用此VBA小片段突出显示工作表的当前行和列。

热门文章:

50 Excel快捷方式以提高生产率更快地完成任务。这50个快捷键将使您在Excel上的工作更加快捷。

Excel中的VLOOKUP函数在Excel 2016中为COUNTIF使用此惊人的功能对条件进行计数。您无需过滤数据即可计算特定值。

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

如何在Excel中使用SUMIF函数这是仪表板的另一个重要功能。这可以帮助您汇总特定条件下的值。