使用“设置范围”进行排序,但在使用一次后,它永远不会更改该值

时间:2018-02-12 23:10:29

标签: excel vba sorting set

我这里有一个符合其基本目标的代码...... 双击标题将按列D排序,然后按双列排序。

是的,我知道通过多重排序可以更轻松地实现这一目标,但这不是出于......的原因。

问题是,在代码运行一次后,它运行得很好,它似乎"永远地设置我的" Set KeyRange"点击的值。

如果我手动使用该表,并尝试双击一个新标题,它仍然会根据第一次选择的标题对其进行排序。

我该如何解决这个问题?谢谢。我尝试在最后添加一个新的Set Key范围命令,但这没有做任何事情,或者破坏了它。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim KeyRange As Range
Dim ColumnCount As Integer
ColumnCount = Range("A1:D12").Columns.Count
Cancel = False
If Target.Row = 1 And Target.Column <= ColumnCount Then
Cancel = True
Set KeyRange = Range(Target.Address)
End If
With ActiveSheet.Sort
     .SortFields.Add Key:=Range("D1"), Order:=xlAscending
     .SortFields.Add Key:=KeyRange, Order:=xlAscending
     .SetRange Range("A1:D12")
     .Header = xlYes
     .Apply
End With
End Sub

1 个答案:

答案 0 :(得分:1)

您的代码对我来说几乎是完美的。我唯一做的就是从If ...Then...End If中排除如果Target不在第1行或超过4列。

我还添加了.SortFields.Clear,您需要清除之前的订单。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

Dim KeyRange As Range
Dim ColumnCount As Integer
ColumnCount = Range("A1:D12").Columns.Count
Cancel = False
If Target.Row = 1 And Target.Column <= ColumnCount Then
    Cancel = True
    Set KeyRange = Range(Target.Address)
    With ActiveSheet.Sort
         .SortFields.Clear
         .SortFields.Add Key:=Range("D1"), Order:=xlAscending
         .SortFields.Add Key:=KeyRange, Order:=xlAscending
         .SetRange Range("A1:D12")
         .Header = xlYes
         .Apply
    End With
End If
End Sub

这段代码非常适合我。我点击任何标题,然后按D列对我的数据进行排序,然后单击标题。

另外,请注意如果D列中的值(您的第一个条件)都是唯一的且行已经订购,则您不会注意到任何可见的更改,因为按D列排序是你的第一个标准。