2011-03-23 207 views
1

我所要做的就是取日期,在日期中添加一個日期,將其粘貼到工作表中並讓工作表在輸入的日期上運行公式。單元格全部格式化爲英文日期,但是當我用下面的代碼分配單元格的值時,它認爲它的日期是美式格式,即使它已經是英文格式,因此會嘗試將其轉換爲英文格式。我怎樣才能阻止它在美國人的思維?Excel,VBA和日期

我放棄了所有VBA的功能,並且增加了一個功能,因爲VBA讓我很頭疼。

Dim D, M, Y As String 
    Dim S1, S2, NewDay, NewMonth, NewYear As Integer 
    S1 = InStr(1, StartDate.Value, "/") 
    S2 = InStr(S1 + 1, StartDate.Value, "/") 
    Debug.Print (CStr(S1) + " " + CStr(S2)) 
    D = Mid(StartDate.Value, 1, S1 - 1) 
    M = Mid(StartDate.Value, S1 + 1, S2 - S1 - 1) 
    Y = Mid(StartDate.Value, S2 + 1) 
    Debug.Print (D + " " + M + " " + Y) 

    NewDay = CInt(D) + 1 
    NewMonth = CInt(M) 
    NewYear = CInt(Y) 
    If NewDay > DaysInMonth(M, Y) Then 
     NewDay = 1 
     NewMonth = NewMonth + 1 
     If NewMonth > 12 Then 
      NewMonth = 1 
      NewYear = NewYear + 1 
     End If 
    End If 

    StartDate.Value = CStr(NewDay) + "/" + CStr(NewMonth) + "/" + CStr(NewYear) 

然後在另一個函數我只設置單元格的值,像這樣

With sheet.Range("A2") 
'.. Stuff  
.Offset(i, 1) = StartDate.Value 
+0

日期在Excel電子表格中作爲文本存儲還是作爲序列日期(即2010年1月1日的基礎單元格值是40179)? – 2011-03-24 08:20:11

+0

他們是連續的日期。 – Rarge 2011-03-24 11:59:13

+0

我修復了從我的計算機上的地區從美國更改爲英國的所有內容。感謝上帝,挫折結束了。 – Rarge 2011-03-24 12:07:30

回答

0

我認爲,問題出在操作爲一個字符串。爲什麼不嘗試這樣的事:

StartDate.Value =格式(DateSerial(NEWYEAR,NewMonth,NewDay), 「DD/MM/YYYY」)

2

VBA期望所有日期是美國方式:毫米/ DD/YY。
我只是使用常數正確的格式:kUsFmt = "#mm\/dd\/yyyy#"
那麼無論我需要一個約會我用的kUsFmt格式化功能:

strSql = "...WHERE myDate = " & Format (Date,kUsFmt) 

編輯:

爲什麼在你併購分裂的事情dy在你的代碼?給日期加1就像
myDate = myDate + 1一樣簡單!

+0

VBA中預期的日期格式(例如,如果您使用'CDate'功能)取決於您的區域設置。我看到偶爾通過Excel查詢問題,其中只有美國格式似乎工作,雖然 – barrowc 2011-03-24 00:01:40

+0

在VBA中的日期是一個簡單的整數,1是1/1/1900。格式化是單元格的問題,我會說。 [cPearson](http://www.cpearson.com/Excel/datetime.htm#AddingDates) – stema 2011-03-24 09:02:30

+0

我不能簡單地執行'myDate = myDate + 1',因爲當我將日期字符串轉換爲日期對象時,它會將其視爲美國格式,因此日間和月份都會被切換。 – Rarge 2011-03-24 11:49:35

0

我知道使用日期可能非常詭異,但請不要寫另一個日期轉換/添加/格式化例程,你將來的維護者不會感謝你。

關於通用的唯一格式是yyyy-mm-dd,它幾乎可以在每個日期函數中正確讀取。嘗試以這種格式書寫並以標準英國日期格式閱讀。

1
Function AddDay(StartDate As Date) As Date 
    AddDay = StartDate + 1 
End Function 

也許我不明白你的問題,但如果你把你的日期日期類型,Excel將做到這一點你。你不必考慮月末或年底。

這將在Excel單元格中看起來是另一部分。這是純粹的格式。您可以直接格式化單元格(右鍵單擊 - >格式單元格 - >選擇「日期」並選擇您的格式),或者在VBA中,您必須說出要顯示的格式單元格對象

請不要通過您自己的操縱字符串來做到這一點,這就像重新發明輪子。

你可以在這裏瞭解到很多關於Excel的日期,cpearson.com/Excel/DateFunctions,以及Excel。

更新:This是更好的鏈接,我的第一個是在單元格內的日期公式。