2015-04-27 31 views
1

我覺得可能有一個非常簡單的解決方案來解決我的問題,但對於我而言,我找不到它。我有兩個工作簿,在某些時候需要將用戶輸入的日期與工作表上已有的日期進行比較。我已經解決了一些非常簡單的代碼的問題。如果在另一個工作簿上比較輸入日期和日期時,Statement沒有評估爲True

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。我在輸入框中輸入2000年1月1日,所以爲了所有的意圖和目的,if語句應該被評估爲true。

回答

3

這是一個數據類型問題。瀏覽你的代碼並觀察每個值的數據類型。在您的工作表範圍的值是一個Date和輸入框接收的值是一個string

enter image description here

你需要將它們轉換爲相同的數據類型。

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 
+0

工作,謝謝,這很簡單,我覺得有點無能。 – FairlyLegit

+0

@FairlyLegit沒問題。易於監督。 – Brad

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 

它會找到的價值是真實的。

+0

InputBox函數的返回類型是String,所以Variant MyValue的推斷類型也是String。當我將'MyValue聲明爲String'時,我仍然會得到'False'。 ..? – Brad