2017-04-24 108 views
0

我有一個包含英語日期格式的電子表格:VBA:interpeting英語日期格式字符串

12 Feb 2015 
13 Oct 2016 
etc. 

然而,由於我的MS Excel在法國,它不以他們爲日期,而是作爲字符串。

我需要做一些解析這些值,所以我運行我的程序,但有些惱人的事情發生。無論操作系統/微軟語言如何,VBA都會設置爲英文,因此,當我打印日期時,它會返回法文日期(12-févr-2015,讀爲12/02/2015)。這阻止了我將該值與以前的12 Feb 2015進行比較。

無論如何,我可以問VBA不要主動將我的字符串解釋爲日期嗎?

這裏是我的代碼+測試用例的簡化版本(但我猜你將無法看到問題,如果在英文Excel中運行它):

  1. 將字符串12 Feb 2015在您的電子表格
  2. 運行下面的代碼的範圍A1:

    Sub test() 
        myVal = Range("A1").Value 
        Range("A2").Value = myVal 
    End Sub 
    
  3. 的範圍(「A2」)的值將在您的Excel語言的日期,而不是一個字符串,因爲它是以前。

注:我曾經想過寫Range("A2").Value = "'" & myVal讓值是String,而不是一個日期,但它不會讓我可以以後用'12 Feb 2015比較12 Feb 2015而且,不管怎麼說,12 Feb 2015成爲日期已被myVal = Range("A1").Value讀取。

+0

是否真的需要'12-févr-2015'並使其成爲'2015年12月05日'或者這是寫入它的技術錯誤? – Vityata

+0

您的示例代碼使用Variant - 如果要控制值的解釋方式,則需要控制所使用的變量的數據類型。 –

+1

@Vityata我的意思是你在單元格中看到'12-févr-2015',但是如果你按F2來檢查它的值,它將是'12/02/2015'。可能而不是2月是一個打字錯誤,將立即改變它! –

回答

2

如果要保留字符串,只需使用Text代替Value,然後將存儲變量定義爲字符串。像這樣

Sub test() 
    Dim myVal as String 
    myVal = Range("A1").Text 
    Range("A2").Value = myVal 
End Sub 

Text是隻讀的,所以仍然使用Value寫入到新的小區。包含ValueText之間的差異的示例的文檔:https://msdn.microsoft.com/en-us/library/office/ff840217.aspx

+0

感謝Wolfie,會嘗試做出聲明(問題在於這個變量與其他人混合在一起,我不知道它會在哪個時間點發生變化),並且如果它有效,它會接受你的答案! –

+0

@MatteoNNZ,它應該在沒有聲明的情況下工作,但聲明事物總是一個好習慣!聲明不會強制使用'.Text'完成的格式,它只會讓編譯器和程序員更加明白! – Wolfie