Excel VBA复制筛选数据至新工作表报错:成员或数据成员未找到
解决VBA复制筛选可见数据时的“成员或数据成员未找到”错误
错误根源
代码中存在拼写错误:将VBA内置常量xlCellTypeVisible误写为x1CellTypeVisible(用数字1代替了字母l),VBA无法识别这个不存在的成员,因此抛出“成员或数据成员未找到”的错误。
此外代码还有两处潜在问题,一并修正:
- 直接用
Workbooks("文件名")获取工作簿时,若文件未打开会直接触发运行时错误,而非返回Nothing,需要优化判断逻辑。 - 原代码复制可见区域的方式可能包含无效空行,需调整可见区域的选取逻辑。
修正后的完整代码
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
相关产品推荐
相关产品推荐

