VBA排序报错Run-time Error '1004':排序引用无效问题求助
VBA排序运行时错误'1004'的解决方法
问题根源
你代码里的Key1:=Range("A1")这类引用没指定具体工作表,默认会用当前活动工作表的单元格。当执行sht2的With块时,如果当前活动表不是sht2,Key指向的单元格就不在sht2.Range("A1").CurrentRegion范围内,直接触发"排序引用无效"的错误。sht3之前能正常运行,大概率是因为执行那段代码时它刚好是活动工作表,运气好没触发问题。
修复代码
给所有Sort的Key参数加上工作表限定,利用With块的对象前缀,把Range("A1")改成.Range("A1"),确保Key指向当前With块对应的工作表单元格:
'Dim sht2 as worksheet, sht3 as worksheet Set sht2 = thiswb.Sheets("Tracking Report") Set sht3 = thiswb.Sheets("New Extract") 'sorting block With sht3.Range("A1").CurrentRegion 'secondary here .Sort Key1:=.Range("A1"), Key2:=.Range("C1"), Header:=xlYes 'priority here .Sort Key1:=.Range("M1"), Key2:=.Range("D1"), Key3:=.Range("I1"), Header:=xlYes End With With sht2.Range("A1").CurrentRegion 'Errors on next line .Sort Key1:=.Range("A1"), Key2:=.Range("C1"), Header:=xlYes .Sort Key1:=.Range("M1"), Key2:=.Range("D1"), Key3:=.Range("I1"), Header:=xlYes End With
额外排查点
如果修复后还是报错,检查这两点:
- 确认
sht2的CurrentRegion范围内,表头行(第一行)的对应列(A、C、M、D、I列)没有空值或重复的表头内容 - 检查数据区域是否存在合并单元格,合并单元格会破坏排序的引用范围,导致1004错误
内容的提问来源于stack exchange,提问作者Arktik
相关产品推荐
相关产品推荐

