Public DateRng As String
Private Sub DateLookup()
'Dim ColCnt As Integer
'Prompt Date to look for
DateRng = InputBox("Insert date in format dd/mm/yy", "User date", Format(Now(), "dd/mm/yy"))
If IsDate(DateRng) Then
DateRng = Format(CDate(DateRng), "dd/mm/yy")
ColumnDateCheck
' MsgBox DateRng
Else
MsgBox "Wrong date format"
Exit Sub
End If
End Sub
Private Sub ColumnDateCheck()
For C = 3 To 29
If Cells(C, 2) >= DateRng Then
'Function
Cells(C, 5) = Cells(C, 3) + Cells(C, 4)
End If
Next
End Sub
代码在
上执行的数据没有执行代码时出错,但功能无法正常工作。它执行一个混乱的功能,后面没有任何模式。无法理解输出。
目标
答案 0 :(得分:2)
我不使用美国日期格式(我使用y/m/d
),你也没有,因为你是d/m/y
而英语/美国标准是m/d/y
,所以是问题的一部分(对我们两个人而言)。
无论Excel中的单元格格式化如何,VBA仍然希望以特定方式使用日期。有几种方法可以解决这个问题;我选择了一个简单的方法:让用户输入Excel期望的日期。
所以我添加了一个指定格式的函数(对于你我和你的计算机来说会有所不同)。
问题的另一部分是您需要更好地理解数据类型。基本上,试图将Date
存储在String
变量中,该变量并不总是按预期工作(就像这次一样)。
InputBox
会返回一个字符串,所以你需要转换它,但转换它并仍然将它存储在一个字符串中只是保持字符串。
与语句DateRng = Format(CDate(DateRng), "dd/mm/yy")
相同,因为Format
总是返回一个字符串(即使它看起来像一个日期),而你的DateRng
变量仍然是一个字符串。
无论如何,这个修改过的代码应该可以工作:
Private Sub DateLookup()
Dim str_DateRng As String
Dim dateRng As Date
str_DateRng = InputBox("Enter date in format " & DateFormat, "User date", _
Format(Now(), DateFormat))
If IsDate(str_DateRng) Then
dateRng = CDate(str_DateRng)
ColumnDateCheck (dateRng)
Else
MsgBox "Wrong date format"
Exit Sub
End If
End Sub
Private Sub ColumnDateCheck(dateToFind As Date)
Dim c As Integer
For c = 3 To 29
If Cells(c, 2) >= dateToFind Then
Cells(c, 5) = Cells(c, 3) + Cells(c, 4)
End If
Next c
End Sub
Function DateFormat() As String
Select Case Application.International(xlDateOrder)
Case 0 : DateFormat = "m/d/yyyy"
Case 1 : DateFormat = "d/m/yyyy"
Case 2 : DateFormat = "yyyy/m/d"
End Select
End Function
答案 1 :(得分:1)
尝试比较这样的日期:
If Format(Cells(C, 2) ,"yyyy-mm-dd")>= Format(DateRng,"yyyy-mm-dd") Then......etc.