【Excel VBA基础编程】边玩边学:秒懂偏移量引用新区域,这不就是俄罗斯方块的雏形吗?
- 2026-09-21 23:19:33
总是听到或看到有人问,编程好学吗?如何入门?多久能学会?它能做些什么?怎么写代码呀?执行过程中出问题了谁能帮帮我...如果你也有类似的问题那就赶快关注我的公众号,一起学起来吧!
在Excel VBA编程中,Union函数和Offset属性是处理单元格区域(Range对象)的两个核心工具,它们分别解决了“区域组合”与“相对定位”这两大关键需求,在数据处理中发挥着重要作用
但是枯燥的语法规则高高在上,书本上学会了,一到要用时却总觉得隔着最后一层窗户纸。接下来是我为大家精心准备的学习案例:彻底抛开死记硬背模式,人人能上手,还能马上看到效果,你学编码的热情有没有被激发出来呢

效果展示
首先把它们“捆绑”在一起,变成一个整体,再把背景色涂成统一的橙色
接着,就是让它在方向键的控制下动起来。比如,当按向下键时,会把这个“积木块”整体下移一行,与此同时,我们要清掉原来位置的橙色,在新的位置重新涂上同样的颜色。一擦一涂之间,“积木”下落的动作就表现出来了
而这背后依靠的其实就是 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
工作表代码使用说明:
打开你的.xlsm文件
按下 Alt + F11 快捷键,打开VBA编辑器
在左侧选择工作表,如Sheet3,双击“Sheet3”工作表,右侧会打开其对应的代码窗口,将两个工作表事件代码复制粘贴到此

2.2 标准模块代码
在指定工作表中(如Sheet3)通过对指定区域设置底色,绘制一块“L”形状的“积木块” 实现在Worksheet_Activate事件中方向键绑定的4个宏代码,让“积木块”根据按键执行对应的动作
Public blockRange As RangeSub Block_Init()Dim ws As WorksheetSet 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 RangeSet newRange = blockRange.Offset(-1, 0)blockRange.Interior.ColorIndex = xlNone '擦除底色newRange.Interior.Color = RGB(255, 165, 0) ' 设置为橙色Set blockRange = newRangeEnd SubSub MoveDown()Dim newblock As RangeSet newRange = blockRange.Offset(1, 0)blockRange.Interior.ColorIndex = xlNone '擦除底色newRange.Interior.Color = RGB(255, 165, 0) ' 设置为橙色Set blockRange = newRangeEnd SubSub MoveLeft()Dim newblock As RangeSet newRange = blockRange.Offset(0, -1)blockRange.Interior.ColorIndex = xlNone '擦除底色newRange.Interior.Color = RGB(255, 165, 0) ' 设置为橙色Set blockRange = newRangeEnd SubSub MoveRight()Dim newblock As RangeSet newRange = blockRange.Offset(0, 1)blockRange.Interior.ColorIndex = xlNone '擦除底色newRange.Interior.Color = RGB(255, 165, 0) ' 设置为橙色Set blockRange = newRangeEnd Sub
标准模块代码使用说明:
VBA边界界面,在菜单栏选择 “插入” -> “模块”,将上述代码粘贴到新模块中
回到Excel中的Sheet3工作表,工作栏中依次选择【开发工具】【插入】【表单控件】,添加一个按钮,命名为“初始化”,关联宏代码Block_Init(添加按钮时会有提醒,选中宏代码关联即可)

以上操作步骤完成后,点击“初始化”后,我们就可以配合着方向键盘的操作,实时监控区域块的移动了

结束语
好了,今天的分享到此结束了,咱们下期继续!
本公众号一直在不间断地分享免费的编程案例和实用技巧。无论您是用来提升自动化办公效率还是想提升自我,请关注我的公众号,解锁更多的编程知识