我很难搞清楚为什么我无法按照日期对此代码进行排序。我有它,所以键入日期的方式与日志中的日期格式相同,我已经仔细检查了它是否正在搜索正确的列...我刚刚来这里有空白。
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"中的日期格式相匹配。片。因此,用户键入日期,该输入旁边的单元格将采用该日期并将其放入正确的格式,然后宏应按该日期排序。如果我错过了一些明显的东西,请告诉我。
答案 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