今天在论坛上看到一个求助贴:[求助]给单元格添加注释 详细需求: 请大神帮忙,给单元格添加注释,注释内容来源其他表。请看附件。单元格数量可多可少,不固定。不知能否实现; 这是一个监考表,需要对监考老师所在单元格进行注释,注释内容为监考次数,必监科目,不监科目,当鼠标对准某个老师,就显示注释内容,鼠标移走了,注释也就删除了。
具体数据表格: 1、监考表,每个科目对应监考老师的姓名: 2、基础信息设置表,每个老师对应有监考次数,必监考科目、不监考科目,这两个字段是一个课程代码的数字组合,在批注中需要转成对应的课程名称: 关于添加单元格批注,我们分享过两个案例: 这个案例需要步骤还不少,正好我们前面分享过关于VBA模块化编程的文章,我们就拿这个例子来试一试,尽量“模块化” : 基本思路: 1、我们设置一个过程getDic,用来存放数据,主要是老师的姓名,对应批注的文本。(1)我们把“基础信息设置”表装入数组arr;由于表头字段包括换行、空格,我们用一个自定义函数textProcess来把上述特殊字符替换掉,使之成为一行纯文本,方便我们使用Pxy函数来定位字段。(2)我们循环arr,先把课程代码作为key、考试课程作为Item装入字典dic。(3)我们再循环arr,把老师的姓名作为装入字典,把对应批注文本作为Item。在这过程中,我们定义一个函数getSubject,根据“必监考科目”、“不监考科目”的代码来获取和个课程名称的字符串,用于组合成批注文本:Function getSubject(str As String, dic As Object) As String '//根据数字,查找对应的科目名称 Dim temp As String For i = 1 To Len(str) temp = temp & dic(Mid(str, i, 1)) Next getSubject = tempEnd Function 2、我们定义一个添加批注的过程:addComment(rng As Range, text As String),把指定文本添加到单元格批注。3、我们在工作表的Selection Change事件中,我们根据目标单元格,到dic中提取批注文本,并把这个文本添加到目标单元格的批注中。4、把与目标单元格相同的老师名称统一标色(这是需求文件中已有的代码)。1、“基础信息设置”表中,它的表头中包含空格、回车,给数据处理带来麻烦,建议表头字段还是要规范为宜。2、本来我是打算定义一个自定义函数getText,根据“监考表”中点击的单元格,直接循环数组,取得批注文本,但发现速度有一丁点儿慢,于是改为在字典中提取文本(把所有老师对应的批注文本都加入字典),仅在首次点击时加载字典,后面如果字典正常,就直接从字典中读取数据。
|