分享

Excel事件示例(一)

 L罗乐 2019-03-28

本节介绍两个事件示例,帮助大家学习理解事件的具体应用,代码会尽量分析的详细些帮助理解。

1、选中某个值时,用颜色标注同样的值。

示例一的效果如下,假如每周的值班如图,当在B1:C7单元格中选中一个值时,同样的值都会标注颜色。

具体代码如下,后面会逐段分析。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Range('b1:c7').Interior.ColorIndex = xlNone

If Application.Intersect(Target, Range('b1:c7')) Is Nothing Then

    Exit Sub

End If

If Target.Count > 1 Then

    Set Target = Target.cells(1)

End If

Dim rng As Range

For Each rng In Range('b1:c7')

    If rng.Value = Target.Value Then

        rng.Interior.ColorIndex = 34

    End If

Next

End Sub

代码的整体结构是Worksheet_SelectionChange事件。当单元格选择发生改变时,即触发事件将选中单元格传递到target参数。

Range('b1:c7').Interior.ColorIndex = xlNone

首先每次事件触发时都将B1:C7单元格的区域的设置重新设置为无色。

If Application.Intersect(Target, Range('b1:c7')) Is Nothing Then

    Exit Sub

End If

这段用于限制只有B1:C7的单元格区域选择改变时会触发SelectionChange事件。

Application.Intersect方法返回参数指定的多个单元格的公共区域,它的参数为两个以上的range单元格。代码中表示返回Target和Range('b1:c7')的公共区域。当选择超出B1:C7时,就没有公共区域即无结果,if判断is nothing 成立,执行exit sub 退出事件过程。

If Target.Count > 1 Then

    Set Target = Target.cells(1)

End If

这段是考虑如果选中多个单元格的情况,判断选中的单元格数量超过一个即Target.Count > 1,将Target.cells(1)选中,即选中的多个单元格区域最左上角的单元格,用set语句重新赋值给Target,这样就只有一个单元格的值。

Dim rng As Range

For Each rng In Range('b1:c7')

    If rng.Value = Target.Value Then

        rng.Interior.ColorIndex = 34

    End If

Next

这段代码就通过for each循环语句,遍历B1:C7单元格区域,当值与选中的单元格值相同时,设置该单元格的背景色。最后结束循环。(当下次事件触发时,会再次删除所有颜色。)

这是示例主要帮助大家如何去限制区域使用工作表事件,采用的方法也比较典型,希望有助于助理解。

2、每隔一分钟自动保存工作簿

在使用excel可能手一抖关闭时没保存,或者excel报错的情况,下面的案例就是文件被打开后让文件每隔一分钟自动保存一次。(代码中会涉及调用过程的知识。)

涉及定时或者间隔时间的时间可以想到application对象的ontime方法。

首先在工程资源管理窗口,插入一个模块,在模块中写入两个过程代码:

新建dingshi过程,通过application对象的ontime方法,设置现在起1分钟之后运行baocun过程。

新建baocun过程,设置ThisWorkbook.Save保存当前工作簿,然后通过call dingshi再次调用dingshi过程,这样又会再一分钟之后运行baocun,形成一个循环。

再换到thisworkbook模块中,新建workbook的open事件,然后通过Call dingshi调用dingshi过程即可实现。

这样当工作簿打开之后,运行dingshi过程,在1分钟之后运行baocun过程,baocun过程保存工作簿之后会再次调用dingshi过程,形成1分钟的循环保存。

大家可以编写代码尝试下,可以修改保存时间,还可以利用以前学过的workbook的saveas方法将文件另存。


本节介绍两个事件的综合示例,涉及到如何限制事件触发的区域,触发事件后的条件判断,如何调用过程等。希望介绍有助于理解。下节会再介绍两个综合示例,祝大家学习快乐。


Live and Learn

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

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多