Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3701|回复: 14

[已解决]请老师帮忙看看代码错在哪里?

[复制链接]
发表于 2014-12-30 08:09 | 显示全部楼层 |阅读模式
本帖最后由 dyzx 于 2015-1-4 15:08 编辑

请老师帮忙看看代码错在哪里?各个功能键运行有问题,多谢指教。
最佳答案
2015-1-4 13:48
是有点小问题,改过来了,再试试。

信息1.rar

21.58 KB, 下载次数: 16

 楼主| 发表于 2014-12-31 08:20 | 显示全部楼层
再次恳请老师帮忙看看代码错在哪里?各个功能键运行有什么问题,多谢指教。
回复

使用道具 举报

发表于 2014-12-31 09:29 | 显示全部楼层
你可以做2个子程序,一个是把输入界面的所有数据放到数据表的指定行,一个是把数据表指定行的数据在当前界面显示。然后查询、录入、修改就非常好弄了。另外代码中输入界面和数据表对应关系有点问题。
回复

使用道具 举报

 楼主| 发表于 2014-12-31 09:38 | 显示全部楼层
grf1973 发表于 2014-12-31 09:29
你可以做2个子程序,一个是把输入界面的所有数据放到数据表的指定行,一个是把数据表指定行的数据在当前界面 ...

grf1973老师:你能帮我修改下代码吗?多谢指教,多谢
回复

使用道具 举报

发表于 2014-12-31 13:18 | 显示全部楼层
Sub 查询()         '通过姓名查询记录
  xm = Worksheets("信息录入表").[d5]
  With Worksheets("学生基本情况")
    r_end = .Range("A65536").End(xlUp).Row
    For r = 2 To r_end
        If .Cells(r, "B") = xm Then Call 显示(r): Exit For
    Next
    If r = r_end + 1 Then MsgBox "没有人员信息!"
End With
End Sub
Sub 录入()     '把当前录入表信息更新到数据表的第大行+1
     With Sheets("学生基本情况")
        r = .[b65536].End(3).Row + 1
        Call 记录(r)
    End With
End Sub
Sub 修改()         '通过姓名查询记录后更新记录
  xm = Worksheets("信息录入表").[d5]
  With Worksheets("学生基本情况")
    r_end = .Range("A65536").End(xlUp).Row
    For r = 2 To r_end
        If .Cells(r, "B") = xm Then Call 录入(r): Exit For
    Next
    If r = r_end + 1 Then MsgBox "没有人员信息!"
End With
End Sub
Sub 显示(r)    '把数据表的第r行记录显示在当前录入表中
    Set d = CreateObject("scripting.dictionary")
    With Sheets("学生基本情况")
        For i = 1 To 72
            d(.Cells(1, i).Value) = .Cells(r, i).Value
        Next
    End With
    With Sheets("信息录入表")
        For i = 5 To 49
            a = .Cells(i, "B").Value: b = .Cells(i, "F").Value
            a = Replace(a, "★", ""): b = Replace(b, "★", "")
            .Cells(i, "D") = d(a): .Cells(i, "H") = d(b)
        Next
    End With
End Sub

Sub 记录(r)        '把当前录入表信息更新到数据表的第r行
    Set d = CreateObject("scripting.dictionary")
    With Sheets("信息录入表")
        For i = 5 To 49
            a = .Cells(i, "B").Value: b = .Cells(i, "F").Value
            a = Replace(a, "★", ""): b = Replace(b, "★", "")
            d(a) = .Cells(i, "D").Value: d(b) = .Cells(i, "H").Value
        Next
    End With
    With Sheets("学生基本情况")
        For i = 1 To 72
            .Cells(r, i).Value = d(.Cells(1, i).Value)
        Next
    End With
    MsgBox "更新完毕"
End Sub
回复

使用道具 举报

发表于 2014-12-31 13:20 | 显示全部楼层
懒得把录入表和数据表一个个对,干脆用了字典。你修正一下数据表,表头项目和录入表的项目能一一对应就不会有错了。(录入表中的“★”可以不用考虑)
回复

使用道具 举报

发表于 2014-12-31 13:21 | 显示全部楼层
请看附件。

信息1.rar

22.32 KB, 下载次数: 7

回复

使用道具 举报

 楼主| 发表于 2014-12-31 15:23 | 显示全部楼层
grf1973 发表于 2014-12-31 13:21
请看附件。

grf1973老师:我按照你所讲的将数据表和录入表项目一一对应了,但录入时有点不对,且录完数据后点录入键数据还在(最好清空),便于录下个学生信息,同时运行查询时没有反应,修改完信息点修改也没有反应,请老师指教,多谢

信息录入.rar

22.75 KB, 下载次数: 7

回复

使用道具 举报

发表于 2014-12-31 15:58 | 显示全部楼层
好多还没有一一对应,尤其是监护人一,监护人二。。。。。查询没有反应的原因是你把姓名改成第1列了,原来是在第2列找的。
另外清空功能也加了。

信息录入.rar

25.33 KB, 下载次数: 9

回复

使用道具 举报

 楼主| 发表于 2014-12-31 16:26 | 显示全部楼层
本帖最后由 dyzx 于 2014-12-31 16:28 编辑
grf1973 发表于 2014-12-31 15:58
好多还没有一一对应,尤其是监护人一,监护人二。。。。。查询没有反应的原因是你把姓名改成第1列了,原来是 ...

grf1973老师:是怎样对应,是录入表按编号顺序与学生基本情况表顺序一样吗?同时点了修改键后弹出对话框,不能运行代码?请指教,多谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-3-29 19:46 , Processed in 0.721578 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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