我这里有一个符合其基本目标的代码...... 双击标题将按列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
答案 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列排序是你的第一个标准。