ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 2913|回复: 4

[求助] 督办事项表功能求助

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-9-15 00:22 | 显示全部楼层 |阅读模式
各位巨巨好,本人是个EXCEL菜鸟,最近才发现OFFICE系列这么强大。。。小弟这几天想要设计一个督办事项功能列表,分表给到各部门填写,填写完收回来到同一文件夹后,总表统计汇总数据,但是有些功能不知道如何实现,请各位路过大大不吝赐教:



分表:
1、分表设有“起始日”与“截止日”两列数据,能否让剩余天数只剩3天以下的那行高亮显示?(改变底色)
2、每行高度用适合行高显得太密,能否实现一键调成比较美观的行高?(文字有一排也有多排的)


总表:
1、按条件查询各部门督办事项,设有“部门”(对应到每个分表)、“状态”(对应分表F列,分表中是“完成、未完成、超时完成”三项的下拉框)这两个下拉框来按条件查询督办事项,将符合条件的事项在下面整行显示出来。

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-9-15 06:37 | 显示全部楼层
自己做了一下,还是很多地方不会。。。做了一份示意表请各位帮忙看看,谢谢!
m(_  _)m

督办事项.rar

3.08 KB, 下载次数: 99

TA的精华主题

TA的得分主题

发表于 2014-9-18 10:14 | 显示全部楼层
本帖最后由 sunya_0529 于 2014-9-18 10:15 编辑
LeMUsee 发表于 2014-9-15 06:37
自己做了一下,还是很多地方不会。。。做了一份示意表请各位帮忙看看,谢谢!
m(_  _)m

里面有不少需求是用基础操作或者函数无法解决的,用VBA是个不错的选择。

根据你的需求,大概模拟了数据录入的过程,完成了数据的录入、验证和保存,如下图所示——
QQ截图20140918100622.png

VBA其实没有想象中的那么复杂,了解基本的语法和对象的各种属性、方法,很容易就能驾驭她。下面是用到的代码,都加了注释,可以根据自己的需要修改。
  1. Option Explicit

  2. Private Sub CommandButton1_Click() '保存数据
  3. Dim intRow%, rng As Range
  4. For Each rng In Union([C2], [C4], [C6], [C8], [C10], [C12]) '数据填写验证,不填全不能提交保存
  5.   If Len(rng.Value) = 0 Then
  6.     rng.Select
  7.     MsgBox "[" & rng.Address & "] 里没有填写内容,请补充!"
  8.     Exit Sub
  9.   End If
  10. Next
  11. With Sheets("数据")
  12.   intRow = .[A65536].End(xlUp).Row '获取最后一条记录所在行号
  13.   .Cells(intRow + 1, 1) = Format(Now, "yyyymmddHHMMSS") '流水号
  14.   .Cells(intRow + 1, 2) = [C2] '部门
  15.   .Cells(intRow + 1, 3) = CDate([C4]) '起始日
  16.   .Cells(intRow + 1, 4) = CDate([C6]) '截止日
  17.   .Cells(intRow + 1, 5).FormulaR1C1 = "=IF(TODAY()>=RC[-1],0,RC[-1]-RC[-2])" '剩余天数
  18.   .Cells(intRow + 1, 6) = [C8] '内容
  19.   .Cells(intRow + 1, 7) = [C10] '负责人
  20.   .Cells(intRow + 1, 8) = [C12] '状态
  21.   .Cells(intRow + 1, 9) = [C14] '参与部门
  22. End With
  23. MsgBox "数据保存成功!"
  24. End Sub

  25. Private Sub CommandButton2_Click() '清空重填
  26. Union([C2], [C4], [C6], [C8], [C10], [C12], [C14]).ClearContents
  27. End Sub

  28. Private Sub ListBox1_Change() '将列表框中选中的内容同步到[C14]中
  29. Dim str$, i%
  30. For i = 0 To ListBox1.ListCount - 1
  31.   If ListBox1.Selected(i) = True Then
  32.     str = str & "," & ListBox1.List(i)
  33.   End If
  34. Next
  35. If str = "," Then
  36.   str = ""
  37. Else
  38.   str = Right(str, Len(str) - 1)
  39. End If
  40. [C14] = str
  41. End Sub

  42. Private Sub Worksheet_Activate()
  43. ListBox1.ListFillRange = Range("bumeng").Address '初始化列表框
  44. End Sub

  45. Private Sub Worksheet_Change(ByVal Target As Range)
  46. Application.EnableEvents = False
  47. If Target.Address = "$C$4" Then '起始日期检验并识别快速输入mmdd格式
  48.   If IsDate([C4]) Then
  49.     If [C4] <= "2000-1-1" Then
  50.       [C4] = DateSerial(Year(Date), Int([C4] / 100), [C4] - Int([C4] / 100) * 100)
  51.     End If
  52.   Else
  53.     MsgBox "输入的日期数据不能识别,请重新输入!", vbCritical
  54.     [C4] = ""
  55.   End If
  56. End If
  57. If Target.Address = "$C$6" Then '截止日期检验并识别快速输入mmdd格式
  58.   If IsDate([C6]) Then
  59.     If [C6] <= "2000-1-1" Then
  60.       [C6] = DateSerial(Year(Date), Int([C6] / 100), [C6] - Int([C6] / 100) * 100)
  61.     End If
  62.   Else
  63.     MsgBox "输入的日期数据不能识别,请重新输入!", vbCritical
  64.     [C6] = ""
  65.   End If
  66.   If CDate([C6]) < CDate([C4]) Then
  67.     MsgBox "截止日期不能晚于开始日期,请重新输入!", vbCritical
  68.     [C6] = ""
  69.   End If
  70. End If
  71. Application.EnableEvents = True
  72. End Sub

  73. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  74. On Error Resume Next
  75. Dim arrTemp, i%, j%
  76. If Target.Cells.Count > 1 Then Exit Sub

  77. With ListBox1
  78.     If Target.Address = "$C$14" Then '选中[C14]时显示列表框
  79.     arrTemp = Split([C14], ",")
  80.     For i = 0 To UBound(arrTemp) '将[C14]中的内容同步到列表框中
  81.       For j = 0 To .ListCount - 1
  82.         If .List(i) = arrTemp(i) Then .Selected(i) = True
  83.       Next j
  84.     Next i
  85.     .Visible = True
  86.   Else
  87.     .Visible = False
  88.   End If
  89. End With
  90. End Sub
复制代码




关于查询的功能,可以用透视表做,如果不会的话,先补充一些测试数据上来,再做一下给你。

具体效果见附件了,打开文件时要启用宏。
督办事项.rar (28.35 KB, 下载次数: 170)


TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-1 22:17 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
sunya_0529 发表于 2014-9-18 10:14
里面有不少需求是用基础操作或者函数无法解决的,用VBA是个不错的选择。

根据你的需求,大概模拟了数据 ...

谢谢!前段时间一直在看基础教学书,忘了看回复了。。

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-1 22:35 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
sunya_0529 发表于 2014-9-18 10:14
里面有不少需求是用基础操作或者函数无法解决的,用VBA是个不错的选择。

根据你的需求,大概模拟了数据 ...

稍微看了一下,膜拜大神!m(_ _)m
数据透视表我会做,我要回去好好学习一下巨巨的表格
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-26 19:45 , Processed in 0.048780 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表