“union与offset函数应用,界面化的演示,一看就懂”总是听到或看到有人问,编程好学吗?如何入门?多久能学会?它能做些什么?怎么写代码呀?执行过程中出问题了谁能帮帮我...如果你也有类似的问题那就赶快关注我的公众号,一起学起来吧!
在Excel VBA编程中,Union函数和Offset属性是处理单元格区域(Range对象)的两个核心工具,它们分别解决了“区域组合”与“相对定位”这两大关键需求,在数据处理中发挥着重要作用
但是枯燥的语法规则高高在上,书本上学会了,一到要用时却总觉得隔着最后一层窗户纸。接下来是我为大家精心准备的学习案例:彻底抛开死记硬背模式,人人能上手,还能马上看到效果,你学编码的热情有没有被激发出来呢
通过“初始化”按钮,在工作表中指定一个“L”形状的Range区域,并将其背景涂成橙色。接着我们就可以通过键盘上的四个方向键,操纵这个“L”形状的Range区域进行移动如果通过行高和列宽设置,将工作表中的单元格设置成正方形,整个画风是不是就更像俄罗斯方块了呢?实现原理很简单,我们可以把涉及到的这4个单元格想象成一个“积木块”:而这背后依靠的其实就是 Union 绑定和 Offset 移动
在Worksheet_Activate(工作表激活)事件中绑定方向键及其对应的宏操作,使用的是VBA内置的、专门用于自定义键盘快捷键的Application.OnKey方法
另外,方向键绑定后会影响其他工作表/簿的正常使用,需要在Worksheet_Deactivate 事件中恢复按键的默认功能。即只在当前的工作表中才生效
参考代码:
'在工作表激活时绑定方向键Private Sub Worksheet_Activate() Application.OnKey "{UP}", "MoveUp" Application.OnKey "{DOWN}", "MoveDown" Application.OnKey "{LEFT}", "MoveLeft" Application.OnKey "{RIGHT}", "MoveRight"End SubPrivate Sub Worksheet_Deactivate() ' 当工作表失活时,恢复方向键的默认功能 Application.OnKey "{UP}" Application.OnKey "{DOWN}" Application.OnKey "{LEFT}" Application.OnKey "{RIGHT}"End Sub
工作表代码使用说明:
2.2 标准模块代码
- 在指定工作表中(如Sheet3)通过对指定区域设置底色,绘制一块“L”形状的“积木块”
- 实现在Worksheet_Activate事件中方向键绑定的4个宏代码,让“积木块”根据按键执行对应的动作
Public blockRange As RangeSub Block_Init() Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets("Sheet3") '工作表代码添加到哪个工作表,就填哪个 '初始化一个L形状的区域 Set blockRange = Union(ws.Range("C7"), ws.Range("C8"), ws.Range("C9"), ws.Range("D9")) blockRange.Interior.Color = RGB(255, 165, 0) ' 设置为橙色End Sub'以下4个宏代码,除了偏移量有变动,其他逻辑保持不变Sub MoveUp() Dim newblock As Range Set newRange = blockRange.Offset(-1, 0) blockRange.Interior.ColorIndex = xlNone '擦除底色 newRange.Interior.Color = RGB(255, 165, 0) ' 设置为橙色 Set blockRange = newRangeEnd SubSub MoveDown() Dim newblock As Range Set newRange = blockRange.Offset(1, 0) blockRange.Interior.ColorIndex = xlNone '擦除底色 newRange.Interior.Color = RGB(255, 165, 0) ' 设置为橙色 Set blockRange = newRangeEnd SubSub MoveLeft() Dim newblock As Range Set newRange = blockRange.Offset(0, -1) blockRange.Interior.ColorIndex = xlNone '擦除底色 newRange.Interior.Color = RGB(255, 165, 0) ' 设置为橙色 Set blockRange = newRangeEnd SubSub MoveRight() Dim newblock As Range Set newRange = blockRange.Offset(0, 1) blockRange.Interior.ColorIndex = xlNone '擦除底色 newRange.Interior.Color = RGB(255, 165, 0) ' 设置为橙色 Set blockRange = newRangeEnd Sub
标准模块代码使用说明:
以上操作步骤完成后,点击“初始化”后,我们就可以配合着方向键盘的操作,实时监控区域块的移动了
好了,今天的分享到此结束了,咱们下期继续!
本公众号一直在不间断地分享免费的编程案例和实用技巧。无论您是用来提升自动化办公效率还是想提升自我,请关注我的公众号,解锁更多的编程知识