Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
楼主: zzk386

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

[复制链接]
发表于 2010-1-29 13:32 | 显示全部楼层

改成这个。

arrys = MySht.Range("F2:F" & MySht.Range("F65536").End(xlUp).Row)
            If IsArray(arrys) Then
                For Each Temp In arrys
                    d(Temp) = 1
                Next
            Else
                d(arrys) = 1
            End If

[此贴子已经被作者于2010-1-29 13:35:26编辑过]
回复

使用道具 举报

发表于 2010-1-29 13:43 | 显示全部楼层

QUOTE:
以下是引用zzk386在2010-1-29 7:12:00的发言:
还存在小问题,请看附件

因为你的日期里面有时间,实质已经大于了那个当天,帮你改一下。


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 & """ as 项目表,* from [" & MySht.Name & "$]"
            End If
        Next
        SQL = Right(SQL, Len(SQL) - 11)
    Else
        If ComboBox1.Value <> "" Then
            SQL = "select """ & ComboBox1.Value & """ as 项目表,* 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 日期<#" & _
                (CDate(TextBox2.Text) + 1) & "#"
        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
回复

使用道具 举报

发表于 2010-1-29 13:55 | 显示全部楼层
回复

使用道具 举报

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

谢谢amulee,代码都符合我的要求了,[em01]

使用中又发现一个情况,不得其解,希望能得到解释.

 

Qo4YfNlO.rar (34.53 KB, 下载次数: 1)
回复

使用道具 举报

发表于 2010-1-31 10:58 | 显示全部楼层

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

谢谢amulee,代码都符合我的要求了,[em01]

使用中又发现一个情况,不得其解,希望能得到解释.

 


Sub 列表框显示()
Dim i As Long
Dim j As Long
    On Error Resume Next
    UserForm2.ListBox1.Clear
    UserForm2.ListBox1.ColumnCount = 8
    With Sheets("结果显示")
        .Range("F2:F" & .[A65536].End(3).Row) = .Range("F2:F" & .[A65536].End(3).Row).Value '转化为数值
        For i = 1 To .[A65536].End(3).Row
            UserForm2.ListBox1.AddItem
            For j = 1 To 8
                UserForm2.ListBox1.List(UserForm2.ListBox1.ListCount - 1, j - 1) = .Cells(i, j)
            Next j
        Next i
        UserForm2.ListBox1.ColumnWidths = "52;52;42;108;25;28;26;40"
        UserForm2.TextBox3 = WorksheetFunction.SumIf(.Range("F:F"), ">0") '进库
        UserForm2.TextBox4 = WorksheetFunction.SumIf(.Range("F:F"), "<0") '出库
        UserForm2.TextBox5 = WorksheetFunction.Sum(.Range("F:F")) '库存
    End With
End Sub

回复

使用道具 举报

 楼主| 发表于 2010-2-1 09:45 | 显示全部楼层

谢谢版主,又解决了一个问题,还剩最后一个小问题了,请看附件

 

 

4NqAIXmq.rar (34.12 KB, 下载次数: 3)
回复

使用道具 举报

发表于 2010-2-1 10:38 | 显示全部楼层

最后加一句

Private Sub ComboBox2_Change() '“物品分类”

...................

...................

....................

If ComboBox2.Value = "" Then ComboBox3.Clear
        ComboBox3.SetFocus
End Sub

[此贴子已经被作者于2010-2-1 10:41:01编辑过]
回复

使用道具 举报

 楼主| 发表于 2010-2-1 12:29 | 显示全部楼层

在版主不厌其烦地帮助下,终于完成了查询的所有功能,不仅学到了相关的知识,而且还能用查询来处理工作中一些事情,收获很大.

特别感谢amulee版主,同时也感谢论坛上帮助我的朋友,祝所有求学的朋友在帮助和被帮助的互动中不断进步和提高,祝论坛越办越好![em01]

回复

使用道具 举报

发表于 2010-2-2 11:42 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2010-11-19 21:45 | 显示全部楼层

大哥,可不可以分享你做好的表,能发上来吗?要不发给我的邮箱 weus2004@163.com

谢谢!

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-6 08:36 , Processed in 0.316587 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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