如何使用工作簿中的VBA事件
您可能希望在选择特定工作簿时,选择工作簿中的工作表,单元格更改其值,发生双击,添加工作表等时运行宏/ VBA代码段。在所有这些情况下,我们使用工作簿事件处理程序。每当某个事件发生时,事件处理程序都会帮助我们运行VBA代码。
在本文中,我们将简要了解每个工作簿事件处理程序。
什么是工作簿事件处理程序?工作簿事件处理程序是工作簿本地的子例程。
这些代码仅适用于工作簿的组件。那是工作簿本身,是工作表和范围。
在哪里编写工作簿事件处理程序代码?
工作簿事件仅写在工作簿对象中。如果您在某个常规模块中编写工作簿事件,则不会有任何错误,但它们将不起作用。
在工作簿对象中写入。双击它或右键单击并单击查看代码。将显示代码编写区域。
如何为工作簿中的特定事件编写代码?
现在,当您处于编辑模式时,在左上角的下拉菜单中,您将看到常规。单击下拉列表,然后选择工作簿。在右上角的下拉列表中,将显示所有事件。选择所需的内容,该事件的骨架代码将为您编写。
每个事件都有一个固定的过程名称。这些是以workbook_开头的保留子例程名称。您不能将它们用于其他子例程(可以,但是它们将是常规子例程)。
重要提示:该列表中的每个子例程将在指定的事件上运行。
_一种类型的工作簿事件过程只能在一个工作簿上编写一次。如果您在一个工作簿中编写两个相同的事件处理过程,则将导致错误,并且不会执行任何操作。
当然,该错误将是模棱两可的子例程。_
让我们简要地了解每个事件。
-
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。
-
Workbook_Activate()事件激活包含工作簿的事件代码时,将触发此事件。此事件的骨架代码为:
Private Sub Workbook_Activate() End Sub
一个简单的示例是在选择工作簿时显示其名称。
Private Sub Workbook_Activate() MsgBox "You are on workbook " & Activeworkbook.Name End Sub
一旦您进入包含此代码的工作簿,该事件就会运行,并显示一条消息“您在工作簿名称上”(在我的情况下是sheet2)。
-
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
-
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
-
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
-
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
-
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
-
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函数这是仪表板的另一个重要功能。这可以帮助您汇总特定条件下的值。