VBA中跳转单元格后如何返回原激活单元格?现有代码运行报错求助
报错原因
RefersToRange是VBA中Name对象的专属属性,你声明的sac本身就是Range类型,并不具备该属性,直接调用必然触发运行时错误。- 若删除
RefersToRange后仍然运行失败,大概率是你实际业务代码的中间操作切换了工作表/工作簿,当sac所属的工作表不是当前激活工作表时,直接对跨表Range执行Select也会触发错误。
最简修复代码
如果必须保留选中操作的逻辑,修正后的可运行代码如下:
Sub try_1() Dim sac As Range ' 存储原始激活单元格 Set sac = ActiveCell ' 替换为你实际需要执行的单元格操作逻辑 ActiveCell.Offset(0, 2).Select ' 切回原始激活单元格,兼容跨表操作场景 sac.Parent.Activate sac.Select End Sub
更优实现方案(推荐)
VBA操作单元格完全不需要依赖Select,直接对Range对象执行操作即可,全程不会改动当前选中状态,也就不需要额外存储和切回原始激活单元格,逻辑更简洁、执行性能更好:
Sub 无Select优化版() ' 示例:给偏移2列的单元格赋值,全程不改变当前选中状态 ActiveCell.Offset(0, 2).Value = "你需要的操作结果" End Sub
内容的提问来源于stack exchange,提问作者R. Peek
相关产品推荐
相关产品推荐

