You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 14:48:03