Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 使用设置的范围进行排序,但使用一次后不会更改值_Excel_Vba_Sorting_Set - Fatal编程技术网

Excel 使用设置的范围进行排序,但使用一次后不会更改值

Excel 使用设置的范围进行排序,但使用一次后不会更改值,excel,vba,sorting,set,Excel,Vba,Sorting,Set,我这里有一个代码,它的基本目标工程。。。 双击标题将按D列排序,然后按双击的列排序 是的,我知道这可以通过多重排序更容易地实现,但出于……原因,这不是一个选项 问题是,在代码运行一次之后,它“似乎”总是将我的“Set KeyRange”设置为单击的值 如果我手动使用表格,并尝试双击一个新标题,它仍然会根据第一次选择的标题对其进行排序 我怎样才能解决这个问题?谢谢我尝试在接近尾声时添加一个新的“设置关键点范围”命令,但没有效果,或者破坏了它 Private Sub Worksheet_Before

我这里有一个代码,它的基本目标工程。。。 双击标题将按D列排序,然后按双击的列排序

是的,我知道这可以通过多重排序更容易地实现,但出于……原因,这不是一个选项

问题是,在代码运行一次之后,它“似乎”总是将我的“Set KeyRange”设置为单击的值

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

我怎样才能解决这个问题?谢谢我尝试在接近尾声时添加一个新的“设置关键点范围”命令,但没有效果,或者破坏了它

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
Private子工作表\u双击之前(ByVal目标作为范围,Cancel作为布尔值)
调暗键范围作为范围
Dim ColumnCount为整数
ColumnCount=范围(“A1:D12”).Columns.Count
取消=错误

如果Target.Row=1和Target.Column您的代码对我来说几乎完美无瑕。我所做的唯一一件事就是排除在
If…然后…End If
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
Private子工作表\u双击之前(ByVal目标作为范围,Cancel作为布尔值)
调暗键范围作为范围
Dim ColumnCount为整数
ColumnCount=范围(“A1:D12”).Columns.Count
取消=错误

如果Target.Row=1和Target.Column,谢谢!我认为那种清晰是我这一方所缺少的最大的东西。