【Excel VBA编程】个性化需求实现:如何定制属于自己的合同状态提醒与预警?
- 2026-11-13 01:54:36
总是听到或看到有人问,编程好学吗?如何入门?多久能学会?它能做些什么?怎么写代码呀?...如果你也有类似的问题那就赶快关注我的公众号,本公众号一直在不间断地分享编程案例和实用技巧,无论你是想提升自动化办公效率还是编程技能,都能收获满满
在Excel使用过程中,你是否会遇到这样的困境:现有的功能总是差那么一点,无法完全匹配你手头的工作流程。这其实是因为每个人的业务场景、数据结构和处理习惯都各不相同,很难有一个“万能”的解决方案能覆盖所有情况
这时候,如果自己懂一些基础的VBA编程知识,情况就完全不同了。它能让你直接与Excel“对话”,命令它为你完成那些重复、复杂且个性化的任务。这时,就不需要到处寻找可能并不存在的模板,或者忍受繁琐的手动操作
例如,接下来要分享的案例——判断合同状态及预警,其实就是一个现成的“模板”。当你需要处理其他有日期提醒、状态判断的操作时(比如设备维保日期、会员有效期等),都可以直接套用这个模板。仅需调整几个关键参数,就能快速为你自己的表格实现自动化
示例:合同到期状态自动提醒与预警
要求:根据合同到期日期,自动计算出还剩下多少天,并将结果显示在表格的H列。另外,要根据剩余天数的不同,进行差异化标记:
红色预警:30天内即将到期的合同,设置为红色字体
过期标识:已经过期的合同,将整行数据的背景色设置为灰色
正常状态:即剩余天数大于30天的合同,设置为绿色字体
最终效果如下图H列所示

代码参考
Sub UpdateContractStatus()Dim ws As WorksheetDim i As LongDim endDate As DateDim daysLeft As LongDim targetRange As Range' 针对当前活动工作表Set ws = ActiveSheetFor i = 2 To 10' 获取结束日期(F列)endDate = ws.Cells(i, "F").Value' 检查结束日期是否为有效日期If IsDate(endDate) Then' 计算剩余天数(结束日期 - 当前日期)daysLeft = DateDiff("d", Date, endDate)' 根据剩余天数设置H列内容和格式If daysLeft > 0 Then' 合同未到期ws.Cells(i, "H").Value = daysLeft & "天后到期"ws.Cells(i, "H").Font.Color = RGB(0, 122, 55) ' 绿色字体提醒' 如果30日内到期,设置红色字体If daysLeft <= 30 Thenws.Cells(i, "H").Font.Color = RGB(255, 0, 0) ' 红色字体提醒End IfElse' 合同已过期(daysLeft <= 0)ws.Cells(i, "H").Value = "已过期" & Abs(daysLeft) & "天"' 整行设置灰色背景色Set targetRange = ws.Range(ws.Cells(i, "A"), ws.Cells(i, "H")) ' 数据A到H列targetRange.Interior.Color = RGB(220, 220, 220) ' 浅灰色背景End Ifws.Cells(i, "H").Font.Bold = True '整体:H列字体加粗End IfNext iws.Columns("H").AutoFit '根据单元格内容,调整H列列宽MsgBox "合同状态更新完成!", vbInformationEnd Sub
如何使用文中代码?以下是个人建议:
如果你是零基础编程新手:
代码中有些固定的数字或文字(比如"E"代表E列,2 To 10代表从第2行到第10行),我们称之为“常量”。你的首要任务就是找到这些地方,把它们整体替换成你表格里对应的内容。接着是根据注释了解每行代码的作用,最终根据自己的需要修改或是裁剪代码,实现个性化要求
如果你有一定的编程基础,想要提升技能:
可以尝试更高级的优化。比如,把这些固定的“常量”改成可以灵活变化的“变量”。更进一步,可以让程序在运行前自动读取表格信息,或者弹出一个Userform窗口让用户自己选择,这样代码就更智能和通用了