如何用VBA宏返回指定范围内的最后一个活动单元格
实现方案
原有代码问题说明
你写的代码存在两个核心问题:
PrevCell是过程内局部变量,宏运行结束后变量就会被销毁,无法持久存储之前选中的单元格地址- 逻辑写死了先选中A2,没有动态监听你在指定范围内的选中操作,所以无法自动更新为A5这类新选中的单元格
实现逻辑
- 需要用模块级公共变量持久化存储指定范围内最后一次选中的单元格地址
- 借助工作表
SelectionChange事件自动更新存储的地址:每次选中单元格时,判断是否落在你指定的监视范围内,是则更新记录 - 跳转宏直接读取存储的地址执行选中操作即可
操作步骤
- 按
Alt+F11打开VBA编辑器,在左侧工程窗口找到你需要实现该功能的工作表(例如Sheet1),双击打开代码编辑页 - 先粘贴如下代码到代码编辑页的最顶部(声明公共参数):
' 存储指定范围内最后一次选中的单元格地址 Dim lastValidCellAddr As String ' 定义你的监视范围,按需修改即可 Const MONITOR_RANGE As String = "A1:A10"
- 继续粘贴选中监听事件代码:
Private Sub Worksheet_SelectionChange(ByVal Target As Range) ' 仅当选中的是单个单元格、且落在监视范围内时更新记录 If Target.Cells.Count = 1 And Not Intersect(Target, Me.Range(MONITOR_RANGE)) Is Nothing Then lastValidCellAddr = Target.Address End If End Sub
- 最后粘贴跳转宏代码:
Sub GoToLastValidCell() If lastValidCellAddr = "" Then MsgBox "还未选中过 " & MONITOR_RANGE & " 范围内的单元格", vbExclamation Exit Sub End If Me.Range(lastValidCellAddr).Select End Sub
使用说明
- 如需修改监视范围,直接改
MONITOR_RANGE常量后的范围字符串即可,比如改成"C2:F20" - 可以给
GoToLastValidCell宏绑定快捷键,之后按快捷键即可一键回到监视范围内最后一次选中的单元格 - 效果验证:先在A1:A10范围内选中A2,之后选任意范围外的单元格,运行宏自动跳回A2;再在范围内选中A5,跳走后运行宏自动跳回A5,完全符合需求
内容的提问来源于stack exchange,提问作者Alpaca
相关产品推荐
相关产品推荐

