Excel精英培训网

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

[已解决]求助,如何根据条件返回查询结果?

[复制链接]
发表于 2010-1-7 09:33 | 显示全部楼层 |阅读模式

根据查询的条件,从数据源中返回符合条件的数据!

bxaa57UZ.zip (10.65 KB, 下载次数: 6)

发表于 2010-1-7 09:47 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2010-1-7 10:22 | 显示全部楼层

QUOTE:
以下是引用lotte在2010-1-7 9:47:00的发言:
数据源规范的话 QUERY可以做

帮我做一下啊
回复

使用道具 举报

发表于 2010-1-7 10:32 | 显示全部楼层

缺省时,表示所有人员 我做不到
期待高手
回复

使用道具 举报

发表于 2010-1-7 10:33 | 显示全部楼层

coLUV6wU.rar (10.27 KB, 下载次数: 7)
回复

使用道具 举报

发表于 2010-1-7 10:46 | 显示全部楼层    本楼为最佳答案   

按钮自己加了


Sub 查询()
    Dim RowN&, strAdd$, Sql$, i%, Temp$
    Dim AdoCn, AdoRe
    Set AdoCn = CreateObject("ADODB.Connection")
    Set AdoRe = CreateObject("ADODB.Recordset")
    RowN = Sheet1.Range("B65536").End(xlUp).Row
    strAdd = Sheet1.Range("B6:F" & RowN).Address(0, 0)
    '创建连接
    AdoCn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ThisWorkbook.FullName & _
                ";Extended Properties=Excel 8.0"
    '设定Sql
    For i = 6 To 7
        If Len(Cells(i, 3)) > 0 Then
            Sql = Sql & Cells(i, 2) & "=""" & Cells(i, 3) & """ and "
        End If
    Next i
    If Len(Sql) > 0 Then
        Sql = Left(Sql, Len(Sql) - 5)
        Temp = " and "
    End If
    If Len(Cells(3, 3)) > 0 Then
        Sql = Sql & Temp & "报销人=""" & Cells(3, 3) & """"
    End If
    If Len(Sql) > 0 Then Temp = " and "
    If Len(Cells(4, 3)) > 0 Then
        Sql = Sql & Temp & "日期>=#" & Cells(4, 3) & "#"
    End If
    If Len(Sql) > 0 Then Temp = " and "
    If Len(Cells(5, 3)) > 0 Then
        Sql = Sql & Temp & "日期<=#" & Cells(5, 3) & "#"
    End If
    If Len(Sql) > 0 Then Temp = " where "
    Sql = "SELECT * FROM [数据库$" & strAdd & "]" & Temp & Sql
    '打开纪录集
    AdoRe.Open Source:=Sql, ActiveConnection:=AdoCn
    '复制纪录集到单元格
    Range("B10:G1000").ClearContents
    Range("B10").CopyFromRecordset AdoRe
    '关闭连接
    AdoCn.Close
    Set AdoCn = Nothing
    Set AdoRe = Nothing
End Sub
[此贴子已经被作者于2010-1-7 10:48:31编辑过]
回复

使用道具 举报

 楼主| 发表于 2010-1-7 14:13 | 显示全部楼层

QUOTE:
以下是引用amulee在2010-1-7 10:46:00的发言:

按钮自己加了


Sub 查询()
    Dim RowN&, strAdd$, Sql$, i%, Temp$
    Dim AdoCn, AdoRe
    Set AdoCn = CreateObject("ADODB.Connection")
    Set AdoRe = CreateObject("ADODB.Recordset")
    RowN = Sheet1.Range("B65536").End(xlUp).Row
    strAdd = Sheet1.Range("B6:F" & RowN).Address(0, 0)
    '创建连接
    AdoCn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ThisWorkbook.FullName & _
                ";Extended Properties=Excel 8.0"
    '设定Sql
    For i = 6 To 7
        If Len(Cells(i, 3)) > 0 Then
            Sql = Sql & Cells(i, 2) & "=""" & Cells(i, 3) & """ and "
        End
  If
    Next i
    If Len(Sql) > 0 Then
        Sql = Left(Sql, Len(Sql) - 5)
        Temp = " and "
    End
  If
    If Len(Cells(3, 3)) > 0 Then
        Sql = Sql & Temp & "报销人=""" & Cells(3, 3) & """"
    End
  If
    If Len(Sql) > 0 Then Temp = " and "
    If Len(Cells(4, 3)) > 0 Then
        Sql = Sql & Temp & "日期>=#" & Cells(4, 3) & "#"
    End
  If
    If Len(Sql) > 0 Then Temp = " and "
    If Len(Cells(5, 3)) > 0 Then
        Sql = Sql & Temp & "日期<=#" & Cells(5, 3) & "#"
    End
  If
    If Len(Sql) > 0 Then Temp = " where "
    Sql = "SELECT * FROM [数据库$" & strAdd & "]" & Temp & Sql
    '打开纪录集
    AdoRe.Open Source:=Sql, ActiveConnection:=AdoCn
    '复制纪录集到单元格
    Range("B10:G1000").ClearContents
    Range("B10").CopyFromRecordset AdoRe
    '关闭连接
    AdoCn.Close
    Set AdoCn = Nothing
    Set AdoRe = Nothing
End
  Sub

阿木帮人帮到底啊,如何再自动添加网络线?
回复

使用道具 举报

发表于 2010-1-7 14:23 | 显示全部楼层


Sub 查询()
    Application.ScreenUpdating = True
    Dim RowN&, strAdd$, Sql$, i%, Temp$
    Dim AdoCn, AdoRe
    Set AdoCn = CreateObject("ADODB.Connection")
    Set AdoRe = CreateObject("ADODB.Recordset")
    RowN = Sheet1.Range("B65536").End(xlUp).Row
    strAdd = Sheet1.Range("B6:F" & RowN).Address(0, 0)
    '创建连接
    AdoCn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ThisWorkbook.FullName & _
                ";Extended Properties=Excel 8.0"
    '设定Sql
    For i = 6 To 7
        If Len(Cells(i, 3)) > 0 Then
            Sql = Sql & Cells(i, 2) & "=""" & Cells(i, 3) & """ and "
        End If
    Next i
    If Len(Sql) > 0 Then
        Sql = Left(Sql, Len(Sql) - 5)
        Temp = " and "
    End If
    If Len(Cells(3, 3)) > 0 Then
        Sql = Sql & Temp & "报销人=""" & Cells(3, 3) & """"
    End If
    If Len(Sql) > 0 Then Temp = " and "
    If Len(Cells(4, 3)) > 0 Then
        Sql = Sql & Temp & "日期>=#" & Cells(4, 3) & "#"
    End If
    If Len(Sql) > 0 Then Temp = " and "
    If Len(Cells(5, 3)) > 0 Then
        Sql = Sql & Temp & "日期<=#" & Cells(5, 3) & "#"
    End If
    If Len(Sql) > 0 Then Temp = " where "
    Sql = "SELECT * FROM [数据库$" & strAdd & "]" & Temp & Sql
    '打开纪录集
    AdoRe.Open Source:=Sql, ActiveConnection:=AdoCn
    '复制纪录集到单元格
    Range("B10:G65536").Clear
    Range("B10").CopyFromRecordset AdoRe
    '关闭连接
    AdoCn.Close
    Set AdoCn = Nothing
    Set AdoRe = Nothing
    '表格边框
    Range("B10:G" & Range("B65536").End(xlUp).Row).Borders.ColorIndex = 7
    Application.ScreenUpdating = True
End Sub
回复

使用道具 举报

发表于 2010-1-7 23:21 | 显示全部楼层

高手出手了。学习看看[em01]
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-6 12:06 , Processed in 0.149588 second(s), 6 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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