使用命令按钮进行2种不同的排序功能

时间:2013-10-04 18:58:40

标签: sorting excel-vba custom-lists vba excel

这是我使用Stack Overflow的第一篇文章,但我肯定利用了存在的vba知识的精彩数据库。我将简要介绍寻求帮助的目的,然后列出随之而来的代码。

我收到了一份员工名单,其中包括姓名,工作年限,轮班,考试地点和公司职位,并被要求创建周末加班的员工名单。我已经能够根据用户输入的星期六和星期日的值以及他们想要工作的小时数等来生成列表。现在我开始创建一个基于7个优先级的列表的排序功能,这将改变周到周。

我发现了一个精彩的帖子,它允许我创建一个命令按钮,根据用户单击按钮更改其注释框。第一次单击将显示“站点优先级打开”,第二次单击显示“站点优先级关闭”。然后它会继续每次点击来回变化。单击时,第一次运行宏以根据用户可以输入的自定义优先级列表进行排序,第二次单击运行一个宏,将列表返回到其原始布局。依此类推等等,每次点击都是如此。

现在,无论按下按钮多少次,一切都能正常工作。但是,我的海关清单只会在第一次点击时按降序排列。按钮返回到基于优先级的排序后,它会从列列表中下降到从最低优先级到最高优先级的列表上升。我尝试添加代码来删除自定义排序顺序,并在每次运行宏时重新创建它,但在第一次运行后它会继续切换到升序。

这是我的Command BUtton代码:

Private Sub CommandButton4_Click()

Select Case CommandButton4.Caption
    Case "Site Priority Off"
      Call PrioritySort
      CommandButton4.Caption = "Site Priority On"
    Case "Site Priority On"
      Call SortOff
      CommandButton4.Caption = "Site Priority Off"
  End Select
End Sub

这是我的海关代码:

Sub PrioritySort()


  ActiveWorkbook.Worksheets("Preliminary List").Sort.SortFields.Clear
  Range("S12:Z55").Select
  Application.AddCustomList (Range("T3:T9"))
  Selection.Sort key1:=Range("V12:V55"), OrderCustom:=6, Header:=xlYes, _
  MatchCase:=False, Orientation:=xlTopToBottom

end sub

当我第二次使用命令按钮运行排序时,我已经手动打开了排序选项,并查看了排序顺序的级别。它提供了最小到最大,最大到最小,自定义排序列表降序的选项(通常类似于3B,6,7,3E),自定义排序列表升序(它总是相同的列表,但向后像3E,7, 6,3B)然后自定义排序(通常的选项)。

有人能想到代码在运行两次后从降序变为升序的原因吗?为什么在第二次点击之后它总是会选择升序,无论它运行多少次。

由于

1 个答案:

答案 0 :(得分:0)

Sub SortOff()是否适用于相同的排序区域/工作表...并且可能会留下您未在Sub PrioritySort()中捕获的不需要的设置吗?

您可以考虑将排序顺序(以及标题和方向)保存在工作表中;您可能希望明确地设置它,例如Order1:=xlAscending不要冒另一种Sub翻转它的风险。