求助:VBA宏运行报错‘Method 'Sort' of object '_Worksheet' failed’
VBA排序报错:Run-time error '2147352560 (80020010)' 解决方法
你遇到的报错信息:
Run-time error '2147352560 (80020010)': Method 'Sort' of object '_Worksheet' failed
你的原代码:
Cells.Select ActiveWorkbook.Worksheets("aaextractadj").Sort.SortFields.Clear ActiveWorkbook.Worksheets("aaextractadj").Sort.SortFields.Add Key:=Range( _ "B2:B80"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _ xlSortNormal With ActiveWorkbook.Worksheets("aaextractadj").Sort .SetRange Range("A1:AC500") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With
错误原因分析
- Range对象未绑定工作表:代码里的
Range("B2:B80")和Range("A1:AC500")没有明确关联到目标工作表"aaextractadj",如果当前活动工作表不是它,就会导致引用区域和排序工作表不匹配,触发报错。 - 冗余的
Cells.Select:这行代码对排序毫无帮助,反而可能引发上下文冲突。 - Key范围与SetRange不匹配:Key指定的是B2:B80,但SetRange是A1:AC500,Key的范围必须完全包含在待排序区域内,且要和表头设置(
Header = xlYes)对应。
修复后的代码
Dim ws As Worksheet Set ws = ActiveWorkbook.Worksheets("aaextractadj") ' 清空原有排序规则 ws.Sort.SortFields.Clear ' 添加排序字段,明确绑定目标工作表的Range ws.Sort.SortFields.Add Key:=ws.Range("B2:B500"), _ SortOn:=xlSortOnValues, _ Order:=xlAscending, _ DataOption:=xlSortNormal ' 执行排序 With ws.Sort .SetRange ws.Range("A1:AC500") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With
关键修改说明
- 用变量
ws指代目标工作表,避免重复书写,同时确保所有Range都属于该工作表。 - 删除了无用的
Cells.Select。 - 将Key的范围调整为
ws.Range("B2:B500"),和SetRange的行范围(1-500)匹配,保证排序字段在待排序区域内。
若仍报错,可排查:
- 确认"aaextractadj"工作表确实存在于当前活动工作簿中。
- 检查待排序区域是否有合并单元格,合并单元格会导致排序失败。
- 确保Excel宏安全设置允许执行该代码。
内容的提问来源于stack exchange,提问作者GerardoL
相关产品推荐
相关产品推荐

