分享

【VBA初学者教程】- 第一章 VBA入门知识:使用Excel对象的事件

 L罗乐 2017-09-15


        上一期VBA入门知识为大家介绍的是如何在Visual Basic中使用Excel工作表函数,各位小伙伴都学会了吗?刚好前两天SUT学习交流群中有位小伙伴咨询了一个问题,该问题的解决方法也有小伙伴解决了,截图如下:



        东阳这位小伙伴给出的代码如下:


Dim old_v As Long

'当用户更改工作表中的单元格,或外部链接引起单元格的更改时触发此事件

Private Sub Worksheet_Change(ByVal Target As Range)

    With Target

        If .Address = '$A$1' Then

            Application.EnableEvents = False

            .Value = old_v .Value

            old_v = .Value

            Application.EnableEvents = True

        End If

    End With

End Sub

'当工作表上的选定区域发生改变时,将触发本事件

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    With Target

        If .Address = '$A$1' Then

            old_v = .Value

        ElseIf .Address = '$A$2' Then

            .Offset(-1).Select

        End If

    End With

End Sub

' 当用鼠标右键单击某工作表时触发此事件,此事件先于默认的右键单击操作

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

    With Target

        If .Address = '$A$1' Then

            old_v = 0

            .ClearContents

            Cancel = True

        End If

    End With

End Sub


        代码演示如下,详见如下动态图(右键鼠标可以清空单元格内容):



        上面的一段代码就用到了几个常用的事件,其实还有其他更多的事件。事件大体可以分为两类,一类是工作簿事件,另一类是工作表事件

        工作簿事件:当工作簿更改、工作簿中的任何工作表更改、加载宏更改或数据透视表更改时,将引发工作簿事件。工作簿上的事件在默认情况下是可用的。工作簿对象事件一览表如下图所示:



        工作表事件:当工作表激活、工作表中的任何单元格更改、数据透视表更改时,将引发工作表事件。工作表上的事件在默认情况下是可用的。工作表对象事件一览表如下图所示:



        这么多事件,难道都需要记住每个事件的名称和用法吗?当然不用,名称和参数都可以使用Excel的VBE自动生成,具体操作如下:



        工作表、图表工作表和工作簿事件处理过程对任意打开的工作表或工作簿都有效。如果要为嵌入式图表、查询表或 Application 对象编写事件处理过程,则必须在类模块中用 WithEvents 关键字创建新的对象。

        可用 EnableEvents 属性激活或禁用事件。例如,使用 Save 方法保存工作表时,将引发 BeforeSave 事件。可在调用 Save 方法之前将 EnableEvents 属性设置为False,以防止该事件的引发。具体代码如下:


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

    MsgBox '即将保存工作簿~'

End Sub


'禁止BeforeSave事件触发

Sub sutTest()

    Application.EnableEvents = False

    ThisWorkbook.Save

    Application.EnableEvents = True

End Sub


        代码演示如下动态图所示:



        还记得文章开头那位小伙伴写的代码里面就用到了这个 EnableEvents 属性来禁用工作表Change事件。等单元格值从新计算后,再启用该事件。如果不这么做,更改完单元格A1的值后,代码将进入死循环,表现出来的就是你的Excel工作簿处于假死状态~感兴趣的可以试试,测试之前请保存好Excel文档!!!


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多