Excel精英培训网

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

[已解决]求助各位老师VBA是否能实现窗口单选项按纽的多项查询(有难度)

[复制链接]
发表于 2013-5-19 11:07 | 显示全部楼层 |阅读模式
求助各位老师,能否帮实现下图的窗口单选项按纽(1、姓名;2、医保卡号;3、单位名称;4、定点医疗机构名称),输入单选项按纽所对应的内容到查询内容(比如单选选择为姓名,则查询内容即输入所要查询的姓名),再根据下面的开始时间和结束时间来查询(从Microsoft Access数据库根据上述来提取相应数据A6:AG65536),忘记说了,开始时间和结束时间是根据数据的录入时间来判断。

模糊查询(测试).rar (38.14 KB, 下载次数: 20)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-5-19 13:56 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2013-5-19 14:13 | 显示全部楼层
hwc2ycy 发表于 2013-5-19 13:56
只要条件明确,都是可以的。

老师您好!能否抽点时间帮我弄一下。拜托了。
回复

使用道具 举报

发表于 2013-5-19 14:35 | 显示全部楼层    本楼为最佳答案   
窗体代码。
  1. Option Explicit

  2. Private Sub CommandButton1_Click()
  3.     Dim strSql$
  4.     Dim strFind$
  5.     Dim strCondition1$
  6.     Dim strCondition2$
  7.     Dim Database As String

  8.     On Error GoTo Errcheck

  9.     Select Case True
  10.         Case Me.OptionButton1.Value
  11.             strFind = OptionButton1.Caption
  12.         Case Me.OptionButton2.Value
  13.             strFind = OptionButton2.Caption
  14.         Case Me.OptionButton3.Value
  15.             strFind = OptionButton3.Caption
  16.         Case Me.OptionButton4.Value
  17.             strFind = OptionButton4.Caption
  18.         Case Else
  19.             MsgBox "请选择要查找的内容"
  20.             Exit Sub
  21.     End Select

  22.     Database = "data"
  23.     strSql = "select 报销月份,序号,定点医疗机构名称,医保卡号,单位名称,姓名,性别," & _
  24.              "年龄,入院日期,出院日期,住院天数,出院诊断,本次住院医疗费总额,甲类药费," & _
  25.              "乙类药费,进口药费,自费药费,超出范围,进口材料费,国产材料费," & _
  26.              "特殊检查费特殊治疗费,丙类项目,其它费用,起付段金额,个人政策自付小计," & _
  27.              "自费药品及自费项目,实际结算自付,统筹基金支付,大病求助基金支付," & _
  28.              "个人支付金额,本年住院次数,本年范围内费用累计,本年大病范围内费用累计 from " & Database

  29.     Select Case True
  30.         Case Len(Me.TextBox1.Text) > 0
  31.             strCondition1 = " where " & strFind & "='" & Me.TextBox1.Text & "' "
  32.         Case Else
  33.             strCondition1 = " where " & strFind & " like '%' "
  34.     End Select


  35.     Select Case True
  36.         Case Len(Me.TextBox2.Text) = 0 And Len(Me.TextBox3.Text) = 0
  37.         Case Len(Me.TextBox2.Text) = 0
  38.             strCondition2 = " and 录入时间<=#" & Me.TextBox3.Text & "#"
  39.         Case Len(Me.TextBox3.Text) = 0
  40.             strCondition2 = " and 录入时间>=#" & Me.TextBox2.Text & "#"
  41.         Case Else
  42.             strCondition2 = " and  录入时间 between #" & Me.TextBox2.Text & "# and #" & Me.TextBox3.Text & "#"
  43.     End Select

  44.     MsgBox strSql & strCondition1 & strCondition2
  45.     Call ADOQuery(strSql & strCondition1 & strCondition2)
  46.     Exit Sub
  47.    
  48. Errcheck:
  49.     MsgBox Err.Number & vbNewLine & _
  50.            Err.Description

  51. End Sub


  52. Private Sub CommandButton2_Click()
  53.     Unload Me
  54. End Sub


  55. Sub ADOQuery(strSql As String)

  56.     Dim AdoConn As Object, AdoRst As Object
  57.     Dim StrConn$
  58.     Dim AccessFile As String
  59.    
  60.    
  61.     AccessFile = ThisWorkbook.Path & "\data.mdb"
  62.     If Dir(AccessFile) = "" Then
  63.         MsgBox "ACCESS数据文件不存在"
  64.         Exit Sub
  65.     End If



  66.     Range("A6:AG65536").ClearContents
  67.     With Sheets("报销统计综合查询")
  68.         .Unprotect ("695360052")
  69.         .Protect ("695360052")
  70.     End With

  71.     StrConn = "Provider= Microsoft.Jet.OLEDB.4.0;" & _
  72.               "Data Source=" & AccessFile & ";"""

  73.     Set AdoConn = CreateObject("ADODB.Connection")
  74.     With AdoConn
  75.         .CursorLocation = 3    '游标类型
  76.         .CommandTimeout = 5    '超时
  77.         .connectionTimeout = 5  '超时
  78.         .Open StrConn       '打开
  79.     End With

  80.     Set AdoRst = AdoConn.Execute(strSql)

  81.     If AdoRst.RecordCount = 0 Then
  82.         MsgBox "无合乎条件的数据"
  83.         Exit Sub
  84.     Else
  85.         Application.ScreenUpdating = False
  86.         Range("a6").CopyFromRecordset AdoRst
  87.     End If
  88.     AdoConn.Close
  89.     Set AdoConn = Nothing
  90.     Application.ScreenUpdating = True
  91.     MsgBox "查询完成"
  92.     Exit Sub

  93. Errcheck:
  94.     MsgBox Err.Number & vbNewLine & _
  95.            Err.Description
  96. End Sub
复制代码
回复

使用道具 举报

发表于 2013-5-19 14:39 | 显示全部楼层
报销统计录入.rar (34.95 KB, 下载次数: 21)

评分

参与人数 1 +3 收起 理由
qinhuan66 + 3 谢谢

查看全部评分

回复

使用道具 举报

发表于 2013-5-19 14:39 | 显示全部楼层
只要求对要查询的项目做要求,三个TEXTBOX可不输入内容,会做模糊查询的处理。
回复

使用道具 举报

 楼主| 发表于 2013-5-19 16:37 | 显示全部楼层
hwc2ycy 发表于 2013-5-19 14:39

老师您好!开始时间和结束时间的文本框能否只限输入日期或换成日期控件。谢谢
回复

使用道具 举报

发表于 2013-5-19 17:08 | 显示全部楼层
qinhuan66 发表于 2013-5-19 16:37
老师您好!开始时间和结束时间的文本框能否只限输入日期或换成日期控件。谢谢

可以的,建议就用文本框,对输入的文本进行判断。

回复

使用道具 举报

 楼主| 发表于 2013-5-19 20:27 | 显示全部楼层
hwc2ycy 发表于 2013-5-19 17:08
可以的,建议就用文本框,对输入的文本进行判断。

老师请教您一下。为什么我文本框内设限为日期型输入2013-4-5他说不是日期的

Private Sub TextBox2_Change()
   If Not IsNumeric(TextBox2) Then
MsgBox "不是日期"
TextBox2 = ""
End If
End Sub

回复

使用道具 举报

发表于 2013-5-19 20:30 | 显示全部楼层
这个方法不对。
用isdate函数
isdate(me.textbox2.text)
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-24 17:25 , Processed in 0.500321 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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