改了一下:
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中选择表格的时候会出现。