ARTICLE · 1162330
【保姆级教程】如何在Excel中弹出日历界面点击输入日期?小白也能学会!
点亮☆星标,不错过精彩分享很多朋友问,在Excel中,如何能像其它软件一样,点击在输入日期的单元格,能弹出一个日历窗口,我们只需要在上面点击具体日期,就能快速输入对应日期?
类似下面这样的效果,太方便了。

真实的情况是:EXCEL或者WPS中,并没有直接现成的菜单功能能实现这个需求,但并不代表这个需求无法实现。
要从0开始实现这个需求,对普通Excel小白可能会有点麻烦,如果你想在以后工作中实现这个需求,请耐心看完本期教程,Excel小白也能实现做到这个需求效果。

原理比较复杂,我只用一句话总结,大家可以不需要学那么深入:用VBA开发一个日历界面,在单元格中调用这个界面点击输入。

这部分的开发比较复杂,这里不细讲,也不需要大家会开发,我已经给大家做好了,大家直接按下面步骤操作即可。
1、打开自己的工作用表,打开后台VBE界面
在表格中,按ALT+F11即可,如果是笔记本电脑,或者多功能键盘,可能需要加FN键。如果还不会打开,看一下这篇教程
2、导入我们做好的日历文件
在VBA代码窗口左侧空白处,右键弹出菜单,导入我们做好的日历文件(日历文件的下载方式在文章最后)


3、在对应工作表中,复制粘贴VBA代码
要在哪个工作表中,添加日历,就在左右工作表列表中,双击打开,比如我们需要在【财务报销】这个表中“B10:B18”单元格中添加日历,其它地方不需要弹出日历。


复制粘贴以下VBA代码:代码较长,为不影响教程进度,我也放在最后

不需要你会写代码,我都写好了 ,大家只需要修改单元格生效区域就行了,如果有多个区域需要设置,就用","间隔,比如:"B10:B18,F5:F10";

关闭VBA代码窗口,返回表格中,就可以看到效果了

4、保存工作簿为“.XLSM”;
由于这个需求是用VBA开发的,所以,做好上述操作后,要保存工作簿时,第一次保存,会弹出这个提示:

要点返回,重新选择保存格式为“.xlsm”,启用宏的工作簿,否则下次再单打开时,会用不了日历功能。

下次打开这个工作簿时,还要点启用宏按钮,不点也是用不了哦~

日历控件文件下载地址:
关注公众号,发私信消息:日历

要复制粘贴VBA代码:
Option Explicit'只需要修改这里的单元格区域,如果有多个区域间用","间隔,比如:"B10:B18,F5:F10"Private Const TARGET_AREAS As String = "B10:B18"Private Const SKIP_FORMULA_CELL As Boolean = TruePrivate Const SKIP_MULTI_SELECTION As Boolean = TruePrivate Sub Worksheet_SelectionChange(ByVal Target As Range)Dim rngCell As RangeIf SKIP_MULTI_SELECTION ThenIf Target.Cells.CountLarge > 1 ThenExit SubEnd IfEnd IfSet rngCell = Target.Cells(1, 1)If Not IsInTargetAreas(rngCell) ThenUnload frmRiQiExit SubEnd IfIf rngCell.Column >= Me.Columns.Count ThenExit SubEnd IfIf SKIP_FORMULA_CELL ThenIf rngCell.HasFormula ThenExit SubEnd IfEnd IffrmRiQi.ShowDate rngCell, 0, 0, RGB(73, 209, 168)End SubPrivate Function IsInTargetAreas(ByVal rngCell As Range) As BooleanDim rng As RangeIf Len(TARGET_AREAS) = 0 ThenIsInTargetAreas = TrueExit FunctionEnd IfOn Error Resume NextSet rng = Me.Range(TARGET_AREAS)On Error GoTo 0If rng Is Nothing ThenIsInTargetAreas = FalseExit FunctionEnd IfIsInTargetAreas = Not (Application.Intersect(rngCell, rng) Is Nothing)End Function