Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >一起学Excel专业开发25:使用类模块创建对象4

一起学Excel专业开发25:使用类模块创建对象4

作者头像
fanjy
发布于 2019-11-13 04:55:48
发布于 2019-11-13 04:55:48
77000
代码可运行
举报
文章被收录于专栏:完美Excel完美Excel
运行总次数:0
代码可运行

在阅读本文之前,建议先阅读下面3篇文章:

1.一起学Excel专业开发22:使用类模块创建对象1

2.一起学Excel专业开发23:使用类模块创建对象2

3.一起学Excel专业开发24:使用类模块创建对象3

响应事件

类模块能够对事件进行响应,这也是它的一个强大的功能。

下面,我们接着前面文章中的示例进一步扩展,添加如下功能:

1.双击工作表中某单元格时,高亮显示与该单元格同类型的所有单元格。

2.右击工作表中某高亮显示的单元格时,取消所有同类型单元格的高亮显示。

3.当工作表中单元格被修改时,对应的CCell对象能自动更新。

要获取与对象相关的事件,一般有两个步骤:

1.在类模块中使用WithEvents声明一个对象类型的变量。

2.给该变量指定某对象的引用。

在CCells类模块的顶部,添加一条声明语句:

Private WithEvents mwksWorksheet AsExcel.Worksheet

此时,可以在该类模块的代码窗口顶部左上方的下拉列表中选择mwksWorksheet,单击其右上方的下拉列表,可以看到所捕获的事件,如下图1所示。

图1

我们选添加一个名为Worksheet的新属性,然后添加BeforeDoubleClick事件、BeforeRightClick事件和Change事件,以实现我们想要的功能。

在CCells类模块中新添加的代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'声明模块级事件处理变量
Private WithEvents mwksWorksheet As Excel.Worksheet
 
'添加新属性
Property Set Worksheet(wks As Excel.Worksheet)
   Set mwksWorksheet = wks
End Property
 
'捕获双击工作表单元格事件
Private Sub mwksWorksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
   If Not Application.Intersect(Target, mwksWorksheet.UsedRange) Is NothingThen
       Highlight mcolCells(Target.Address).CellType
       Cancel = True
   End If
End Sub
 
'捕获右击工作表单元格事件
Private Sub mwksWorksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
   If Not Application.Intersect(Target, mwksWorksheet.UsedRange) Is NothingThen
       UnHighlight mcolCells(Target.Address).CellType
       Cancel = True
   End If
End Sub
 
'捕获工作表单元格内容修改事件
Private Sub mwksWorksheet_Change(ByValTarget As Range)
   Dim rngCell As Range
   If Not Application.Intersect(Target, mwksWorksheet.UsedRange) Is Nothing Then
       For Each rngCell In Target.Cells
            mcolCells(rngCell.Address).Analyze
       Next rngCell
   End If
End Sub

然后,修改标准模块中的CreateCellsCollection过程代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Public Sub CreateCellsCollection()
   Dim clsCell As CCell
   Dim rngCell As Range
   
    '创建新的Cells集合
   Set gclsCells = New CCells
   Set gclsCells.Worksheet = ActiveSheet
   
    '对当前工作表中已使用区域中的每个单元格创建Cell对象
   For Each rngCell In Application.ActiveSheet.UsedRange
       gclsCells.Add rngCell
   Next rngCell
End Sub

好了!现在可以来在工作表中体验事件了。

首先,执行CreateCellsCollection过程,将当前工作表赋给事件处理对象。然后,在工作表中双击某单元格,你会发现同类型的单元格都改为相同的背景色,在其中某个单元格上右击,背景色消失。

图2

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

本文分享自 完美Excel 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
一起学Excel专业开发27:使用类模块创建对象6
这里,我们不再像《一起学Excel专业开发26:使用类模块创建对象5》中那样,在CCells类模块中引发ChangeColor事件,而是创建一个触发类模块来取代其引发事件。这里将创建4个触发类的实例,分别对应于4种不同的单元格类型,同时为每个Cell对象分配一个适当的实例,这意味着每个Cell对象只能接收一种消息。
fanjy
2019/11/15
7790
一起学Excel专业开发26:使用类模块创建对象5
类模块具有引发事件的能力,这也是它的另一个强大的功能。我们可以定义自已的事件,并在代码中引发这个事件,其他类模块也可以捕获这些自定义的事件并作出相应的响应。
fanjy
2019/11/14
7250
一起学Excel专业开发23:使用类模块创建对象2
在《一起学Excel专业开发22:使用类模块创建对象1》中,我们使用类模块创建了自已的对象CCell,通过这个对象可以创建任意多个对象实例,用来分析工作表或者多个区域中的单元格。
fanjy
2019/11/09
1.3K0
一起学Excel专业开发24:使用类模块创建对象3
在《一起学Excel专业开发23:使用类模块创建对象2》中,我们自定义的集合类存在两个方面的不足:
fanjy
2019/11/11
9690
一起学Excel专业开发24:使用类模块创建对象3
一起学Excel专业开发22:使用类模块创建对象1
在CCell类模块中,创建了一个由4个成员构成的公共枚举常量,每个枚举成员代表一种单元格类型,其值分别默认为0、1、2、3。使用枚举成员可以增强代码的可读性和可维护性,利用DescriptiveCellType属性可将枚举成员的值转换成易于理解的文本。
fanjy
2019/11/07
1K0
Excel事件示例(二)
Excel工作表中有时有单元格的值希望被锁定,输入密码后才能修改,通常我们使用”审阅“的“保护工作簿”功能来实现,那下面通过vba代码也来实现一下。
无言之月
2019/10/13
1K0
Excel VBA编程
在Excel中,数据只有文本,数值,日期值,逻辑值和错误值五种类型。但是在VBA中,数据类型跟Excel不完全相同。根据数据的特点,VBA将数据分为布尔型(boolean),字节型(byte),整数型(integer),单精度浮点型(single),双精度浮点型(double),货币型(currency),小数型(decimal),字符串型(string),日期型(date),对象型等等
全栈程序员站长
2022/08/11
46.8K0
Excel VBA编程
Excel事件示例(一)
本节介绍两个事件示例,帮助大家学习理解事件的具体应用,代码会尽量分析的详细些帮助理解。
无言之月
2019/10/13
8360
Excel VBA事件——Worksheet
这个事件的有个比较典型的应用场景,选择改变后,将选择的单元格所在行标上颜色,也就是所谓的聚光灯:
xyj
2020/07/28
3.4K0
Excel VBA事件——Worksheet
ExcelVBA运用Excel的【条件格式】(三)
表达式。添加 (类型、 运算符、 Expression1、 Expression2)
哆哆Excel
2024/07/12
2540
ExcelVBA运用Excel的【条件格式】(三)
Excel实战:使用VBA实现自动规划求解
规划求解可能是Excel中最好的功能之一,但它使用起来相当不便,本文探讨一种自动化实现这项功能的方法。
fanjy
2023/02/24
3.9K0
Excel实战:使用VBA实现自动规划求解
工作表事件示例:输入数据后锁定单元格
打开VBE,在工程资源管理器中双击该工作表名称打开其代码模块,在其中输入下面的代码:
fanjy
2024/06/18
2040
工作表事件示例:输入数据后锁定单元格
Excel事件(二)工作表事件
大家好,上节介绍了excel事件的基础知识,后面就按照事件的分类来介绍,本节将首先介绍vba程序开发中最常用的工作表事件。
无言之月
2019/10/13
3.8K0
ExcelVBA运用Excel的【条件格式】(二)
表达式。添加 (类型、 运算符、 Expression1、 Expression2)
哆哆Excel
2024/07/12
2960
ExcelVBA运用Excel的【条件格式】(二)
Excel实战技巧106:创建交互式的日历
引子:本文的内容整理自chandoo.org,略有调整。主要是学习作者制作这样一个工作簿的思路和做法,以及运用的Excel技术技巧,当然这个工作簿也有一些局限,例如,在同一个地方只能安排连续的2天,这是需要进一步改进的地方。
fanjy
2021/07/30
1.3K0
VBA实战技巧01: 在代码中引用动态调整单元格区域的5种方法
在VBA代码中,经常要引用单元格数据区域并对其进行操作。然而,如果对数据区域采用“硬编码”地址,那么当该区域大小变化时,必须修改相应的引用该区域的代码。本文整理了可以动态引用数据区域的5种方法,供编写代码时参考。
fanjy
2020/02/12
5K0
VB.NET Excel操作类(获取工作簿列表和工作表列表及工作表对象)
效果展示 引用excel类 Imports Microsoft.Office.Interop Excel类代码开始 Public Class Cls_excel 返回Excel对象
办公魔盒
2019/12/03
2.7K0
VB.NET Excel操作类(获取工作簿列表和工作表列表及工作表对象)
VBA技巧:记住单元格更改之前的值
当工作表单元格中的值被修改后,我需要将修改前的值放置到其右侧单元格中。例如,单元格A1中输入有数值1,当我将其内容修改为2之后,之前的数值1被放置到单元格B2中。可以使用工作表Change事件来实现。
fanjy
2024/03/26
6920
VBA技巧:记住单元格更改之前的值
VBA实战技巧:快速返回最后一次编辑的单元格
在有些情况下,我们可能需要快速返回到最后一次编辑的单元格。例如,最后一次编辑的单元格是单元格K112,然而我的当前单元格在单元格C1,如何定位这个最后编辑的单元格并快速返回到该单元格呢?
fanjy
2022/11/16
1K0
VBA实战技巧:快速返回最后一次编辑的单元格
Excel实战技巧59: 使用VBA让用户仅能在指定单元格或单元格区域中输入数字
通常,我们可以使用Excel的“数据验证”功能来设置指定单元格或单元格区域仅能输入指定范围的整数或者小数,如下图1所示。
fanjy
2019/11/07
2.6K1
Excel实战技巧59: 使用VBA让用户仅能在指定单元格或单元格区域中输入数字
推荐阅读
相关推荐
一起学Excel专业开发27:使用类模块创建对象6
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验