下雪了,冷空气如约而至!
北方早已成了雪国,而南方看个雪还是难题,不过取暖基本靠抖的南方,寒冷还是那么的真实。
不管是北方还是南方,每年的冬天,最让小伙伴们期盼的除了下雪就是过年了。
眼看就要到元旦,还有不到两个月就要过年啦。
说到过年,照往常的传统,家家户户采办年货怎么也少不了一样东西--日历。
早些年菊花还是一种优雅植物的时候,日历这东西可是家家必备、人人必看的家中宝。
我们经常听到的一句俗话:“出门不看黄历”,也许就暗示着看日历的重要性。
我们的日常生活、工作和出行,都免不了要看一眼日历。
每天查看日历,就和每天吃饭、睡觉、看天气一样,已经是每个人不知不觉、深入骨髓的习惯了。
我们赶上了网络时代,又进入了智能手机时代,现在不论哪款手机,都自带有日历,有的功能强大,有的样子花哨。
在这种背景下,小伙伴们可能要问一句,还有必要自己再做一个吗?
问得好!
要回答这个问题,可能要提及一些陈年往事。
部分80后的小伙伴们或许有印象,在上个世纪90年代,一种叫彩色挂历的东西一度成为当时极具年代特色的家庭热门物件之一。
在家中的墙壁上这么挂上一幅,即可以查看日期,又可以当作书法画作欣赏,客厅的档次噌噌长了好几级。
当时的挂历上印有各种风景名胜、模特美女,是应有尽有,即使用现在的眼光看,也无愧是妥妥的高档艺术品啊!
你可能觉得我言过其实,非也,你不知道的是,当时的一部分摄影师因拍摄挂历发了大财,从而还产生了一条拍摄挂历致富的产业链,由此出现了摄影爱好者这样的群体。
只是后来由于互联网的迅猛发展,以及参与的人数增多,这条产业链才在上个世纪90年代末达到顶峰后迅速衰落。
有点跑题了好像,哈哈,挂历的具体历史渊源挺有趣的,小伙伴们如有兴趣可以网上翻翻看。
好了,可以回答之前的问题了,我想把它做成挂历的样子!
当然了,风景、美女啥的就不要了,想看妹子网上一大把,我们还是把日历做得清爽一些吧。
我只做个简单的、字体大一点能保护视力的挂历,有日期带农历和节日,可以查看工作日或休息日的就可以了。
自己设计样式,简单又大方
通常一个月最多有31天,所以按一个星期七天算,设计成7列x5行的排列基本就可以容纳一个月的日期。
如果有月末日期超出7x5的阵列格子之外,那么就把它与上一行的日期并列在同一格子内即可。
想得挺好,具体怎么搞?
新建两张 Sheet 表,一张表叫“一月结果”,另一张表叫“一月设定”。
一月设定
中输入数据及执行代码,而 一月结果
则产生最终效果。
罗列公历日期、农历日期和颜色
实际操作中日期的排列是一件很麻烦的事儿。
我做了个简单的VBS,让它自动排列日期,当然日期的录入还是手动的,因为涉及到农历。
中国的农历日期设定没有固定规律,每年的闰月就把老外给搞蒙了,唯一的办法只有对照现行的历法。
故此我也找不到什么更高明的办法,只好手输了。
不过还好,手输时还要带有节气和节日,这些也是无法自动实现的,如果你有什么高招,还请不吝赐教。
五七三十五,五行七列共35个格子,可以按以下方式排列相应的内容。
- 第一列:序号即星期,只是我是按照每周从周日开始至周六结束的,如果你想调整也是可以的。
- 第二列:公历日期,对照星期一列填写相应日期。
- 第三列:农历日期,对照公历日期,如遇节气、节日等,则填写相应内容。
- 第四列:定义颜色,周六绿色
vbGreen
,周日及法定假日红色vbRed
,非当前月份则为灰色vbGrayText
。
每个月份都正确无误地按照上述方法排列填写,然后就等 VBS
脚本登场了。
自动排列并格式化日历单元格
脚本是我随便写的,并不十分规范,也仅仅代替了部分手输的工作,仅供参考哈。
在 Excel
中放上一个按钮,在这个按钮的 Click
事件中写上代码。
主要分两块,一个是读取我们刚才填写的单元格内容,另一个就是格式化后回写到指定日历表中。
以下为简化的演示代码。
1、读取日期等内容
For i = 2 To 36
strGongLiRiQi = Worksheets("一月设定").Range("B" & i).Value
strNongLiRiQi = Worksheets("一月设定").Range("C" & i).Value
strColor = Worksheets("一月设定").Range("D" & i).Value
If Len(Trim(strGongLiRiQi)) = 0 Then
arrTemp(i - 1) = ""
Else
arrTemp(i - 1) = strGongLiRiQi & "|" & vbCrLf & strNongLiRiQi & "|" & strColor
End If
Next
For i = 1 To 35
ReDim arrContent(2) As String
If Len(Trim(arrTemp(i))) <> 0 Then
arrContent = Split(arrTemp(i), "|")
Select Case i Mod 7
Case 1
Set rg = Worksheets(strWorksheets).Range("B" & CStr(8 + 5 * (i \ 7)))
Case 2
Set rg = Worksheets(strWorksheets).Range("F" & CStr(8 + 5 * (i \ 7)))
Case 3
Set rg = Worksheets(strWorksheets).Range("J" & CStr(8 + 5 * (i \ 7)))
Case 4
Set rg = Worksheets(strWorksheets).Range("N" & CStr(8 + 5 * (i \ 7)))
Case 5
Set rg = Worksheets(strWorksheets).Range("R" & CStr(8 + 5 * (i \ 7)))
Case 6
Set rg = Worksheets(strWorksheets).Range("V" & CStr(8 + 5 * (i \ 7)))
Case 0
Set rg = Worksheets(strWorksheets).Range("Z" & CStr(8 + 5 * (i \ 7 - 1)))
End Select
' 格式化并回写函数,见下文
Call setFormat(rg, arrContent)
End If
Next
2、格式化并回写日历表
Function setFormat(rg As Range, arrContentX() As String)
rg.Value = arrContentX(0) & arrContentX(1)
'start和length用来定位需要设置字体的文字,这里表示从第一个字符开始的2个字符
With rg.Characters(Start:=1, Length:=Len(arrContentX(0))).Font
.Name = "方正舒体"
.FontStyle = "加粗"
.Size = 72
End With
With rg.Characters(Start:=Len(arrContentX(0)) + 1, Length:=Len(arrContentX(1))).Font
.Name = "微软雅黑"
.FontStyle = "常规"
.Size = 20
End With
If arrContentX(2) = "vbRed" Then
rg.Font.Color = vbRed
Else
If arrContentX(2) = "vbGreen" Then
rg.Font.Color = vbGreen
Else
If arrContentX(2) = "vbGrayText" Then
rg.Font.Color = &HCCCCCC
Else
rg.Font.Color = vbBlack
End If
End If
End If
End Function
不厌其烦,细微调整,开花结果
一年十二个月,但每年日期与节气节日对应不尽相同,更有公历与农历之分,所以还需要各自调整,再重新生成相应月份的日历表格。
最后手动编辑超出5x7格子的日期,另外再确认每周的节日颜色等等,基本就成了。
如果你觉得好麻烦,那么就直接到我这儿下载现成的吧。
我基本每年都会做一份这样的日历,而且特意做成了每月份A3大小,便于打印查看。
如果你喜欢,可以将它挂在墙上,也可以赠送他人。
要是小伙伴们觉得不错,别忘记关注@网管小贾哦!
打印预览
在这里,我会定期更新日历,如有需要各位小伙伴可以提前提醒我哦!
2022年日历(清爽A3打印版)@网管小贾(203K)
下载链接:https://pan.baidu.com/s/1TZi9erfzakIKC7wnQIgpFQ
提取码:

★扫码关注公众号, 发送【000793】获取阅读密码
WeChat@网管小贾 | www.sysadm.cc