Excel 方法';套用;对象的';排序';对包含数据的表进行排序时失败

Excel 方法';套用;对象的';排序';对包含数据的表进行排序时失败,excel,vba,Excel,Vba,我有以下代码,用于在多张图纸上格式化多个表。现在,当尝试对没有数据的表进行排序时,它给出了标题中提到的错误。否则,它就可以正常工作 Dim sht as worksheet Dim Tbl as Listobject For Each Sht In Worksheets If Sht.Name <> "Original" Then Set Tbl = Sht.ListObjects(1) With Tbl .List

我有以下代码,用于在多张图纸上格式化多个表。现在,当尝试对没有数据的表进行排序时,它给出了标题中提到的错误。否则,它就可以正常工作

Dim sht as worksheet
Dim Tbl as Listobject

For Each Sht In Worksheets
If Sht.Name <> "Original" Then
    Set Tbl = Sht.ListObjects(1)
    

    
    With Tbl
    .ListColumns("Pass/fail").Range.Cut
    Tbl.Range(1, 1).End(xlToRight).Offset(0, 1).Insert shift:=xlToRight
    End With
    
    With Tbl
    .ListColumns("Persons for corrective actions").Range.Cut
    Tbl.Range(1, 1).End(xlToRight).Offset(0, -1).Insert shift:=xlToRight
    End With
    
    With Tbl
    .ListColumns("Created By").Range.Cut
    Tbl.Range(1, 1).End(xlToRight).Offset(0, -11).Insert shift:=xlToRight
    End With
    
    With Tbl
    .ListColumns("Description of findings").Range.Cut
    Tbl.Range(1, 1).End(xlToRight).Offset(0, -10).Insert shift:=xlToRight
    End With
    
    With Sht
    .Range("C:F").EntireColumn.Delete
    .Range("G:H").EntireColumn.Delete
    .Range("K:K").EntireColumn.Delete
    End With
    
    With Tbl.Sort.SortFields
            .Clear
            .Add Key:=Tbl.ListColumns("Planned closing date for action").DataBodyRange, _
                 SortOn:=xlSortOnValues, _
                 Order:=xlAscending, _
                 DataOption:=xlSortNormal
    End With
    With Tbl.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

Tbl.DataBodyRange.AutoFilter field:=Tbl.ListColumns("Pass/fail").Index, Criteria1:="FAIL"

Sheets.Add After:=Sht

End If
Next Sht

所以我的问题是,当一个表上没有数据时,如何使其工作?

您可以检查该表是否包含任何行。可以使用属性
.ListRows.Count
检索行数

if Tbl.ListRows.Count > 0 Then
    With Tbl.Sort.SortFields
        .Clear
        .Add Key:=Tbl.ListColumns("Planned closing date for action").DataBodyRange, _
             SortOn:=xlSortOnValues, _
             Order:=xlAscending, _
             DataOption:=xlSortNormal
    End With
    With Tbl.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
       .Apply
    End With
End If

正是我想要的。谢谢
if Tbl.ListRows.Count > 0 Then
    With Tbl.Sort.SortFields
        .Clear
        .Add Key:=Tbl.ListColumns("Planned closing date for action").DataBodyRange, _
             SortOn:=xlSortOnValues, _
             Order:=xlAscending, _
             DataOption:=xlSortNormal
    End With
    With Tbl.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
       .Apply
    End With
End If