2017-07-02 161 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 

塊引用