按输入框中的日期排序 - VBA

时间:2018-03-20 20:56:06

标签: excel-vba sorting date vba excel

我很难搞清楚为什么我无法按照日期对此代码进行排序。我有它,所以键入日期的方式与日志中的日期格式相同,我已经仔细检查了它是否正在搜索正确的列...我刚刚来这里有空白。

Sub Sortbydate()

With ActiveSheet
Dim When As Variant
Dim noreallywhen As String

When = InputBox("Enter Date, FORMAT: MM-DD-YY")
Range("C16").Value = When

noreallywhen = Sheets("FIND RECORDS").Range("D16").Value

Worksheets("Log").Activate
If ActiveSheet.AutoFilterMode Then ActiveSheet.ShowAllData
Columns("D:D").Select
Selection.AutoFilter
ActiveSheet.Range("$D$1:$D$1000").AutoFilter Field:=1, 
Criteria1:=noreallywhen
End With


End Sub

此宏发生在" Sheet1",其中有几个选项可用于对日志进行排序(在下一页上)。使用以下代码进行排序的所有其他方法都很有效,只是当我要求它查找给出0结果的日期时,即使我知道我输入的日期是在该日志表中的列。

所以," Dim当"用户最终输入的格式是什么。我知道我已经建议了一种格式,但谁知道他们将如何输入格式,对吧?单元格D16的格式正确,日期格式与" Log"中的日期格式相匹配。片。因此,用户键入日期,该输入旁边的单元格将采用该日期并将其放入正确的格式,然后宏应按该日期排序。如果我错过了一些明显的东西,请告诉我。

1 个答案:

答案 0 :(得分:0)

尝试这种方法。这也确保了用户以您所需的格式输入日期。

Sub Sortbydate()

With ActiveSheet
    Dim When As String
    Dim noreallywhen As String

    Do
        inputbx = InputBox("Enter Date, FORMAT; MM-DD-YY", , Format(VBA.Now, "MM-DD-YY"))
        If inputbx = vbNullString Then Exit Sub
        inputstr = Split(inputbx, "-")
        On Error Resume Next
        InputDate = DateSerial(inputstr(2), inputstr(0), inputstr(1))
        On Error GoTo 0
        DateIsValid = IsDate(InputDate)
        If Not DateIsValid Then MsgBox "Please enter a valid date.", vbExclamation
    Loop Until DateIsValid

    If ActiveSheet.AutoFilterMode And ActiveSheet.FilterMode Then
        ActiveSheet.ShowAllData
        Worksheets("Log").Columns("D:D").AutoFilter Field:=1, Criteria1:=CStr(InputDate)
    Else
        Worksheets("Log").Columns("D:D").AutoFilter Field:=1, Criteria1:=CStr(InputDate)
    End If

End With

Worksheets("Log").Activate

End Sub