VBA运行时错误1004:Range类Sort方法失败求助
问题分析与修复方案
潜在问题点
- 依赖
ActiveSheet和未限定的Range引用,一旦当前激活的工作表不是目标表,就会触发错误 - 没处理只有表头(
lastrow=1)的情况,这时执行排序会因没有数据行报错 Key1用了未绑定工作表的Range("C2"),不仅可能跨表引用错误,还会在无数据行时指向不存在的单元格
修复后的代码
Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets("目标工作表名称") '替换成实际的工作表名称 Dim lastrow As Long lastrow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row ' 只有存在数据行时才执行排序 If lastrow > 1 Then Dim WorkRange As Range Set WorkRange = ws.Range("A1:BB" & lastrow) WorkRange.Sort Key1:=ws.Range("C2"), Order1:=xlAscending, Header:=xlYes End If
核心优化点
- 明确指定目标工作表,彻底摆脱对
ActiveSheet的依赖,避免切换工作表引发的错误 - 增加
lastrow>1的判断,过滤掉仅表头的无效排序场景 - 将
WorkRange定义为Range对象而非字符串,更安全且便于后续维护 - 所有单元格引用都绑定到指定工作表,消除跨表引用的隐患
内容的提问来源于stack exchange,提问作者MrBarry
相关产品推荐
相关产品推荐

