Excel精英培训网

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

[已解决]如何修改从Access数据库里的姓名(曾为日期)来提取相应信息,谢谢!

[复制链接]
发表于 2013-5-18 17:57 | 显示全部楼层 |阅读模式
本帖最后由 qinhuan66 于 2013-5-18 18:05 编辑

黄色区域现在是根据从Microsoft Access数据库的年份来提取数据,如何修改从Microsoft Access数据库里的姓名来提取相应信息,谢谢!

报销统计表(测试).rar (37.31 KB, 下载次数: 5)
发表于 2013-5-18 19:10 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2013-5-18 19:12 | 显示全部楼层
hwc2ycy 发表于 2013-5-18 19:10
查询改成姓名不会?

我改了语句不行。谢谢
回复

使用道具 举报

发表于 2013-5-18 19:17 | 显示全部楼层    本楼为最佳答案   
好早以前写的代码了,现在都不用这个格式了。
  1. Sub 年度查询Access()
  2. Range("A6:AG65536").ClearContents
  3. With Sheets("年度报销统计查询")
  4.         .Unprotect ("695360052")
  5.         .[C55].FormulaR1C1 = ""
  6.          .Protect ("695360052")
  7.     End With
  8.     Dim AccessFile As String, Database As String
  9.     Dim arr(), i&, arrTemp
  10.     Dim AdoConn As Object, AdoRst As Object
  11.     Dim StrConn$, strSql$
  12.     Dim strName$
  13.     '检查是否输入年月
  14.         If Len([c3]) = 0 Then
  15.         MsgBox "请在C3单元格内输入要查询的姓名"
  16.         Exit Sub
  17.     End If
  18.     strName = [c3]
  19.    
  20.     On Error GoTo Errcheck
  21.     AccessFile = ThisWorkbook.Path & "\data.mdb"
  22.     Database = "data"
  23.     If Dir(AccessFile) = "" Then
  24.         MsgBox "ACCESS数据文件不存在"
  25.         Exit Sub
  26.     End If

  27.     StrConn = "Provider= Microsoft.Jet.OLEDB.4.0;" & _
  28.               "Data Source=" & AccessFile & ";"""
  29.     Set AdoConn = CreateObject("ADODB.Connection")
  30.     With AdoConn
  31.         .CursorLocation = 3    '游标类型
  32.         .CommandTimeout = 5    '超时
  33.         .connectionTimeout = 5  '超时
  34.         .Open StrConn       '打开
  35.     End With
  36.     '检测ADO状态
  37.     If AdoConn.State <> 1 Then MsgBox "数据库连接失败", vbCritical + vbOKOnly: Exit Sub
  38.     '查询的年,月
  39.         strSql = "select 报销月份,序号,定点医疗机构名称,医保卡号,单位名称,姓名,性别,年龄,入院日期,出院日期,住院天数,出院诊断,本次住院医疗费总额,甲类药费,乙类药费,进口药费,自费药费,超出范围,进口材料费,国产材料费,特殊检查费特殊治疗费,丙类项目,其它费用,起付段金额,个人政策自付小计,自费药品及自费项目,实际结算自付,统筹基金支付,大病求助基金支付,个人支付金额,本年住院次数,本年范围内费用累计,本年大病范围内费用累计 from " & Database & " where 姓名='" & strName & "'"
  40.     Set AdoRst = AdoConn.Execute(strSql)
  41.     If AdoRst.RecordCount = 0 Then
  42.         MsgBox "无合乎条件的数据"
  43.         Exit Sub
  44.     Else
  45.         Select Case AdoRst.RecordCount
  46.         Case 1:
  47.             arrTemp = WorksheetFunction.Transpose(AdoRst.GetRows)
  48.             ReDim arr(1 To 1, 1 To UBound(arrTemp))
  49.             For i = LBound(arrTemp) To UBound(arrTemp)
  50.                 arr(1, i) = arrTemp(i)
  51.             Next
  52.             arrTemp = arr
  53.         Case Else:
  54.             arrTemp = WorksheetFunction.Transpose(AdoRst.GetRows)
  55.         End Select
  56.     End If
  57.     AdoConn.Close
  58.     Set AdoConn = Nothing
  59.     '关刷屏
  60.     Application.ScreenUpdating = False
  61.     '列,行坐标
  62.     Dim lCol&, lPos&, arr2
  63.     lCol = 1
  64.     For i = LBound(arrTemp) To UBound(arrTemp)
  65.         lPos = Cells(Rows.Count, lCol).End(xlUp).Row + 1
  66.         '前5行是标题行,因为有合并格,强制从6行开始
  67.         If lPos < 6 Then lPos = 6
  68.         '判断是否超过5000行
  69.         If lPos > 5000 Then
  70.             Do
  71.                 lCol = lCol + 6
  72.                 lPos = Cells(Rows.Count, lCol).End(xlUp).Row + 1
  73.                 If lPos < 6 Then lPos = 6
  74.             Loop Until lPos < 5000
  75.         End If
  76.         '按行写入,考虑到要写满要换列的情况
  77.         arr2 = WorksheetFunction.Index(arrTemp, i, 0)
  78.         Cells(lPos, lCol).Resize(, UBound(arr2)) = arr2
  79.     Next
  80.     '开刷屏,退出
  81.     Application.ScreenUpdating = True
  82.     Exit Sub
  83. Errcheck:
  84.     MsgBox Err.Number & vbNewLine & _
  85.            Err.Description
  86.            Stop
  87.            Resume Next
  88. End Sub

复制代码

评分

参与人数 1 +3 收起 理由
qinhuan66 + 3 很给力!

查看全部评分

回复

使用道具 举报

发表于 2013-5-18 19:25 | 显示全部楼层
改了下,有些已经在这里不适合用了。
  1. Sub 年度查询Access()
  2.     Range("A6:AG65536").ClearContents
  3.     With Sheets("年度报销统计查询")
  4.         .Unprotect ("695360052")
  5.         .[C55].FormulaR1C1 = ""
  6.         .Protect ("695360052")
  7.     End With
  8.     Dim AccessFile As String, Database As String
  9.     Dim arr(), i&, arrTemp
  10.     Dim AdoConn As Object, AdoRst As Object
  11.     Dim StrConn$, strSql$
  12.     Dim strName$


  13.     AccessFile = ThisWorkbook.Path & "\data.mdb"
  14.     Database = "data"

  15.     If Len([c3]) = 0 Then
  16.         MsgBox "模糊查询开始"
  17.         strSql = "select 报销月份,序号,定点医疗机构名称,医保卡号,单位名称,姓名,性别,年龄,入院日期,出院日期,住院天数,出院诊断,本次住院医疗费总额,甲类药费,乙类药费,进口药费,自费药费,超出范围,进口材料费,国产材料费,特殊检查费特殊治疗费,丙类项目,其它费用,起付段金额,个人政策自付小计,自费药品及自费项目,实际结算自付,统筹基金支付,大病求助基金支付,个人支付金额,本年住院次数,本年范围内费用累计,本年大病范围内费用累计 from " & Database    '‘ & " where 姓名='" & strName & "'"
  18.     Else
  19.         strName = [c3]
  20.         strSql = "select 报销月份,序号,定点医疗机构名称,医保卡号,单位名称,姓名,性别,年龄,入院日期,出院日期,住院天数,出院诊断,本次住院医疗费总额,甲类药费,乙类药费,进口药费,自费药费,超出范围,进口材料费,国产材料费,特殊检查费特殊治疗费,丙类项目,其它费用,起付段金额,个人政策自付小计,自费药品及自费项目,实际结算自付,统筹基金支付,大病求助基金支付,个人支付金额,本年住院次数,本年范围内费用累计,本年大病范围内费用累计 from " & Database & " where 姓名='" & strName & "'"
  21.     End If


  22.     On Error GoTo Errcheck
  23.     If Dir(AccessFile) = "" Then
  24.         MsgBox "ACCESS数据文件不存在"
  25.         Exit Sub
  26.     End If

  27.     StrConn = "Provider= Microsoft.Jet.OLEDB.4.0;" & _
  28.               "Data Source=" & AccessFile & ";"""

  29.     Set AdoConn = CreateObject("ADODB.Connection")
  30.     With AdoConn
  31.         .CursorLocation = 3    '游标类型
  32.         .CommandTimeout = 5    '超时
  33.         .connectionTimeout = 5  '超时
  34.         .Open StrConn       '打开
  35.     End With

  36.     Set AdoRst = AdoConn.Execute(strSql)

  37.     If AdoRst.RecordCount = 0 Then
  38.         MsgBox "无合乎条件的数据"
  39.         Exit Sub
  40.     Else
  41.         Application.ScreenUpdating = False
  42.         Range("a6").CopyFromRecordset AdoRst
  43.     End If
  44.     AdoConn.Close
  45.     Set AdoConn = Nothing
  46.     Application.ScreenUpdating = True
  47.     MsgBox "查询完成"
  48.     Exit Sub
  49. Errcheck:
  50.     MsgBox Err.Number & vbNewLine & _
  51.            Err.Description
  52. End Sub
复制代码

评分

参与人数 1 +3 收起 理由
qinhuan66 + 3 很给力!谢谢您老师

查看全部评分

回复

使用道具 举报

发表于 2013-5-18 19:45 | 显示全部楼层
再精简下。
  1. Sub 年度查询Access()
  2.     Range("A6:AG65536").ClearContents
  3.     With Sheets("年度报销统计查询")
  4.         .Unprotect ("695360052")
  5.         .[C55].FormulaR1C1 = ""
  6.         .Protect ("695360052")
  7.     End With
  8.    
  9.     Dim AccessFile As String, Database As String
  10.     Dim AdoConn As Object, AdoRst As Object
  11.     Dim StrConn$, strSql$

  12.     On Error GoTo Errcheck
  13.     If Dir(AccessFile) = "" Then
  14.         MsgBox "ACCESS数据文件不存在"
  15.         Exit Sub
  16.     End If

  17.     AccessFile = ThisWorkbook.Path & "\data.mdb"
  18.     Database = "data"
  19.     strSql = "select 报销月份,序号,定点医疗机构名称,医保卡号,单位名称,姓名,性别,年龄,入院日期,出院日期,住院天数,出院诊断,本次住院医疗费总额,甲类药费,乙类药费,进口药费,自费药费,超出范围,进口材料费,国产材料费,特殊检查费特殊治疗费,丙类项目,其它费用,起付段金额,个人政策自付小计,自费药品及自费项目,实际结算自付,统筹基金支付,大病求助基金支付,个人支付金额,本年住院次数,本年范围内费用累计,本年大病范围内费用累计 from " & Database
  20.    
  21.     If Len([c3]) = 0 Then
  22.         MsgBox "模糊查询开始"
  23.     Else
  24.         strSql = strSql & " where 姓名='" & [c3] & "'"
  25.     End If

  26.     StrConn = "Provider= Microsoft.Jet.OLEDB.4.0;" & _
  27.               "Data Source=" & AccessFile & ";"""

  28.     Set AdoConn = CreateObject("ADODB.Connection")
  29.     With AdoConn
  30.         .CursorLocation = 3    '游标类型
  31.         .CommandTimeout = 5    '超时
  32.         .connectionTimeout = 5  '超时
  33.         .Open StrConn       '打开
  34.     End With

  35.     Set AdoRst = AdoConn.Execute(strSql)

  36.     If AdoRst.RecordCount = 0 Then
  37.         MsgBox "无合乎条件的数据"
  38.         Exit Sub
  39.     Else
  40.         Application.ScreenUpdating = False
  41.         Range("a6").CopyFromRecordset AdoRst
  42.     End If
  43.     AdoConn.Close
  44.     Set AdoConn = Nothing
  45.     Application.ScreenUpdating = True
  46.     MsgBox "查询完成"
  47.     Exit Sub
  48.    
  49. Errcheck:
  50.     MsgBox Err.Number & vbNewLine & _
  51.            Err.Description
  52. End Sub
复制代码

评分

参与人数 1 +3 收起 理由
qinhuan66 + 3 很给力!谢谢您老师

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 03:19 , Processed in 0.390613 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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