我觉得我的问题可能有一个非常简单的解决方案,但对于我的生活,我找不到它。我有两个工作簿,在某些时候需要将用户输入的日期与工作表上已有的日期进行比较。我已经将问题提取到了一些非常简单的代码中。
Dim wbk As Workbook
Dim MyValue As Variant
MyValue = InputBox("Enter Date")
Set wbk = Workbooks("Some Workbook")
If wbk.Worksheets(1).Range("A1").Value = MyValue Then '<--- This is Evaluating to False
MsgBox "True"
End If
假设我使用的日期是1/1/2000。如果我写Msgbox wbk.Worksheets(1).Range("A1")
,我将获得1/1/2000。我将在1/1/2000中输入到输入框中,因此对于所有意图和目的,if语句应该被评估为true。
答案 0 :(得分:3)
这是一个数据类型问题。逐步执行代码并观察每个值的数据类型。工作表范围内的值为string
,输入框中的值为Dim wbk As Workbook
Dim MyValue As Variant
MyValue = InputBox("Enter Date")
Set wbk = ActiveWorkbook
Dim inputDate As Date
If IsDate(MyValue) Then
inputDate = CDate(MyValue)
If wbk.Worksheets(1).Range("A1").Value = inputDate Then
MsgBox "True"
End If
End If
您需要将它们转换为相同的数据类型。
{{1}}
答案 1 :(得分:0)
你的变量应该是
Dim MyValue As String
当我使用你的代码时
Dim wbk As Workbook
Dim MyValue As String
MyValue = InputBox("Enter Date")
Set wbk = Workbooks("TestMe.xlsm")
If wbk.Worksheets(1).Range("A1").Value = MyValue Then '<--- This is Evaluating to False
MsgBox "True"
End If
它会发现该值为真。