Excel中的VBA排序会保留选定的表格内容

时间:2014-06-03 09:06:02

标签: excel vba sorting

我有一个Excel电子表格,根据单独表格中的数据在一张纸上保存排行榜。我监控数据表上的更改,然后自动对排行榜表进行排序。一切似乎都运行良好但排行榜表的内容在我的排序后被选中。如何在不影响数据表选择的情况下无缝清除选择。

我甚至是一个好孩子,使用使用代替选择命令完成排序。

这就是我所拥有的:


Sheet2(代码) - 数据表

Sub Worksheet_Change(ByVal target As Range)

' Check if the item changed is in group area
If Not Intersect(target, target.Worksheet.Range("F7:H93")) Is Nothing Then
  ActiveWorkbook.Worksheets("Leaderboard").SortLeaderboard
End If
End Sub

Sheet1(代码) - 排行榜表

Sub SortLeaderboard()
Dim lo As Excel.ListObject
Set lo = ActiveWorkbook.Worksheets("Leaderboard").ListObjects("Table3")

With lo
    .Sort.SortFields.Clear
    .Sort.SortFields.Add Key:=Range("Table3[Total]"), SortOn:=xlSortOnValues, Order:= _
        xlDescending, DataOption:=xlSortNormal
    .Sort.SortFields.Add Key:=Range("Table3[Name]"), SortOn:=xlSortOnValues, Order:= _
        xlAscending, DataOption:=xlSortNormal
    With .Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End With
End Sub

2 个答案:

答案 0 :(得分:1)

如果表格未激活,这似乎是表格的一个怪癖。您可以使用旧的Sort方法来避免它:

Sub SortLeaderboard()
    Dim lo                          As Excel.ListObject
    Set lo = Me.ListObjects("Table3")

    With lo
        .Sort.SortFields.Clear
        .Range.Sort key1:=.ListColumns("Total").DataBodyRange.Cells(1), _
                    Order1:=xlDescending, DataOption1:=xlSortNormal, _
                    Key2:=.ListColumns("Name").DataBodyRange.Cells(1), _
                    Order2:=xlAscending, DataOption2:=xlSortNormal, _
                    SortMethod:=xlPinYin, MatchCase:=False
    End With
End Sub

例如。

答案 1 :(得分:0)

如何添加类似

的内容

Worksheets("Leaderboard").Select Worksheets("Leaderboard").Range("A1").Select Worksheets("Data").Select

选择单个单元格?