ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 如何将两个DBF文件导入到相应的工作薄对应的工作表中

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-10-16 16:25 | 显示全部楼层
zhaogang1960 发表于 2012-10-16 16:14
请说明下图三个按钮都写到哪个工作表:

导入学生库,写入到学生表中
导入家长库,写入到家长表中
导入合并库,写入到信息册表中

TA的精华主题

TA的得分主题

发表于 2012-10-16 16:26 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
教育行业的事例,支持一下

点评

大力支持教育事业  发表于 2012-10-16 16:38

TA的精华主题

TA的得分主题

发表于 2012-10-16 16:26 | 显示全部楼层
  1. Sub 导入学生库()
  2.     Dim cnn As Object
  3.     Dim SQL As String
  4.     Dim s$
  5.     Set cnn = CreateObject("ADODB.Connection")
  6.     cnn.Open "Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=" & ThisWorkbook.Path & ";Exclusive=No;"
  7.     SQL = "select * from z221801"
  8.     s = [J1]
  9.     If s <> "" And s <> "全部" Then SQL = SQL & " where left(学籍编号,10) like '%" & s & "'"
  10.     With Sheets("学生")
  11.         .UsedRange.Offset(1).ClearContents
  12.         .Range("A2").CopyFromRecordset cnn.Execute(SQL)
  13.     End With
  14.     cnn.Close
  15.     Set cnn = Nothing
  16. End Sub

复制代码

TA的精华主题

TA的得分主题

发表于 2012-10-16 16:29 | 显示全部楼层
  1. Sub 导入家长库()
  2.     Dim cnn As Object
  3.     Dim SQL As String
  4.     Dim s$
  5.     Set cnn = CreateObject("ADODB.Connection")
  6.     cnn.Open "Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=" & ThisWorkbook.Path & ";Exclusive=No;"
  7.     SQL = "select * from zj221800"
  8.     s = [J1]
  9.     If s <> "" And s <> "全部" Then SQL = SQL & " where left(学籍编号,10) like '%" & s & "'"
  10.     With Sheets("家长")
  11.         .UsedRange.Offset(1).ClearContents
  12.         .Range("A2").CopyFromRecordset cnn.Execute(SQL)
  13.     End With
  14.     cnn.Close
  15.     Set cnn = Nothing
  16. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2012-10-16 16:33 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
  1. Sub 导入合并库()
  2.     Dim cnn As Object, rs As Object
  3.     Dim SQL As String, d As Object, arr(), i&, l&, j&, n&, t, s$
  4.     Set d = CreateObject("scripting.dictionary")
  5.     Set cnn = CreateObject("ADODB.Connection")
  6.     cnn.Open "Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=" & ThisWorkbook.Path & ";Exclusive=No;"
  7.     Set rs = CreateObject("ADODB.Recordset")
  8.     s = [J1]
  9.     SQL = "select * from z221801"
  10.     If s <> "" And s <> "全部" Then SQL = SQL & " where left(学籍编号,10) like '%" & s & "'"
  11.     rs.Open SQL, cnn, 1, 3
  12.     With Sheets("信息册")
  13.         .UsedRange.Offset(1).ClearContents
  14.         .Range("A2").CopyFromRecordset rs
  15.         rs.MoveFirst
  16.         ReDim arr(1 To rs.RecordCount, 1 To 12)
  17.         For i = 1 To rs.RecordCount
  18.             d(rs.Fields(0).Value) = i
  19.             rs.MoveNext
  20.         Next
  21.         SQL = "select * from zj221800"
  22.         If s <> "" And s <> "全部" Then SQL = SQL & " where left(学籍编号,10) like '%" & s & "'"
  23.         Set rs = CreateObject("ADODB.Recordset")
  24.         rs.Open SQL, cnn, 1, 3
  25.         For i = 1 To rs.RecordCount Step 2
  26.             n = 0
  27.             For l = i To i + 1
  28.                 t = d(rs.Fields(0).Value)
  29.                 If t <> "" Then
  30.                     For j = 1 To 6
  31.                         arr(t, j + n) = rs.Fields(j).Value
  32.                     Next j
  33.                 End If
  34.                 n = n + 6
  35.                 rs.MoveNext
  36.             Next l
  37.         Next i
  38.         .Range("o2").Resize(UBound(arr), 12) = arr
  39.     End With
  40.     rs.Close
  41.     cnn.Close
  42.     Set rs = Nothing
  43.     Set cnn = Nothing
  44. End Sub

复制代码

TA的精华主题

TA的得分主题

发表于 2012-10-16 16:36 | 显示全部楼层
请注意,J1为空或全部就导入全部数据,否则加上学籍编号的第9、10两位条件
请看附件
如何将两个DBF文件导入到相应的工作薄对应的工作表中.rar (108.75 KB, 下载次数: 23)

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-10-16 17:14 | 显示全部楼层
感谢版主的再一次帮助,解决了一大难题。
目前导入合并库时,是导入全部字段,
如果再加一个按钮,导入学籍册
只导入以下字段,能行吗,除监护人姓名是zj221800.dbf中的外,其他全是z221800.dbf中的信息。监护人姓名,填写第一监护人姓名。
如果第一监护人姓名为“无”或空,则填写第二监护人姓名。仍然是先选择届级,再运行按钮。
学籍编号        姓名        "性别"        身份证号        "出生年月日"        民族        班级        家庭住址        "监护人姓名"        联系电话

TA的精华主题

TA的得分主题

发表于 2012-10-16 17:23 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
yzyyyyyyy 发表于 2012-10-16 17:14
感谢版主的再一次帮助,解决了一大难题。
目前导入合并库时,是导入全部字段,
如果再加一个按钮,导入学 ...

我有阅读困难,还是模拟效果吧

TA的精华主题

TA的得分主题

发表于 2012-10-16 17:50 | 显示全部楼层
  1. Sub 导入学籍册()
  2.     Dim cnn As Object, rs As Object
  3.     Dim SQL As String, d As Object, arr(), i&, l&, j&, n&, t, s$
  4.     Set d = CreateObject("scripting.dictionary")
  5.     Set cnn = CreateObject("ADODB.Connection")
  6.     cnn.Open "Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=" & ThisWorkbook.Path & ";Exclusive=No;"
  7.     Set rs = CreateObject("ADODB.Recordset")
  8.     s = [J1]
  9.     SQL = "select 学籍编号,姓名,性别,身份证号,出生年月,民族,班级,家庭住址,'',联系电话,备注 from z221801"
  10.     If s <> "" And s <> "全部" Then SQL = SQL & " where left(学籍编号,10) like '%" & s & "'"
  11.     rs.Open SQL, cnn, 1, 3
  12.     With Sheets("学籍册")
  13.         .UsedRange.Offset(3).ClearContents
  14.         ReDim arr(1 To rs.RecordCount, 10)
  15.         For i = 1 To rs.RecordCount
  16.             d(rs.Fields(0).Value) = i
  17.             For j = 0 To rs.Fields.Count - 1
  18.                 If j <> 8 Then arr(i, j) = rs.Fields(j).Value
  19.             Next j
  20.             rs.MoveNext
  21.         Next i
  22.         SQL = "select 学籍编号,监护人 from zj221800"
  23.         If s <> "" And s <> "全部" Then SQL = SQL & " where left(学籍编号,10) like '%" & s & "'"
  24.         Set rs = CreateObject("ADODB.Recordset")
  25.         rs.Open SQL, cnn, 1, 3
  26.         For i = 1 To rs.RecordCount Step 2
  27.             For l = i To i + 1
  28.                 t = d(rs.Fields(0).Value)
  29.                 If Len(arr(t, 8)) = 0 Then
  30.                     If Len(rs.Fields(1).Value) And t <> "" Then arr(t, 8) = rs.Fields(1).Value
  31.                 End If
  32.                 rs.MoveNext
  33.             Next l
  34.         Next i
  35.         .Range("a4").Resize(UBound(arr), 11) = arr
  36.     End With
  37.     rs.Close
  38.     cnn.Close
  39.     Set rs = Nothing
  40.     Set cnn = Nothing
  41. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2012-10-16 17:52 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-6 15:34 , Processed in 0.026231 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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