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