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%的人工操作均可自动化。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了