2017-07-02 168 views
0
的顶部总是符合今天的日期动态列表

会很感激你的帮助。 提前交付日期列表。希望在工作表选择期望的交付日期显示在日期列表的顶部。因此,该列表每天动态地重新排序,将预期交付与今天的日期匹配。没有为我工作。谢谢。排序日期日期在列表

Sub todaysList() 

If ActiveSheet.FilterMode = False Then 
Range("G2").Select 
Selection.AutoFilter 
ActiveSheet.Range("$A$1:$M$4").AutoFilter Field:=7, Criteria1:= _ 
    xlFilterToday, Operator:=xlFilterDynamic 
Else 
    Selection.AutoFilter 

End If 

End Sub 

修正代码:---不错,但还是那么日期匹配今天的日期是转会日期列表的顶部不排序日期。左else语句中,因为它使按钮与连接到充当过滤器,也可以作为一个开关点击一次,当打开过滤器和关闭宏。

Sub todaysList() 
Dim ws As Worksheet 

Set ws = ThisWorkbook.Worksheets("RECEIPTING") 

If ws.AutoFilter Is Nothing Then 
    Range("G2").Select 
    Selection.AutoFilter 
    ActiveSheet.Range("$A$1:$M$4").AutoFilter Field:=7, _ 
    Criteria1:=xlFilterToday, _ 
    Operator:=xlFilterDynamic 
Else 
    ws.UsedRange.AutoFilter 

End If 

End Sub 
+0

您可以通过录制宏,而你想要的方式排序表按日期,再看看启动代码并删除所有'select'和'activate'语句 - 您将最终得到您需要的大部分代码。你可以从表单模块的'Worksheet_SelectionChange'事件调用这个宏。如果您有该代码的特定问题,请求帮助 –

+0

将为您提供帮助并更新您的信息。感谢您的时间并保持良好。 – Junior

+0

我可以从宏中构建代码以过滤到列表中的任何日期,也可以在表单激活时运行它。我没有得到的是如何将Now()或Today设置为过滤标准,以便它检查日期是什么日期并动态过滤到该日期。 – Junior

回答

0

尝试这些:

筛选:


Public Sub ShowToday() 
    Dim ws As Worksheet 

    Set ws = ThisWorkbook.Worksheets("Sheet1") 
    If Not ws.AutoFilter Is Nothing Then ws.UsedRange.AutoFilter 
    ws.Range("$A$1:$M$5").AutoFilter Field:=7, _ 
            Criteria1:=xlFilterToday, _ 
            Operator:=xlFilterDynamic 
End Sub 

排序:


Public Sub SortByDateAscending() 
    Dim ws As Worksheet 
    Set ws = ThisWorkbook.Worksheets("Sheet1") 
    With ws.Sort 
     .SortFields.Clear 
     .SortFields.Add Key:=ws.Range("G1:G5"), Order:=xlAscending 
     .SetRange Range("A1:M5") 
     .Apply 
    End With 
End Sub 


Public Sub SortByDateDescending() 
    Dim ws As Worksheet 
    Set ws = ThisWorkbook.Worksheets("Sheet1") 
    With ws.Sort 
     .SortFields.Clear 
     .SortFields.Add Key:=ws.Range("G1:G5"), Order:=xlDescending 
     .SetRange Range("A1:M5") 
     .Apply 
    End With 
End Sub 

+0

感谢您在If语句中演示'ws.AutoFilter as Nothing'的使用,但并不知道我可以像那样使用它。我已经将Else语句留下了,因为它允许宏连接的按钮起到了过滤器的作用,并且还有一个开关来打开和关闭过滤器。也非常感谢你提供了另外两个例子,但是,它们不能解决问题,因为它们将所有日期的升序或所有日期降序排列。我希望与第1天,e,Now()或Today的日期相匹配的日期移至列表顶部。希望这可以帮助。保持良好,再次感谢。 – Junior

0

我破解了!!!首先需要设置一些东西。

  1. 含有可以留下明显的或隐藏(你的选择)日期在纸张上创建一个列 - 随你喜欢什么,我的被称为“Prioritiser”。
  2. 在这个专栏中要存储的结果“在你的日期列日期 - 今天的日期”,即“日期”功能。 如果日期已过,结果将为负数。 如果日期等于今天的日期,结果将是0。 如果日期领先,即在今后的结果将是一个正数。
  • 的代码解释: -

    :我执行行计数。

    B:我循环通过每个记录日期排序,以供下次循环 起始于(下面标头)行2。

    C:对于日期的记录过去 和未来我在“Prioritiser”栏目录制“0”

    d:对于日期匹配今天的日期我记录一个“1”

    E:然后我运行在“优先化”列排序过滤器将所有1S在列表

    F的顶部:我附上了代码工作表的“有效”状态

    结果:

    每次选择工作表时,与当天匹配的日期将移至顶部。

    我相信你们可以改进代码,使其更加灵活,更有效率。保持良好和享受。

那就是:

Private Sub Worksheet_Activate() 

Dim ws As Worksheet 

Dim C1 As Long 
Dim rowCount, I As Integer 

Set ws = Sheets("RECEIPTING") 
rowCount = ws.Range("A" & Rows.Count).End(xlUp).Row 

For I = 2 To rowCount 
    C1 = ws.Range("G" & I).Value - Date 
     If C1 = 0 Then 
      ws.Range("N" & I) = 1 
     Else 
      ws.Range("N" & I) = 0 
     End If 
Next I 

If ws.AutoFilter Is Nothing Then 
    Range("N2").Select 
    Selection.AutoFilter 
    ws.AutoFilter.Sort.SortFields.Add Key:=Range("N2"), _ 
    SortOn:=xlSortOnValues, _ 
    Order:=xlDescending, _ 
    DataOption:=xlSortNormal 

    With ActiveWorkbook.Worksheets("RECEIPTING").AutoFilter.Sort 
     .Header = xlYes 
     .MatchCase = False 
     .Orientation = xlTopToBottom 
     .SortMethod = xlPinYin 
     .Apply 
    End With 
    ws.UsedRange.AutoFilter 

Else 
    ws.UsedRange.AutoFilter 

End If 

End Sub 

块引用