Excel精英培训网

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

[已解决]两个条件改为单个的查询

[复制链接]
发表于 2010-1-15 07:08 | 显示全部楼层 |阅读模式
本帖最后由 爱疯 于 2013-4-21 11:34 编辑

怎样把两个条件的查询改为单个条件的查询?
老问题已解决,碰到了新的情况,自己解释不了,请看34楼附件.
最佳答案
2010-1-26 11:14

改了一下:


Private Sub CommandButton2_Click() '主查询按钮
    On Error Resume Next
    Sheets("结果显示").Visible = 2 '隐藏“结果显示”工作表
    Sheets("结果显示").Rows("2:65536") = "" '清空
    CommandButton4.Caption = "显示查询结果"
    '建立ADO查询
    Dim adoCN As Object, i As Integer
    Dim SQL As String, strTJ As String, temp As String
    Dim MySht As Worksheet
    Set adoCN = CreateObject("ADODB.Connection")
    '设定SQL
    If CheckBox1.Value = True Then
        For Each MySht In Worksheets
            If MySht.Name <> "结果显示" And MySht.Name <> "界面" _
                And MySht.Name <> "帮助" And MySht.Name <> "引用" Then
                
                SQL = SQL & " Union all select " & MySht.Name & ",* from [" & MySht.Name & "$]"
                
            End If
        Next
        SQL = Right(SQL, Len(SQL) - 11)
    Else
        If ComboBox1.Value <> "" Then
            SQL = "select " & ComboBox1.Value & ",* from [" & ComboBox1.Value & "$]"
        Else
            MsgBox "未选择表格"
            Exit Sub
        End If
    End If
    '设定条件
    For i = 3 To 5
        temp = UserForm2.Controls("Combobox" & i).Value
        If Len(temp) > 0 Then
            strTJ = strTJ & " and " & UserForm2.Controls("Label" & i + 2).Caption & "=""" & temp & """"
        End If
    Next i
    '设定物品查询条件。如果没有具体名称则按照大类查找
    If Len(ComboBox3.Text) = 0 And Len(ComboBox2.Text) > 0 Then
        '查找大类
        temp = ComboBox2.Text
        Dim stRow&, edRow&, strList
        stRow = Sheets("引用").Range("A:A").Find(temp, Sheets("引用").Range("A2"), , , , xlNext).Row
        edRow = Sheets("引用").Range("A:A").Find("*", Sheets("引用").Range("A" & stRow), , , , xlNext).Row - 1
        If edRow < stRow Then edRow = Sheets("引用").Range("B65536").End(xlUp).Row
        strList = Join(Application.Transpose(Sheets("引用").Range("B" & stRow & ":B" & edRow)), """,""")
        strTJ = strTJ & " and 具体名称 in " & "(""" & strList & """)"
    End If
    '设定日期条件
    If CheckBox2.Value = True Then
        '两个日期都要填写
        If Len(TextBox1.Text) * Len(TextBox2.Text) > 0 Then
            strTJ = strTJ & " and 日期>=#" & TextBox1.Text & "# and 日期<=#" & TextBox2.Text & "#"
        Else
            MsgBox "日期没有填写完整"
            TextBox1.SetFocus
            Exit Sub
        End If
    End If
    '若有条件,则添加条件
    If Len(strTJ) > 0 Then
        SQL = "select * from (" & SQL & ") where " & Right(strTJ, Len(strTJ) - 5)
    End If
    '打开连接
    adoCN.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & ThisWorkbook.FullName & _
            ";Extended Properties=Excel 8.0"
    
    Sheets("结果显示").Range("A2").CopyFromRecordset adoCN.Execute(SQL)
    '关闭连接
    adoCN.Close
    '写入listbox1中,及各种显示
    Call 列表框显示
    Call 显示数值
    If Len(ComboBox3.Text) = 0 Then
        Call 各种
    Else
        Call 单位名称
    End If
End Sub

问题:
一:表二中B列的单元格格式设定好文本,一经查询后又会变成日期格式,什么原因?    这个原因倒是不清楚
二:在物品分类中选择电脑查询,具体名称中出现的却是各种笔                                已经修正
三:不输入任何条件进行"开始查询",列表中具体名称列中凡是电脑类的都无显示.      因为电脑的具体类型字段是数字,而这个SQL查询的时候都是按照文本进行查询的。建议在输入具体数据的时候在那些电脑类的具体类型数字前都加一个半角的单引号。例如 '586
四:什么情况下出现"未选定表格"?不是可以按所有产品查询的吗?                           当按单个表进行查询(即第一个勾去掉,这个是你自己设定的功能哦,我在这里加入了查错判断功能),但是却没有在Combobox1中选择表格的时候会出现。

euOCixiv.rar

36.56 KB, 下载次数: 24

怎样把两个条件的查询改为单个条件的查询?

发表于 2010-1-15 08:14 | 显示全部楼层
回复

使用道具 举报

发表于 2010-1-15 08:21 | 显示全部楼层

&nbsp;你改成和性质查询的一样就行啊
回复

使用道具 举报

发表于 2010-1-15 08:24 | 显示全部楼层

把?改为具体的数字    

 If ComboBox2 <> "" Then Call 辅助查询(?, ComboBox1)
 If ComboBox3 = "" Then Call 辅助查询(?, ComboBox1)

另外,建议楼主学学VBA数组,我觉得这些代码运行效律很差.

回复

使用道具 举报

 楼主| 发表于 2010-1-16 07:02 | 显示全部楼层

谢谢版主,就去试试.
回复

使用道具 举报

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

在测试中发现了一个问题,怎么也搞不清原因,烦请高手再看一下.

 

CdkfWgIh.rar (37.02 KB, 下载次数: 0)
回复

使用道具 举报

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

这个查询做得很复杂。。。
回复

使用道具 举报

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

新问题出在Public cbb3上,去除这个变量,新问题就没有了,但是单独的"物品分类"查询功能也失去了,到头来还是一楼的问题没得到解决.

[em06][em06][em06]
[此贴子已经被作者于2010-1-20 13:58:34编辑过]
回复

使用道具 举报

发表于 2010-1-20 14:01 | 显示全部楼层

QUOTE:
以下是引用zzk386在2010-1-20 13:57:00的发言:

新问题出在Public cbb3上,去除这个变量,新问题就没有了,但是单独的"物品分类"查询功能也失去了,到头来还是一楼的问题没得到解决.

[em06][em06][em06]

看你写了这么多类似的代码,似乎太繁琐了,不利于修改和扩展。

告诉我你的想法,可以帮你重写代码。

回复

使用道具 举报

 楼主| 发表于 2010-1-20 21:36 | 显示全部楼层

我把要求写下了,把附件再发上来,渴望版主帮忙解决!

 

HOlKG6NU.rar (63.35 KB, 下载次数: 1)
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-16 23:39 , Processed in 0.301733 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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