夜雨聆风学习资料网

ARTICLE · 1162330

【保姆级教程】如何在Excel中弹出日历界面点击输入日期?小白也能学会!

【保姆级教程】如何在Excel中弹出日历界面点击输入日期?小白也能学会!
点亮☆星标,不错过精彩分享


很多朋友问,在Excel中,如何能像其它软件一样,点击在输入日期的单元格,能弹出一个日历窗口,我们只需要在上面点击具体日期,就能快速输入对应日期?

类似下面这样的效果,太方便了。

真实的情况是:EXCEL或者WPS中,并没有直接现成的菜单功能能实现这个需求,但并不代表这个需求无法实现。

要从0开始实现这个需求,对普通Excel小白可能会有点麻烦,如果你想在以后工作中实现这个需求,请耐心看完本期教程,Excel小白也能实现做到这个需求效果。

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

这部分的开发比较复杂,这里不细讲,也不需要大家会开发,我已经给大家做好了,大家直接按下面步骤操作即可。

1、打开自己的工作用表,打开后台VBE界面

在表格中,按ALT+F11即可,如果是笔记本电脑,或者多功能键盘,可能需要加FN键。如果还不会打开,看一下这篇教程

如何把VBA代码复制到EXCEL中运行?

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 Range    If SKIP_MULTI_SELECTION Then        If Target.Cells.CountLarge > 1 Then            Exit Sub        End If    End If    Set rngCell = Target.Cells(1, 1)    If Not IsInTargetAreas(rngCell) Then        Unload frmRiQi        Exit Sub    End If    If rngCell.Column >= Me.Columns.Count Then        Exit Sub    End If    If SKIP_FORMULA_CELL Then        If rngCell.HasFormula Then            Exit Sub        End If    End If    frmRiQi.ShowDate rngCell, 0, 0, RGB(73, 209, 168)End SubPrivate Function IsInTargetAreas(ByVal rngCell As Range) As Boolean    Dim rng As Range    If Len(TARGET_AREAS) = 0 Then        IsInTargetAreas = True        Exit Function    End If    On Error Resume Next    Set rng = Me.Range(TARGET_AREAS)    On Error GoTo 0    If rng Is Nothing Then        IsInTargetAreas = False        Exit Function    End If    IsInTargetAreas = Not (Application.Intersect(rngCell, rng) Is Nothing)End Function

往期干货文章学习推荐:


根据Excel数据批量填充生成WORD文件

安利一个小巧灵活的抽奖工具,无须安装联网,活动气氛搞起来!

有跨天夜班打卡的班次,建议你更换这几个考勤机

Excel如何筛选指定时间点范围区间内的数据?比如8:06-12:39间的数据?

相关学习资料