ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 谢谢daley老师的指导!教室安排的问题已解决!答案在26楼

[复制链接]

TA的精华主题

TA的得分主题

发表于 2010-6-26 16:29 | 显示全部楼层 |阅读模式
小弟实在水平有限,现在在论坛老师的帮助下只完成了一部分,还有一部分没有完善。我再详细说明下情况,如图 QQ截图未命名1.png QQ截图未命名.png 有这么两张表,“6月份带班分工表”上有已编制好的项目编号,培训时间,培训班级三个字段,教室字段是未录入字段。那么我们点击“班级教室安排按钮”会出现 QQ截图未命名3.png 这些选框,我现在就是要实现上面的“项目编号”,“班级名称”,“时间”栏和“6月份带班分工表”上的项目对应,在点击班级名称小三角栏时候会出现下拉选单,比如选择了“第2培训班”时间上就会出现“6月1日”-“6月7日”,项目编号“201002093” QQ截图未命名5.png ,然后点击查看教室状况。出现如下图示 QQ截图未命名7.png (此部分的工作已解决,会自动筛选范围内数据),此时选择教室的框框比如 QQ截图未命名9.png ,然后就会弹出窗口,询问是否确定or取消,确定的话会自动填充此班级的名称并填充为绿色 QQ截图未命名10.png ,随后对应的教室204会自动填充到“6月份带班分工表”相应位置。

此问题对小弟来讲很复杂,非常着急,现只完成这样了自动筛选教室和时间范围的巩固在哦,我非常需要这样一个手动排课工具,拜托各位老师了,能指点1、2也感激不尽!

[ 本帖最后由 godzhong 于 2010-6-30 17:41 编辑 ]

教室问题.rar

30.99 KB, 下载次数: 23

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-6-26 17:06 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
关于时间跨度这个选项也可不对应,可自己进行选择,因为排课表上时间跨度是合在一起的,我不知道怎么分离开成两个数据

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-6-26 18:46 | 显示全部楼层
各位老师,此问题不知可否指点一二,话说我的这个东西在本版估计以不同方式提了3、4个问题了,都没人理我。。。。

TA的精华主题

TA的得分主题

发表于 2010-6-27 00:42 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
下拉控件不用输入那么些多信息,写起来比较费劲,例如:

Private Sub UserForm_Activate()
    With Sheets("教室安排情况")
    For A = .Range("B" & Rows.Count).End(xlUp).Row To 4 Step -1
    For b = 0 To ComboBox1.ListCount - 1
   
    If .Cells(A, 2) = ComboBox1.List(b) Then GoTo 100
    Next b
    ComboBox1.AddItem .Cells(A, 2)
100:
    Next A
    End With
End Sub

TA的精华主题

TA的得分主题

发表于 2010-6-27 05:44 | 显示全部楼层
Private Sub ComboBox1_Change()
    On Error Resume Next
   
    With Sheets("6月份带班分工表")
     x = .Range("C:C").Find(ComboBox1.Text).Row
    ComboBox9.Text = .Cells(x, 1)
    ComboBox2.Text = .Cells(x, 4)
    End With
    Call p1
End Sub

Private Sub ComboBox2_Change()
    On Error Resume Next
   
    With Sheets("6月份带班分工表")
     x = .Range("D:D").Find(ComboBox2.Text).Row
    ComboBox9.Text = .Cells(x, 1)
    ComboBox1.Text = .Cells(x, 3)
    End With
    Call p1
End Sub

Private Sub ComboBox3_Change()
    On Error Resume Next
   
    If ComboBox3.ListIndex <> -1 And ComboBox4.Text <> "" Then
    ComboBox7.Clear
    ComboBox4.SetFocus
   
    Dim x As Byte
    For x = 1 To Day(DateSerial(ComboBox3.Text, ComboBox4 + 1, 0))
    ComboBox7.AddItem DateSerial(ComboBox3.Text, ComboBox4, x)
    Next
    ComboBox7.ListIndex = 0
    End If
End Sub

Private Sub ComboBox4_Change()
    On Error Resume Next
   
    If ComboBox4.ListIndex <> -1 And ComboBox3.Text <> "" Then
    ComboBox7.Clear
    Dim x As Byte
    For x = 1 To Day(DateSerial(ComboBox3.Text, ComboBox4 + 1, 0))
    ComboBox7.AddItem DateSerial(ComboBox3.Text, ComboBox4, x)
    Next
    End If
   
    ComboBox7.ListIndex = 0
End Sub

Private Sub ComboBox5_Change()
    On Error Resume Next
   
    If ComboBox5.ListIndex <> -1 And ComboBox6.Text <> "" Then
    ComboBox8.Clear
    ComboBox6.SetFocus
   
    Dim x As Byte
    For x = 1 To Day(DateSerial(ComboBox5.Text, ComboBox6 + 1, 0))
    ComboBox8.AddItem DateSerial(ComboBox5.Text, ComboBox6, x)
    Next
    ComboBox8.ListIndex = 0
    End If
End Sub

Private Sub ComboBox6_Change()
    On Error Resume Next
   
    If ComboBox6.ListIndex <> -1 And ComboBox5.Text <> "" Then
    ComboBox8.Clear
   
    Dim x As Byte
    For x = 1 To Day(DateSerial(ComboBox5.Text, ComboBox6 + 1, 0))
    ComboBox8.AddItem DateSerial(ComboBox5.Text, ComboBox6, x)
    Next
    End If
    ComboBox8.ListIndex = 0
End Sub

Private Sub ComboBox9_Change()
    On Error Resume Next
   
    With Sheets("6月份带班分工表")
     x = .Range("A:A").Find(ComboBox9.Text).Row
    ComboBox1.Text = .Cells(x, 3)
    ComboBox2.Text = .Cells(x, 4)
    End With
    Call p1
End Sub

Private Sub CommandButton1_Click()
    'If CheckBox1.Value = False And CheckBox2.Value = False And CheckBox3.Value = False Then
    'MsgBox "请选择填充的时间段!!", 16, "提示"
    'Exit Sub
    'End If
    'Cells.Interior.Pattern = xlNone
   
    If ComboBox1.Text = "" Then
    ComboBox1.SetFocus
    MsgBox "班级为空!!", 64, "请选择下拉列表"
   
    Else
   
    If MsgBox("是否“" & Me.ActiveControl.Caption & "” ?", 36, "询问") = 7 Then Exit Sub
   
    With Selection
    .Interior.ColorIndex = 4
    .Value = ComboBox1.Text
    End With
   
    With Sheets("6月份带班分工表")
    .Cells(.Range("C:C").Find(ComboBox1.Text).Row, 4) = Cells(ActiveCell.Row, 1) & "-" & Cells(ActiveCell.Row, 2)
    End With
   
    Unload Me
    End If
End Sub

Private Sub CommandButton2_Click()
    'If MsgBox("是否退出", 36, "询问") = 7 Then Exit Sub
    Unload Me
End Sub

Private Sub p1()
    On Error Resume Next
   
    With Sheets("6月份带班分工表")
    x = .Cells(.Range("A:A").Find(ComboBox9.Text).Row, 2)
   
    a = Left(x, InStr(x, "—") - 1)
    a1 = Val(Left(a, InStr(a, "月") - 1))
    a2 = Val(Replace(Right(a, Len(a) - InStr(a, "月")), "日", ""))
   
    b = Right(x, Len(x) - InStr(x, "—"))
    b1 = Val(Left(b, InStr(b, "月") - 1))
    b2 = Val(Replace(Right(b, Len(b) - InStr(b, "月")), "日", ""))
   
   
   
    ComboBox3.Text = Left(.Cells(.Range("A:A").Find(ComboBox9.Text).Row, 1), 4)
    ComboBox4.Text = a1
    ComboBox7.Text = Format(DateSerial(Left(.Cells(.Range("A:A").Find(ComboBox9.Text).Row, 1), 4), a1, a2), "yyyy-m-dd")
   
    ComboBox5.Text = Left(.Cells(.Range("A:A").Find(ComboBox9.Text).Row, 1), 4)
    ComboBox6.Text = b1
    ComboBox8.Text = Format(DateSerial(Left(.Cells(.Range("A:A").Find(ComboBox9.Text).Row, 1), 4), b1, b2), "yyyy-m-dd")
   
    End With
End Sub


Private Sub UserForm_Activate()
    With Sheets("教室安排情况")
    For a = .Range("B" & Rows.Count).End(xlUp).Row To 4 Step -1
    For b = 0 To ComboBox2.ListCount - 1
   
    If .Cells(a, 2) = ComboBox2.List(b) Then GoTo 100
    Next b
    ComboBox2.AddItem .Cells(a, 2)
100:
    Next a
    End With
   
   
    Dim x As Integer
    For x = 1 To 12
    ComboBox4.AddItem x
    ComboBox6.AddItem x
    Next
   
    Dim y As Integer
    For y = 0 To 10
    ComboBox3.AddItem 2010 + y
    ComboBox5.AddItem 2010 + y
    Next
   
   
    With Sheets("6月份带班分工表")
    Dim z As Integer
    For z = 3 To .Range("A" & Rows.Count).End(xlUp).Row Step 1
    ComboBox9.AddItem .Cells(z, 1)
    ComboBox1.AddItem .Cells(z, 3)
    Next
    End With
   
End Sub

Private Sub UserForm_Initialize()
    ComboBox3.Text = Year(Date)
    ComboBox5.Text = Year(Date)
   
    ComboBox4.Text = Month(Date)
    ComboBox6.Text = Month(Date)
   
    ComboBox7.Text = VBA.DateSerial(ComboBox3.Text, ComboBox4.Text, 1)
    ComboBox8.Text = VBA.DateSerial(ComboBox3.Text, ComboBox4.Text + 1, 0)
   
End Sub

[ 本帖最后由 daley 于 2010-6-27 05:51 编辑 ]

教室问题A.rar

30.89 KB, 下载次数: 22

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-6-27 09:16 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
daley版主您好!您辛苦了!半夜还在设计,小弟十分钦佩。附件已查看,有几个问题还要向您请教。
1、我点击了如图的界面 QQ截图未命名.png 然后点击查看教室状况,不知为何没有反应,原来我的附件有一段针对“教室查看状况”相关的代码

Private Sub CommandButton3_Click()
With Application
.ScreenUpdating = False
End With
    If Me.ComboBox1.ListIndex = -1 Or Me.ComboBox2.ListIndex = -1 Or Me.ComboBox3.ListIndex = -1 Then MsgBox "所需查找项目,未选择全": Exit Sub
    Selection.AutoFilter field:=1
    Selection.AutoFilter field:=1, Criteria1:=Me.ComboBox1.List(Me.ComboBox1.ListIndex)
    Call aa(Me.ComboBox2.List(Me.ComboBox2.ListIndex), Me.ComboBox3.List(Me.ComboBox3.ListIndex))
End Sub

其中ComboBox3对应现在的教室厅,ComboBox1和ComboBox2对应时间段。
点击查看教室状况后我的想法是出现如下状况 QQ截图未命名1.png ,而且可能会涉及到同一类型的教室会有好多个,我们可以选择其中一个再填充。还请您指教。
2、我现在点击“填充底色并关闭”,填充的也不是我所需的教室类型,看样子填充的是我最开始点击的那个单元格。。和时间段、所选教室似乎没有关系。。。
3、另外填充关闭后显示到“6月带班分工表”的教室信息也不准确,主要是没有教室号比如“-阶梯教室110”而不是所需要的“101-阶梯教室110”,我看了下应该是因为“教室”那列的单元格数据对应的是“人数”字段的“上午”所以会有如果选择“下午”、“晚上”就会出现没有教室名的问题
4、还有就是如果一个班级选择了多个教室,能否都能显示在对应位置?
辛苦了,测试中遇到上述问题,不知如何能解决呢。另外我想启动这个排教室的系统只能点选左上角的打开窗体,不想点击其他单元格就会弹出窗体,不知如何实现?十分感谢

[ 本帖最后由 godzhong 于 2010-6-27 10:46 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-6-27 09:48 | 显示全部楼层
补充一下,其实我就是想分两步,第一步,只能点击左上角“打开窗体” QQ截图未命名1.png 根据教室厅和时间跨度的选择锁定可选教室和时间段的区域,然后鼠标选定区域后会再弹出 QQ截图未命名.png 的选项进行填充,然后教室数据输入到“6月份带班分工表”对应位置即可。谢您指教!

[ 本帖最后由 godzhong 于 2010-6-27 09:57 编辑 ]

TA的精华主题

TA的得分主题

发表于 2010-6-27 12:45 | 显示全部楼层
主要是几个问题没有相关联,例如:

问题1、     工作表“6月份带班分工表”的D列没有数据,在加载时无法同时满足“班级名称”与“教窒厅”进行匹配

问题2 、            之前的代码只是赋值在当前所选项中的区域单元格进行填充底色,因为你没有“告诉”或明确的给予说明,要在哪些区域进行填充,我不好写。

可以做到选择“教窒厅”后自动对该教窒厅的区域,例如该教窒的时间段为(从6月1日-6月8日),则选中该区域的6月1日-6月8日的所在(上午、中午、下下午)的行并填充底色,问题就是教窒必须先在“6月份带班分工表”里面设置好

问题3、   

你说的:另外填充关闭后显示到“6月带班分工表”的教室信息也不准确,主要是没有教室号比如“-阶梯教室110”而不是所需要的“101-阶梯教室110”,我看了下应该是因为“教室”那列的单元格数据对应的是“人数”字段的“上午”所以会有如果选择“下午”、“晚上”就会出现没有教室名的问题

这是因为A列的相对单元格是合并的单元,只有左上角的单元格才有数值,所以Activecell只是获取该左上角的数值,我觉得这个问题可以简单一点处理,就是A列的合并单元格必须必须取消合并后有数值,例如:

该方式
      中教室50    上午
204      中教室50     中午
       中教室50    下午


204       中教室50    上午
204      中教室50     中午
204      中教室50    下午
建议为:

[ 本帖最后由 daley 于 2010-6-27 12:48 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-6-27 12:59 | 显示全部楼层
daley老师中午好!谢谢您的回复
该方式
      中教室50    上午
204      中教室50     中午
       中教室50    下午


204       中教室50    上午
204      中教室50     中午
204      中教室50    下午
建议为:


这个没问题,这样处理很好。

quote:问题2 、            之前的代码只是赋值在当前所选项中的区域单元格进行填充底色,因为你没有“告诉”或明确的给予说明,要在哪些区域进行填充,我不好写。

可以做到选择“教窒厅”后自动对该教窒厅的区域,例如该教窒的时间段为(从6月1日-6月8日),则选中该区域的6月1日-6月8日的所在(上午、中午、下下午)的行并填充底色,问题就是教窒必须先在“6月份带班分工表”里面设置好



还要向您指教:因为有些规模的教室会有很多备选项,比如50人的中教室有7、8个,我的想法是点击“查看教室状况”后,筛选出这些备选教室和指定时间段,然后操作人员圈定相关区域,会弹出窗体“填充并关闭”,此时填充即可。填充后表格恢复到未筛选状态,相应的教室数据也会录入到对应位置,因为这是一个开放式的表格,是大家自己根据需求排课表的,人数的信息都在各自手里,所以“6月分工安排表”D列肯定是空的。这个应该不会影响排教室吧,我的想法是让大家自己在规模同样的教室里自己选择喜欢的教室。

对了,还有一点很抱歉没说清楚,教室厅那个选项不需要匹配,是操作人员根据自己需要选择的。这个之前表达不清晰,还请您谅解。

还有一个细节的问题,就是如果班级名称很长,那么填充时能不能自适应改变字体大小,适应单元格的大小呢?

按您的指导,我把教室序号调整了一下,附件重新上传给您

[ 本帖最后由 godzhong 于 2010-6-27 13:27 编辑 ]

教室问题 A.rar

32.63 KB, 下载次数: 12

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-6-27 14:40 | 显示全部楼层
老师,其实这个系统主要就是方便大家排教室用的,目的是排教室,不是填充,填充是为了查看教室使用情况。

[ 本帖最后由 godzhong 于 2010-6-27 17:11 编辑 ]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-10-7 13:18 , Processed in 0.045629 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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