前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Excel事件示例(二)

Excel事件示例(二)

作者头像
无言之月
发布2019-10-13 16:15:53
8550
发布2019-10-13 16:15:53
举报

本节将再介绍两个事件示例,代码会尽量分析的详细些帮助理解。重在代码的逻辑和用法。

1、锁定单元格的值。

Excel工作表中有时有单元格的值希望被锁定,输入密码后才能修改,通常我们使用”审阅“的“保护工作簿”功能来实现,那下面通过vba代码也来实现一下。

在thisworkbook模块中首先定义模块级变量data(由于两个过程均要调用),用于储存选择的单元格的值。(由于不确定类型,就定义为变体型。)

Dim data

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

data = Target.Value

End Sub

选择Worksheet_SelectionChange事件,选择的单元格时,将target.value值赋值给data变量。用于储存原始值。

Private Sub Worksheet_Change(ByVal Target As Range)

Dim i

If Not Application.Intersect(Target, Range("a1:a7")) Is Nothing Then

i = InputBox("请输入密码")

If i = 123456 Then

Exit Sub

Else

MsgBox "密码错误,请勿修改单元格的值"

Application.EnableEvents = False

Target.Value = data

Application.EnableEvents = True

End If

End If

End Sub

再新建Worksheet_Change事件,当单元格被修改是触发。(要限制单元格为A1:A7区域)

定义个变量i,通过Application.Intersect(Target, Range("a1:a7"))来判断修改的单元格是否有公共部分,再前面加not来表示否定,所以这句的逻辑实际变成如果有公共部分的时候。就弹出输入框要求输入密码,如果密码正确就退出Worksheet_Change事件过程,就可以修改。

如果密码错误,就提示密码错误,然后Application.EnableEvents的值设为false,防止后面Target.Value = data恢复原值时再一次触发change事件。改完后再恢复Application.EnableEvents为true。

2、备份单元格修改记录

要求在前两个表格的单元格中修改的内容时,将修改完整记录和修改时间在汇总表中保留记录。(效果如下图所示,只演示表格1。)

具体代码分析如下,在表格1中先创建事件worksheet_selectionchange事件

Dim i

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

i = Target.Value

End Sub

定义了过程级变量i,通过worksheet_selectionchange事件,用变量i保存单元格的初始值。

然后创建worksheet_change事件,在输入代码如下。

Private Sub Worksheet_Change(ByVal Target As Range)

Dim j As Long, k, t As Date

j = Worksheets("汇总表").Range("a1045576").End(xlUp).Row

k = Target.Address & "由 " & i & "改为 " & Target.Value

t = Now()

Worksheets("汇总表").Range("a" & j).Offset(1, 0).Value = k & " 时间" & t

End Sub

由于要将“表格1”中更改的内容保存到“汇总表”的A列,首先通过range单元格的end属性来获得有数据的最后一行的行号。赋值给长整型变量 j。

然后将单元格的地址、单元格原始值i,还有单元格现在的值组成字符串赋值给变量k。把当前的时间赋值给变量t。

最后通过单元格offset属性,在“汇总表”A列的有数值的最后一行行的下一行填入变量k和变量t。

示例中只是在“表格1“的模块中写入了代码,”表格2“中也写入类似的代码。(实际操作中为了区分开,可以将“表格2”的改动写在汇总表的B列,或者在变量k中直接加入不同的工作表的名称即可。)


本节介绍两个事件的综合示例,涉及到触发区域的判断,触发事件后的条件判断,事件的开启和关闭,单元格的end属性offset属性的应用。祝大家学习快乐。


本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-04-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Excel和Access学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云代码分析
腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,支撑团队传承代码文化。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档