2017-01-13 108 views
1

將字符串與工作表中的值進行比較時出現問題。 在csv文件中,我獲得了值爲「8-9-2016」的變量BookingDate。我想通過Excel工作表來檢查是否與該值匹配。我發現當我想在VBA中使用它們時,從表格中讀取的值會發生變化。比方說,我設置一個變量BookingDate2,並給它這樣的值:VBA將日期格式從D-M-Y更改爲M-D-Y

LR = ThisWorkbook.Sheets("Sheetname").Range("A" & Rows.Count).End(xlUp).Row 
For i = 2 To LR 
    BookingDate2 = ThisWorkbook.Sheets("Boekingen AMS-IAD").Cells(i, 1).Value 

然後,我要檢查它是否找到了一個匹配這樣的:

If (BookingDate = BookingDate2) Then 
    'Do something 

我現在的問題是, BookingDate的值爲「8-9-2016」,BookingDate2的值爲「8-9-2016」,但更改爲「9-8-2016」。我怎樣才能解決這個問題?

+1

期待對此有一個明確的答案,對我來說,分類是將你的日期與月份一起存儲爲3封信1月/ 2月......這種方式永遠不會混淆月份是什麼,但這是行不通的爲外語。一些聰明的傢伙應該權衡,並給出良好的答案引用默認語言環境等 –

+1

同樣的問題被問到14小時前... http://stackoverflow.com/questions/41625705/vba-is-changing-my-dates-to -mm-dd -yyyy -hhmm -in-importing/41632336 – Pierre

回答

5

我定了!

我忘了將變量變暗爲日期。 它是這樣的:

Dim BookingDate As String 
Dim BookingDate2 As String 

但它必須是:

Dim BookingDate As Date 
Dim BookingDate2 As Date 

這奏效了我。

+1

規則#1(它們都是#1,對不對?):總是將日期視爲*日期*! –

0

如果您確定BookingDate2的格式始終爲「dmy」,並且您希望它爲「mdy」,則一種方法是拆分日期值,顛倒順序,然後將其保存回變量在測試它們的值之前使用正確的格式。試試這個:

LR = ThisWorkbook.Sheets("Sheetname").Range("A" & Rows.Count).End(xlUp).Row 
For i = 2 To LR 
    BookingDate2 = ThisWorkbook.Sheets("Boekingen AMS-IAD").Cells(i, 1).Value 
    Dim aux 
    aux = Split(BookingDate2,"-") 
    BookingDate2 = aux(1) & "-" & aux(0) & "-" & aux(2) 'reordering the date in the desired format 

    If (BookingDate = BookingDate2) Then 
     'Do something 

這是當然,假設您的CSV和電子表格兩種日期格式不改變

相關問題