0

在下面的代码中,我在 DepName 列上对名为 DepList 的表进行排序。

    Sub SortDepNameAZ()
    On Error Resume Next
         ActiveWorkbook.Worksheets("Department List").ListObjects("DepList").Sort. _
             SortFields.Clear
         ActiveWorkbook.Worksheets("Department List").ListObjects("DepList").Sort. _
             SortFields.Add Key:=Range("DepList[[#All],[DepName]]"), SortOn:= _
             xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
         With ActiveWorkbook.Worksheets("Department List").ListObjects("DepList").Sort
           .Header = xlYes
           .MatchCase = False
           .Orientation = xlTopToBottom
           .SortMethod = xlPinYin
           .Apply
        End With
     End Sub

我想让它更通用,这样我就可以将它用作一个函数,使用定义的范围和名称而不是特定的名称。

我尝试使用以下内容,但无法使语法正常工作:

 Sub SortDepNamesAZ(lo1 As ListObject, dn1 as Variant)
 On Error Resume Next
     Set lo1 = Application.ActiveWorkbook.ActiveSheet.ListObject(1)
     Dim tabstr As String
     tabstr = Application.ActiveWorkbook.ActiveSheet.ListObject(1).Name
     lo1.Sort.SortFields.Clear
     lo1.Sort.SortFields.Add Key:=Range(tabstr[[#All],[dn1]]), SortOn:= _
         xlSortOnValues, Order:=xlAscending 'I think this line is probably wrong??
     With lo1.Sort
         .Header = xlYes
         .MatchCase = False
         .Orientation = xlTopToBottom
         .SortMethod = xlPinYin
         .Apply
     End With
 End Sub

任何帮助表示赞赏,即使我知道代码只有几个指针,也可能在许多层面上得到改进。

谢谢

4

1 回答 1

0

功能:

Sub SortTableByHeader(ShtN As String, tabN As String, hed1 As Variant) 
Dim hed2 As Range, hed3 As Integer 

Set hed2 = Range(tabN).Rows(0) 
    hed3 = Application.Match(hed1, hed2, 0) 

Range(tabN).Sort Key1:=Range(tabN).Cells(1, hed3), Header:=xlYes 

End Sub

调用函数:

Sub SortDepartmentName() 
Dim ShtN As String, objName As String, myColHead As Variant 

ShtN = Sheets("Department List").Name 
objName = Sheets("Department List").ListObjects(1).Name 
myColHead = "DepName" 

SortTableByHeader ShtN, objName, myColHead 

End Sub
于 2015-03-02T09:41:29.633 回答