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

VBA代码报错排查:类型不匹配(Error13)与对象缺失(Error424)

让我们逐个解决你在编写Import过程时遇到的这两个棘手问题:

问题1:类型不匹配错误(Error 13)

这个错误的核心原因是你把变量名取成了rows,而Rows是Excel对象模型里的内置属性(用来表示行集合),变量名和内置属性重名直接导致了识别混淆。另外,你的变量声明i, rows, r As Long写法有坑——在VBA里只有最后一个变量会被声明为Long,前面的i和rows会默认是Variant类型,这也加剧了类型不匹配的风险。

修正方案:

  1. 把变量rows改个不冲突的名字,比如totalRows;
  2. 修正变量声明,确保每个变量都明确指定类型;
  3. 遍历行时直接用Rows(i)即可(变量名不冲突后不会再混淆)。

修正后的删除空行代码片段:

' 修正变量声明,避免重名和类型模糊
Dim xSht As Worksheet, xWb As Workbook
Dim xFileDialog As FileDialog, f As Variant, i As Long, totalRows As Long, r As Long
Dim xStrPath As String, xFile As String
Dim y As Range

' ... 你的其他代码 ...

Set y = Range("A1:D2000")

' 从下往上遍历删除空行,避免跳过行
For i = y.Row + y.Rows.Count - 1 To y.Row Step -1
    If Application.WorksheetFunction.CountA(Rows(i)) = 0 Then
        Rows(i).EntireRow.Delete
    End If
Next i
问题2:对象缺失错误(Error 424)

这个错误是因为你用了不存在的ActiveWorksheet对象——正确的对象名是ActiveSheet。不过更稳妥的做法是直接引用目标工作表,而不是依赖Activate,因为激活操作很容易被用户操作或其他代码干扰而出错。

修正方案:

直接使用Worksheets("BY SHIFT")来操作排序,不需要先激活它:

修正后的排序代码片段:

' 不需要激活工作表,直接操作目标工作表的排序
With Worksheets("BY SHIFT")
    .Sort.SortFields.Clear
    .Sort.SortFields.Add2 Key:=.Range("C1"), SortOn:=xlSortOnValues, Order:=xlAscending
    .Sort.SortFields.Add2 Key:=.Range("B1"), SortOn:=xlSortOnValues, Order:=xlDescending
    With .Sort
        .SetRange .UsedRange
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End With

' 如果你偏好原来的写法,只需把ActiveWorksheet改成ActiveSheet:
' Worksheets("BY SHIFT").Activate
' ActiveSheet.UsedRange.Sort Key1:=Range("C1"), Key2:=Range("B1"), Header:=xlYes, _
' Order1:=xlAscending, Order2:=xlDescending

完整修正后的核心代码片段

Sub Import()

    Dim xSht As Worksheet, xWb As Workbook
    Dim xFileDialog As FileDialog, f As Variant, i As Long, totalRows As Long, r As Long
    Dim xStrPath As String, xFile As String
    Dim y As Range
    
    Dim iCntr
    Dim rng As Range
    Set rng = Range("A10:D20")

    Application.ScreenUpdating = False
   
    ' ... 你的其他代码 ...

    Set y = Range("A1:D2000")

    ' 修正后的删除空行逻辑
    For i = y.Row + y.Rows.Count - 1 To y.Row Step -1
        If Application.WorksheetFunction.CountA(Rows(i)) = 0 Then
            Rows(i).EntireRow.Delete
        End If
    Next i
        
    ' 修正后的排序逻辑
    With Worksheets("BY SHIFT")
        .Sort.SortFields.Clear
        .Sort.SortFields.Add2 Key:=.Range("C1"), SortOn:=xlSortOnValues, Order:=xlAscending
        .Sort.SortFields.Add2 Key:=.Range("B1"), SortOn:=xlSortOnValues, Order:=xlDescending
        With .Sort
            .SetRange .UsedRange
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    End With

    Worksheets("2718").Activate

    Application.ScreenUpdating = True

End Sub

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 10:05:26