2014-03-27 43 views
0

我目前有一個預先寫好日期的電子表格,以dd/mm/yyyy格式排序,但我希望能夠更改整個工作表,以便當我從一個drop中選擇一個月下拉列表中,它會更改所有日期,以便從第1個到第31個開始,但僅使用visual basic更改月份。我可以用它來設定具體日期,VBA更改日期的具體位

Range("C3") = Format(DateSerial(Year:=2005, Month:=2, Day:=3), "mm-dd-yyyy") 

但是,使用這樣的事情,例如

Range("C3") = Format(DateSerial(Month:=5), "mm-dd-yyyy") 
+1

'所以他們保持從第一到第三十一'如果你將12月31日更改爲二月份會發生什麼? –

+0

這將是一個稍後的腳本位,我將刪除月份範圍以外的部分。 –

回答

0

你可以做這樣的事情,我可以改變只包括月:

Function MakeDates(startDate As Date) As Date() 

    Dim myDates() As Date, myYear As Integer, myMonth As Integer, daysInMonth As Integer 
    Dim firstOfMonth As Date, firstOfNextMonth As Date, d As Integer 
    myYear = Year(startDate) 
    myMonth = Month(startDate) 

    firstOfMonth = DateSerial(myYear, myMonth, 1) 
    firstOfNextMonth = DateSerial(myYear, myMonth + 1, 1) 
    daysInMonth = DateDiff("d", firstOfMonth, firstOfNextMonth) 
    ReDim myDates(daysInMonth - 1) 
    For d = 1 To daysInMonth 
     myDates(d - 1) = DateSerial(myYear, myMonth, d) 

    Next d 
    MakeDates = myDates 
End Function 

那麼你可以這樣稱呼它

Dim d 
d = MakeDates(#2/1/2014#) 
Range("A1").Resize(rowsize:=31).Value = "" 
Range("A1").Resize(rowsize:=UBound(d) + 1) = WorksheetFunction.Transpose(d) 

倒數第二行將爲您刪除多餘的日期。

您應該將範圍格式化爲日期。你可以在代碼中做到這一點,或只是在Excel中做一次。後者可能更容易。