0

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

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

我发现了一篇精彩的帖子,它允许我创建一个命令按钮,该按钮将根据用户单击按钮来更改其评论框。第一次单击将显示“Site Priority On”,第二次单击将显示“Site Priority Off”。然后它将在每次单击时继续来回变化。第一次单击时,它运行一个宏以根据用户可以输入的自定义优先级列表进行排序,第二次单击运行一个宏,将列表返回到其原始布局。依此类推,每次点击从一种排序到另一种排序。

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

这是我的命令按钮代码:

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)然后是自定义排序(通常的选项)。

谁能想到代码在运行两次后从降序变为升序的原因?以及为什么在第二次单击后,无论运行多少次,它总是选择升序。

谢谢

4

1 回答 1

0

是否Sub SortOff()可以在同一个排序区域/工作表上工作......它是否会留下您在 Sub 中没有捕捉到的不需要的设置PrioritySort()

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

于 2013-10-04T21:22:47.253 回答