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

Excel VBA按单元格值复制行到新工作表报438错误求解

错误原因与修复方案

核心错误点

  • 拼写错误:Application.WorkseetFunction 缺少字母h,正确写法为Application.WorksheetFunction
  • 循环索引错误:遍历单元格时错误使用列标识O作为索引,你的循环变量为C,应该改为xRg(C)才能正确读取O列每行的内容
  • 内置常量拼写错误:VBA内置常量的前缀是小写字母L,不是数字1,你写的x1Yes、x1CellTypeBlanks、x1ShiftUp全部错误,正确写法为xlYes、xlCellTypeBlanks、xlShiftUp
  • 逻辑冗余:去重、删除空白行的逻辑放在了循环内部,每遍历一行就执行一次,完全没必要,放到循环外执行一次即可
  • 错误捕获逻辑不合理:On Error Resume Next会吞掉所有报错,反而不利于排查问题,不需要全局开启

修正后完整代码

Sub CopyRowBasedOnCellValue()
    Dim xRg As Range
    Dim A As Long
    Dim B As Long
    Dim C As Long

    A = Worksheets("Initials").UsedRange.Rows.Count
    B = Worksheets("Finals").UsedRange.Rows.Count

    If B = 1 Then
        If Application.WorksheetFunction.CountA(Worksheets("Finals").UsedRange) = 0 Then B = 0
    End If

    Set xRg = Worksheets("Initials").Range("O1:O" & A)

    Application.ScreenUpdating = False

    For C = 1 To xRg.Count
        If CStr(xRg(C).Value) = "proceed" Then
            xRg(C).EntireRow.Copy Destination:=Worksheets("Finals").Range("A" & B + 1)
            B = B + 1
        End If
    Next
    
    ' 循环结束后统一处理去重和空白行
    If B > 0 Then
        Worksheets("Finals").UsedRange.RemoveDuplicates Columns:=1, Header:=xlYes
        ' 仅删除空白行时临时开启错误捕获,避免无空白行时报错
        On Error Resume Next
        Worksheets("Finals").UsedRange.SpecialCells(xlCellTypeBlanks).Delete xlShiftUp
        On Error GoTo 0
    End If

    Application.ScreenUpdating = True
End Sub

额外说明

如果不需要区分大小写匹配(比如Proceed、PROCEED都算符合条件),可以把判断条件改为If UCase(CStr(xRg(C).Value)) = "PROCEED" Then即可。

内容的提问来源于stack exchange,提问作者PAbarca912

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 14:06:04