2017-02-22 8 views
1

私は2018年にこれを1年中実行しようとしています。私のコードを実行すると、代わりに2017が得られます。ここで1年間に1枚のExcelシートをコピーする

Sub MakeSheetForEachDay() 
'Will copy the sheet named "START" and rename as 
'as a date, 1-Jan, 2-Jan, etc. 
' 
    Dim wsStart As Worksheet 
    Dim strDate As String 
    Dim mth As Long, dy As Long 

    Set wsStart = Sheets("START") 
    For mth = 1 To 12 
     For dy = 1 To Day(DateSerial(Year(2018), mth + 1, 1) - 1) 
      strDate = Format(DateSerial(Year(2018), mth, dy), "ddd mmm d") 
      wsStart.Copy after:=Sheets(Sheets.Count) 
      Sheets(Sheets.Count).Name = strDate 
     Next dy 
    Next mth 
End Sub 
+0

なぜ年()? – Pierre

答えて

2

短い答え以下の私のコードあなたがdocumentation for yearを見れば、あなたはそれがときYear(2018)これは、

Public Function Year(ByVal DateValue As DateTime) As Integer 

として定義され表示されますDateSerial(2018, mth + 1, 1)

を使用するだけでYear(2018)を使用していないですそれが整数2018をDateTimeに変換しなければならないと評価されます。それはあなたに1909年7月10日を与える時代に2018日を追加することによってこれを行います。したがってYear(2018)は1905を返します。Format(DateSerial(2017, mth, dy), "ddd mmm d")Format(DateSerial(1905, mth, dy), "ddd mmm d")は、Jan、1 1905と2017が両方とも日曜日だったので、同じ値を返します。これはなぜあなたが出力で混乱しているのですFormat(DateSerial(Year(2018), mth, dy), "ddd mmm d")

関連する問題