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

Excel VBA复制筛选数据至新工作表报错:成员或数据成员未找到

解决VBA复制筛选可见数据时的“成员或数据成员未找到”错误

错误根源

代码中存在拼写错误:将VBA内置常量xlCellTypeVisible误写为x1CellTypeVisible(用数字1代替了字母l),VBA无法识别这个不存在的成员,因此抛出“成员或数据成员未找到”的错误。

此外代码还有两处潜在问题,一并修正:

  1. 直接用Workbooks("文件名")获取工作簿时,若文件未打开会直接触发运行时错误,而非返回Nothing,需要优化判断逻辑。
  2. 原代码复制可见区域的方式可能包含无效空行,需调整可见区域的选取逻辑。

修正后的完整代码

Sub GrabFilteredData()
    Dim ws As Worksheet
    Dim rngFiltered As Range
    Dim rngCopy As Range
    Dim wsNew As Worksheet
    Dim lastRow As Long
    Dim wb As Workbook
    
    ' 安全获取工作簿:避免文件未打开时直接报错
    On Error Resume Next
    Set wb = Workbooks("PricingFormatting.xlsx") ' 替换为你的实际文件名
    On Error GoTo 0
    
    If Not wb Is Nothing Then
        Set ws = wb.Sheets("Data") ' 替换为你的实际工作表名
        
        If ws.AutoFilterMode Then
            Set rngFiltered = ws.AutoFilter.Range
            
            ' 检查是否有可见数据(排除表头)
            On Error Resume Next
            Set rngCopy = rngFiltered.Offset(1).SpecialCells(xlCellTypeVisible)
            On Error GoTo 0
            
            If Not rngCopy Is Nothing Then
                ' 添加新工作表
                Set wsNew = wb.Sheets.Add
                ' 粘贴可见数据
                rngCopy.Copy wsNew.Cells(1, 1)
                
                ' 清除原工作表筛选
                ws.AutoFilterMode = False
                wsNew.Activate
                
                MsgBox "筛选后的数据已复制到新工作表。"
            Else
                MsgBox "当前筛选后无可见数据。"
            End If
        Else
            MsgBox "未应用筛选。"
        End If
    Else
        MsgBox "未找到指定工作簿。"
    End If
End Sub

关键修改说明

  • 修正所有x1CellTypeVisible为xlCellTypeVisible,确保VBA能识别内置常量。
  • 新增On Error Resume Next+On Error GoTo 0的错误捕获逻辑,安全获取工作簿和可见数据范围,避免意外报错。
  • 调整可见数据选取逻辑:直接对表头下方区域应用SpecialCells(xlCellTypeVisible),精准获取需要复制的可见数据,避免无效空行。

内容的提问来源于stack exchange,提问作者Chua Zhng Yang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 03:37:34