我正在尝试在删除条目后对表格进行排序。
Function last_row(sheet_name,col_to_check)
If sheet_name = "wl" Then
Set ws = Sheets("Membership Waiting List")
table_name = "waiting_list"
ElseIf 'this part is for other sheet names so will omit.
End If
last_row = ws.ListObjects(table_name).Range.Columns(col_to_check).Cells.Find("*",
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
End Function
Sub remove_and_refund()
Dim wl As Worksheet
Set wl = Sheets("Membership Waiting List")
w_last_row = last_row("wl",1) ' confirmed this gives the expected value
' code to remove entry is omitted but would be here
wl.Range("A3", "L" & w_last_row).Sort Key1:=wl.Range("A3", "A" & w_last_row),
Order1:=xlAscending
' confirmed that the two ranges are correct by using .Select
End Sub
问题是子在排序中包含
A2:L2
中的表格标题。
我已经对其他工作表中的表格使用了这种方法,但没有遇到这个问题,所以我认为这与范围是表格无关。
无需查找最后一行,只需使用
ListColumns
名称或位置即可。
在第一个过程中,我使用了列位置
.ListColumns(1)
,在第二个过程中,我使用了名称 .ListColumns("H4")
。
Public Sub Test()
With ThisWorkbook.Worksheets("Membership Waiting List").ListObjects("waiting_list")
.Range.Sort _
Key1:=.ListColumns(1), _
Order1:=xlAscending, _
Header:=xlYes, _
OrderCustom:=1, _
MatchCase:=False, _
Orientation:=xlTopToBottom
End With
End Sub
或者此方法会将排序的指标(不确定技术名称)添加到过滤器按钮:
Public Sub Test1()
With ThisWorkbook.Worksheets("Membership Waiting List").ListObjects("waiting_list")
.Sort.SortFields.Clear
.Sort.SortFields.Add2 _
Key:=.ListColumns("H4").Range, _
SortOn:=xlSortOnValues, _
Order:=xlAscending, _
DataOption:=xlSortTextAsNumbers
.Sort.Header = xlYes
.Sort.MatchCase = False
.Sort.Orientation = xlTopToBottom
.Sort.Apply
End With
End Sub
编辑:第二个过程使用
Add2
,但只需 Add
就可以了。
SortFields.Add2 方法
创建一个新的排序字段并返回一个 SortFields 对象,该对象可以 可选择使用定义的子字段对数据类型进行排序。
我不知道是什么导致了这个问题,但我找到了使用表排序方法的解决方法。上面代码的最后一行已替换为:
With wl.ListObjects("waiting_list").Sort
.SortFields.Add Key:=Range("A3", "A" & w_last_row), Order:=xlAscending
.Header = xlYes
.Apply
End With