VBA 操作 Excel 生成日期及星期


     

     直接上代碼~~

     1.  在一個 Excel 生成當月或當年指定月份的日期及星期

' 獲取星期的顯示
Function disp(i As Integer)
  Select Case i
     Case 1
       disp = ""
     Case 2
       disp = ""
     Case 3
       disp = ""
     Case 4
       disp = ""
     Case 5
       disp = ""
     Case 6
       disp = ""
     Case Else
       disp = ""
  End Select
End Function

' 獲取當月的天數
Function GetDaysOfMonth(Year As String, Month As String) As Integer
    Dim Day1, Day2 As String
    If Month = "12" Then
        GetDaysOfMonth = 31
    Else
        Day1 = Year + "-" + Month + "-1"
        Day2 = Year + "-" + CStr(CInt(Month) + 1) + "-1"
        GetDaysOfMonth = DateDiff("d", Day1, Day2)
    End If
End Function

Sub AddSheets()
    Dim i As Integer
    Dim DaysOfMonth As Integer
    Dim NameStr As String
    Dim DateStr As String
    Dim CurrMonth As Integer
    Dim MonStr As String
    Dim CurrYear As String
    Dim Choice As Integer
    Dim LastMonth As Integer
    Dim OriginSheet As String
    
    Application.DisplayAlerts = False
    For i = Sheets.Count To 1 Step -1
        If Sheets(i).Name <> ActiveSheet.Name Then
            Sheets(i).Delete
        End If
    Next
    
    ActiveSheet.Name = "LastSheet"
    OriginSheet = ActiveSheet.Name
 
    CurrMonth = CInt(Month(Now))

    ' 設置起始及結束月份(1-12); 默認當前月
    StartMonth = CurrMonth
    LastMonth = CurrMonth

    CurrYear = CStr(Year(Now))
    For m = StartMonth To LastMonth
        MonStr = CStr(m)
        DaysOfMonth = GetDaysOfMonth(CurrYear, MonStr)
        For i = 1 To DaysOfMonth
            Worksheets.Add after:=Worksheets(Worksheets.Count)
            NameStr = MonStr & "-" & CStr(i)
            DateStr = CurrYear & "-" & NameStr
            ActiveSheet.Name = NameStr
            ActiveSheet.[A1].Value = DateStr
            ActiveSheet.[B1].Value = "星期" & disp(Weekday(DateStr, vbMonday))
 
            ' 設置單元格行列寬高自適應
            ActiveSheet.[A1].Columns.AutoFit
            ActiveSheet.[A1].Rows.AutoFit
            ActiveSheet.[B1].Columns.AutoFit
            ActiveSheet.[B1].Rows.AutoFit
        Next
    Next
    Sheets(OriginSheet).Delete
    On Error Resume Next
    Application.DisplayAlerts = True
End Sub

 

      2.  生成直到2099年的日期及月份,每個月份一個 Excel 

' 獲取星期的顯示
Function disp(i As Integer)
  Select Case i
     Case 1
       disp = ""
     Case 2
       disp = ""
     Case 3
       disp = ""
     Case 4
       disp = ""
     Case 5
       disp = ""
     Case 6
       disp = ""
     Case Else
       disp = ""
  End Select
End Function

' 獲取當月的天數
Function GetDaysOfMonth(Year As String, Month As String) As Integer
    Dim Day1, Day2 As String
    If Month = "12" Then
        GetDaysOfMonth = 31
    Else
        Day1 = Year + "-" + Month + "-1"
        Day2 = Year + "-" + CStr(CInt(Month) + 1) + "-1"
        GetDaysOfMonth = DateDiff("d", Day1, Day2)
    End If
End Function

Sub AddSheets(Year As String, Month As String)
    Dim i As Integer
    Dim DaysOfMonth As Integer
    Dim NameStr As String
    Dim DateStr As String
    Dim CurrMonth As Integer
    Dim MonStr As String
    Dim OriginSheet As String
    
    For i = Sheets.Count To 1 Step -1
        If Sheets(i).Name <> ActiveSheet.Name Then
            Sheets(i).Delete
        End If
    Next
    
    ActiveSheet.Name = "LastSheet"
    OriginSheet = ActiveSheet.Name
 
    MonStr = CStr(Month)
    DaysOfMonth = GetDaysOfMonth(Year, MonStr)
    For i = 1 To DaysOfMonth
        Worksheets.Add after:=Worksheets(Worksheets.Count)
        NameStr = MonStr & "-" & CStr(i)
        DateStr = Year & "-" & NameStr
        ActiveSheet.Name = NameStr
        ActiveSheet.[A1].Value = DateStr
        ActiveSheet.[B1].Value = "星期" & disp(Weekday(DateStr, vbMonday))

        ' 設置單元格行列寬高自適應
        ActiveSheet.[A1].Columns.AutoFit
        ActiveSheet.[A1].Rows.AutoFit
        ActiveSheet.[B1].Columns.AutoFit
        ActiveSheet.[B1].Rows.AutoFit
    Next
    Sheets(OriginSheet).Delete
    On Error Resume Next
    
End Sub

Sub AddExcels(Year As String)
    Dim wb As Workbook
    Dim wbname As String
    Dim m As Integer
    Dim Month As String
    
    For m = 1 To 12
        Set wb = Workbooks.Add
        Month = CStr(m)
        Call AddSheets(Year, Month)
        wbname = Year & "" & CStr(Month) & "月.xlsx"
        wb.SaveAs "d:\" & wbname
        Workbooks(wbname).Close (True)
    Next
    
End Sub

Sub AddExcels2099()
    Dim Year As Integer

    Application.DisplayAlerts = False
    For Year = 2016 To 2099
        AddExcels (CStr(Year))
    Next
    Workbooks(ActiveWorkbook.Name).Close (False)
    Application.DisplayAlerts = True

End Sub

 

      小記:      

     (1)  函數返回值,使用函數名作為變量在最后一行賦值;

     (2)  調用過程: CALL SubName(ArgList) ;

     (3)  變量名、函數名習慣大寫;

     (4)  Switch , If, For , Sub, Function 定義代碼里有;

     (5)  整數轉字符串 CStr,  字符串轉整數 CInt ; 字符串連接 & ;

     (6)  當前活動工作表 ActiveSheet , 當前活動工作簿: ActiveWorkBook ;

     (7)  操作當前活動工作表: ActiveSheet.Name,  ActiveSheet.[CellID].Value ; ActiveSheet.[A1].Columns, ActiveSheet.[A1].Rows 行列設置;

     (8)  工作簿操作:  新增 Set wb = Workbooks.Add ; 保存 wb SaveAs "Path/file.xlsx" ;  關閉  Workbooks(wbname).Close (True) .

 

     無論怎樣的編程語言, 函數或過程復用是最基本的技能; 

     只要是在計算設備上, 99%的人工操作均可自動化。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM