Excel实战技巧18:自动设置动态选取标记
微信公众号:
excelperfect
引子:
本文为学习
excelhero.com中的技巧文章《
Excel Dynamic Checkmark
》整理的学习笔记。
Daniel Ferry
总是以其精湛的
VBA技术和创造力制作出令人惊叹的作品,真是值得好好研学,反复体味。因为每一次的学习,不仅会让你感受到
Excel的强大和作者想像力的丰富,而且最重要的是能够提升你的技能。
图
1
看到了吗?当双击相关单元格时,单元格中的标记会循环变化。下面,我就来详细介绍一下实现这种技巧的方法。
图
1所示的工作表名为“
list”,在单元格区域
B5:C12中的表的名称为“
BucketList”,在单元格区域
E5:F12中的表的名称为“
BucketListBasic”,在单元格区域
H5:I12中的表的名称为“
BucketListProgress”。此外,将单元格
B15命名为“
alpha_round_robin”。
另外,还定义了下列名称。
名称:
checkmark_range
引用位置:
=list!$B$6:$B$12,list!$E$6:$E$12,list!$H$6:$H$12,alpha_round_robin
名称:
rr_0
引用位置:
={1,""}
名称:
rr_1
引用位置:
={1,0,""}
名称:
rr_2
引用位置:
={0,1,2,3,4}
名称:
rr_3
引用位置:
=TRANSPOSE(CHAR(ROW(list!$65:$90)))
很显然,名称
rr_3生成的数字对应着大写字母的
ANSI编码。
设置条件格式如下:
在单元格区域
B6:B12中的条件格式规则如图
2所示。
图
2
在单元格区域
E6:E12中的条件格式规则如图
3所示。
图
3
在单元格区域
H6:H12中的条件格式规则如图
4所示。
图
4
由于是双击单元格来循环显示图标,因此需要用到工作表事件
Worksheet_BeforeDoubleClick:
Private SubWorksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
CellRoundRobin Target, [checkmark_range],[{"rr_1";"rr_0";"rr_2";"rr_3"}],Cancel, True
End Sub
积极的情绪,自信的孩子
作者:[美] 肯尼斯?巴里西(Kenneth Barish, Ph.D.)
当当
广告
购买
事件中调用的子过程
CellRoundRobin:
Public SubCellRoundRobin(rTarget As Range, _
rValidRange As Range,_
vRoudRobinQue AsVariant, _
Optional bCancel AsBoolean, _
OptionalbDisableDragandDrop As Boolean)
Dim i As Long, L As Long, U As Long
On Error Resume Next
"
单元格数超过
1
个
,
或者双击的单元格不在定义的区域内
,
退出程序
If rTarget.Cells.Count > 1 Then Exit Sub
If Intersect(rTarget, rValidRange) IsNothing Then Exit Sub
"
判断数组是否为二维数组
If GetArrayDimesions(vRoudRobinQue) = 2Then
"
在单元格区域块间循环
For i = 1 To rValidRange.Areas.Count
"
定位到相应的单元格区域
If Not Intersect(rTarget,rValidRange.Areas(i)) Is Nothing Then
"
将数组中的名称代表的数组赋值
vRoudRobinQue =Evaluate(vRoudRobinQue(i, 1))
Exit For
End If
Next
End If
"
获取数组的下限和上限
L = LBound(vRoudRobinQue)
U = UBound(vRoudRobinQue)
With Application
If bDisableDragandDrop Then.CellDragAndDrop = False
"
比较相应的值并获取索引
For i = L To U
If rTarget = vRoudRobinQue(i) AndLen(rTarget) = Len(vRoudRobinQue(i)) Then Exit For
Next
i = i + 1
If i > U Then i = L
"
获取数组中对应的值
rTarget = vRoudRobinQue(i)
bCancel = True
End With
End Sub
"
判断数组的维数
Public FunctionGetArrayDimesions(vArray) As Long
Dim i As Long
On Error GoTo ErrorHandler
Do
i = i + 1
Loop While UBound(vArray, i)
ErrorHandler:
GetArrayDimesions = i - 1
End Function
由于在程序中改变了拖拉单元格时的设置,因此在关闭工作簿前恢复该设置:
Private SubWorkbook_BeforeClose(Cancel As Boolean)
Application.CellDragAndDrop = True
End Sub
有兴趣的朋友可以在完美
Excel微信公众号底部发送消息:
动态标记
下载示例工作簿。
也可以在
DanielFerry
的博客中下载:
http://www.excelhero.com/blog/2011/03/excel-dynamic-checkmark.html
欢迎分享本文,转载请注明出处。
欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。
- 好身材都不是一朝一夕就练出来的学会其中的技巧才会让你事半功倍
- “东方—2018”战略演习:中方参演官兵话实战
- 医生手绘示意图普及急救常识 希望精进绘画技巧展现更多
- 汇总目录|别找了,你需要的excel教程全在这里!按时更新……
- 试用期就破格升职加薪?这位95后做的excel图表遭曝光……
- 你会用excel中这5个明星快捷键吗?
- excel函数避坑指南,建议收藏!【Excel教程】
- 5个让你工作效率飞升的常用必会Excel技巧【Excel教程】
- 曾被高手们玩坏的Excel超级表【Excel教程】
- 【直播预告】今晚8点Excel极速贯通班21期开课