VBA报错Method Range of Object_Worksheet:排序后高级筛选复制失效
问题根因
你新增的排序代码存在不稳定写法,导致后续高级筛选的源区域状态异常,具体问题如下:
- 未给排序用到的
Range("EMtabel")、Range("a2")显式绑定wsEM工作表,依赖Select后的激活状态极不可靠,ScreenUpdating = False状态下工作表激活逻辑可能不符合预期,导致排序操作作用到了错误的区域/工作表,破坏了EMtabel的结构状态,后续高级筛选自然失效。 - 混用了工作表级
Sort对象和Range级Sort方法,多余的SortFields.Clear操作可能清除了结构化表自带的排序配置,引发异常。 - 对结构化表(命名表)直接调用
Range.Sort的写法兼容性差,远不如直接操作表对象的Sort方法稳定。
修正后代码
Option Explicit Sub GetDataForSlicersSel() Dim wsAF As Worksheet Dim wsEM As Worksheet Dim wsEI As Worksheet Dim wsOP As Worksheet Dim wsPG As Worksheet Dim wsRK As Worksheet Dim wsKM As Worksheet Dim wsBK As Worksheet Dim wsVE As Worksheet Dim wsRE As Worksheet Dim wsCP As Worksheet Dim loEM As ListObject ' 定义EMtabel表对象 Set wsAF = Sheets("afblijven") Set wsEM = Sheets("1721 Energiemeters") Set wsEI = Sheets("2704 E-installatie OA") Set wsOP = Sheets("output") Set wsPG = Sheets("Projectgegevens") Set wsRK = Sheets("2601 Regelkast-OVK") Set wsKM = Sheets("2611 Klein Materiaal") Set wsBK = Sheets("2614 Bekabeling OA") Set wsVE = Sheets("2621 Veldapparatuur") Set wsRE = Sheets("2634 Regelinstallatie OA") Set wsCP = Sheets("1711 Circulatiepompen") Set loEM = wsEM.ListObjects("EMtabel") ' 绑定结构化表 Application.ScreenUpdating = False ' 对EMtabel按A列排序,不需要Select任何工作表 With loEM.Sort .SortFields.Clear .SortFields.Add Key:=loEM.ListColumns(1).DataBodyRange, SortOn:=xlSortOnValues, Order:=xlAscending .Header = xlYes .Apply .SortFields.Clear End With ' 高级筛选部分不需要修改,因为已经显式绑定了工作表 wsEM.Range("EMtabel[#All]").AdvancedFilter _ Action:=xlFilterCopy, _ CriteriaRange:=wsAF.Range("Critslicers"), _ CopyToRange:=wsOP.Range("ExtractSlicersEM"), _ Unique:=False Application.ScreenUpdating = True End Sub
额外验证点
如果修改后仍有问题,可按以下顺序排查:
- 确认排序后
EMtabel的表头没有被修改、没有出现合并单元格等异常结构 - 确认
wsAF.Range("Critslicers")的表头和EMtabel对应表头完全一致,没有多余空格 - 确认
wsOP.Range("ExtractSlicersEM")的表头完整,没有和其他数据重叠
内容的提问来源于stack exchange,提问作者Wilco
相关产品推荐
相关产品推荐

