首页 > 其他分享 >使用excel生成简单的日历

使用excel生成简单的日历

时间:2025-01-16 19:11:02浏览次数:1  
标签:Cells 日历 excel 生成 startRow startCol ws year Integer

思路比较简单,样式也单一,丑了点。
采用宏和时间函数,计算单元格偏移量,进行单元格填充。

Sub GenerateYearCalendar()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1") ' 更改为你使用的表名
    
    Dim year As Integer
    year = InputBox("请输入年份 (如2025):")
    
    If Not IsNumeric(year) Or year < 1900 Or year > 2100 Then
        MsgBox "无效的年份", vbExclamation
        Exit Sub
    End If
    
    ' 清除现有内容
    ws.Cells.Clear
    
    ' 设置列宽和行高
    ws.Columns.ColumnWidth = 10
    ws.Rows.RowHeight = 20
        
    ' 初始化起始位置
    Dim startRow As Integer, startCol As Integer
    startRow = 0
    startCol = 1
    
    ' 循环生成每个月的日历
    Dim month As Integer
    For month = 1 To 12
        Call GenerateMonthCalendar(ws, year, month, startRow, startCol)
        
        ' 更新下一个月的日历起始位置
        startCol = 1
    Next month
End Sub

Sub GenerateMonthCalendar(ws As Worksheet, year As Integer, month As Integer, ByRef startRow As Integer, ByRef startCol As Integer)
    ' 设置月份标题
    startRow = startRow + 1
    ws.Cells(startRow, 1).Value = year & "年" & month & "月"
    ws.Range(ws.Cells(startRow, startCol), ws.Cells(startRow, startCol + 6)).MergeCells = True
    ws.Range(ws.Cells(startRow, startCol), ws.Cells(startRow, startCol + 6)).HorizontalAlignment = xlCenter
    ws.Range(ws.Cells(startRow, startCol), ws.Cells(startRow, startCol + 6)).VerticalAlignment = xlCenter
    startRow = startRow + 1
    
    ' 设置星期几的标题
    ws.Cells(startRow, 1).Value = "一"
    ws.Cells(startRow, 2).Value = "二"
    ws.Cells(startRow, 3).Value = "三"
    ws.Cells(startRow, 4).Value = "四"
    ws.Cells(startRow, 5).Value = "五"
    ws.Cells(startRow, 6).Value = "六"
    ws.Cells(startRow, 7).Value = "日"
    startRow = startRow + 1
    
    ' 计算第一个日期的位置
    Dim firstDay As Date
    firstDay = DateSerial(year, month, 1)
    Dim startColDate As Integer
    startColDate = Weekday(firstDay, vbMonday) - 1
    
    ' 设置日期
    Dim lastDay As Date
    lastDay = DateSerial(year, month + 1, 0)
    
    Dim row As Integer, col As Integer
    row = startRow
    col = startCol + startColDate
    
    For i = 1 To Day(lastDay)
        ws.Cells(row, col).Value = i
        col = col + 1
        ' 进行换行
        If col > 7 Then
            col = 1
            row = row + 1
        End If
    Next i
    
    ' 更新起始行
    startRow = row
End Sub

标签:Cells,日历,excel,生成,startRow,startCol,ws,year,Integer
From: https://www.cnblogs.com/GISyunqi/p/18675611

相关文章

  • 使用python+pytest+requests完成自动化接口测试(包括html报告的生成和日志记录以及层级
    一、API的选择我们进行接口测试需要API文档和系统,我们选择JSONPlaceholder免费API,因为它是一个非常适合进行接口测试、API测试和学习的工具。它免费、易于使用、无需认证,能够快速帮助开发者模拟常见的接口操作(增、删、改、查)。尤其对于我你们学习接口测试的初学开发者来说,它......
  • 解决cmake编译时*ui,*h存放在不同文件夹下时*.ui无法生成ui_*.h问题
    使用的Qt版本为6.8.1,cmake版本为3.31.0-rc1。遇到问题原因原本的目录结构比较乱,代码文件一多就很不好找,在对文件进行分类管理的过程中发现*ui文件无法生成ui_*.h有问题部分的cmake本来想使用qt_wrap_ui和set(CMAKE_AUTOUICON)让他自动生成ui_*.h的,但是失败了cmake_minimum_......
  • Python生成成绩报告单:从理论到实践
    在教育信息化日益普及的今天,自动化生成和处理学生成绩报告单已成为学校和教育机构的一项重要任务。Python作为一种功能强大且易于学习的编程语言,非常适合用于这种数据处理和报告生成任务。本文将详细介绍如何使用Python生成成绩报告单,包括理论概述和完整的代码示例。一、理论概述......
  • Java程序运行时动态生成日志文件-loj4j
    1.创建Appender;2.logger实例和appender的绑定和解绑3.logger实例使用privatestaticfinalLoggerLOGGER=LogManager.getLogger(DeviceManagerCuppsIOHandler.class);创建<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-a......
  • 一文读懂:大模型RAG(检索增强生成)含高级方法
    RAGRAG检索增强生成(RetrievalAugmentedGeneration),已经成为当前最火热的LLM应用方案。理解不难,就是通过自有垂域数据库检索相关信息,然后合并成为提示模板,给大模型生成漂亮的回答。业界不知道大模型的基本没有,大家对大模型的能力也有一定的了解,但是当我们将大模型应用于实际......
  • Android生成应用的MD5
    我们再申请第三方平台的参数时,需要上传签名文件的MD5,下面通过java代码生成!!!记住一定要在build.gradle配置将应用的签名文件设置成你自己的,使用debug的默认签名是不对的importandroid.content.Context;importandroid.content.pm.PackageManager;importandroid.content.pm.Si......
  • H3CNE-11-生成树协议STP
    STP:SpanningTreeProtocol,可以在提高可靠性的同时又能避免环路带来的各种问题。一句话总结STP的作用:防止交换机环路。为了提高网络的可靠性,交换网络中通常会使用冗余链路,然而冗余链路会给交换网络带来环路风险,并导致广播风暴以及MAC地址表不稳定的问题,进而会影响到用户的......
  • 【multisim让七段显示器连续显示奇数或偶数生成与合成脉冲】2022-6-11
    缘由multisim如何让七段显示器连续显示奇数-其他-CSDN问答 脉冲延时合成极性选择......
  • 搜索与图论(三)-最小生成树(Prim、Kruskal)和二分图(染色法、匈牙利法)
    目录一、最小生成树1.Prim算法 2.Kruskal算法二、二分图  1.判断二分图--染色体法 2.求二分图最大匹配--匈牙利算法一、最小生成树1.Prim算法         分为朴素Prim算法和堆优化Prim算法。写法和dijikstra算法类似,堆优化过程也类似,可类比学习。首......
  • 实现类似Excel的筛选
    以下是在DataGridView中实现类似Excel下拉筛选功能的解决方案:解决思路为DataGridView的列添加DataGridViewComboBoxColumn类型的列,用于显示下拉筛选列表。为DataGridView的ColumnHeaderMouseClick事件添加处理程序,当用户点击列头时,显示下拉筛选菜单。根据列的......