【发布时间】:2015-07-05 05:08:51
【问题描述】:
我在 Excel 中有一个多选列表框,我正在尝试通过 ADO 使用 SQL 搜索数据库列中的选定值
例如,我有一个具有以下值的多选列表框:
1. Mango
2. Apple
3. Grapes
4. Banana
样本数据:
ID | LOB
---------------------------
ACQ1 | Apple, Mango
ACQ2 | Mango
ACQ3 | Apple, Banana, Mango
ACQ4 | Apple, Grapes, Mango
如果我从列表框中选择 Mango 和 Apple,我想搜索 LOB 列中包含 Mango 和 Apple 的所有行。
我面临的问题是我的选择可能会改变,因此必须调整查询。有没有办法自动查询,以便搜索列表框中选择的所有值?
注意:在列表框中所做的选择被存储为逗号分隔值
以下是我用于精确匹配列表框选择的代码(返回仅包含“Apple,Mango”的行),我需要使其适用于列表框值的任何组合(还应该返回“Apple 、香蕉、芒果”或任何其他与芒果和苹果一起出现在单元格中的组合):
Public Sub conn()
Dim sSQLQry As String
Dim ReturnArray
Dim conn As New ADODB.Connection
Dim mrs As New ADODB.Recordset
Dim DBPath As String, sconnect As String
DBPath = ThisWorkbook.FullName
sconnect = "Provider=MSDASQL.1;DSN=Excel Files;DBQ=" & DBPath & ";HDR=Yes';"
ls_values = Sheet("Data").Range("A1").Value
conn.Open sconnect
sSQLSting = "SELECT * From [Sheet1$] Where LOB = '" & ls_values & "'
mrs.Open sSQLSting, conn
Sheets("Main").Range("B4").CopyFromRecordset mrs
mrs.Close
conn.Close
End Sub
【问题讨论】:
-
有助于显示您当前的代码。一种方法是构建一个 SQL where 子句,例如
...where LOB like '%Mango%' or LOB like '%Apple%' -
嘿蒂姆,问题是选择不一致。它们可能会从 (Mango, Apple) 更改为 (Banana, Grapes) 或任何其他列表框值组合,在这种情况下,您的代码将不适用。我想根据列表框中选择的值进行搜索 Current Code: #Not writing ADO connection codes due to char limit 'listbox selections are in cell A1 as a comma separator value ls_values = Sheets("Sheet2").Range("A1 ").Value sqlSting = "SELECT * From [Sheet1$] Where LOB = '" & ls_values & "'" mrs.Open sqlSting, conn Sheets("Main").Range("B4").CopyFromRecordset mrs
-
您可以编辑您的问题以添加您的代码。我并不是建议您使用固定的 SQL 字符串:您将遍历选定的列表项并动态构建 where 子句。