排序事件后的 VBA

问题描述 投票:0回答:3

我有 Excel 工作表,其中有一堆数据和一些 Excel 过滤器和排序按钮。是否有可能检测排序函数何时执行并在之后运行代码?

我尝试了worksheet_calculate,但存在问题,该事件不仅在排序时触发。或者这里是否可以确定在 worksheet_calculate 事件中执行了排序?

excel vba sorting
3个回答
0
投票

控制排序,而不是让 Excel 尝试检测排序。

不要允许用户从功能区手动执行排序,而是提供一个按钮并让按钮宏执行排序以及随后的任何相关操作。


0
投票

排序操作会更改其过滤范围的选择。您可以通过利用 Worksheet_SelectionChange 事件非常简单地捕获排序事件。您必须以与标准 Worksheet_Change 事件相同的方式应用 Application.Intersect 方法。

您针对选择目标测试的范围必须是过滤器范围(不包括标题行)。

当您通过标题控件对筛选范围内的列之一进行排序时,Target.Value 将捕获一个包含标题行值的数组。

此时您需要两行代码来帮助检测排序操作。请参阅下面的基本框架:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Dim filterRangeNoHeaders As Range
  Set filterRangeNoHeaders = Range("A2:A11")
  If VarType(Target.Value) <> 8204 Then Exit Sub
  If Target(1, 1) <> "FirstHeaderTitle" Then Exit Sub
  If Not Application.Intersect(filterRangeNoHeaders, Target) _
    Is Nothing Then
    'Code to execute after sort is detected
  End If 
End Sub

0
投票

我对此有疑问,因为 如果 Target(1, 1) <> "FirstHeaderTitle" 总是正确的。 target.address 是整个标题列,因此目标 (1,1) 始终是第一列。我只想捕获第一列中的排序。

有答案吗?

© www.soinside.com 2019 - 2024. All rights reserved.