我在Excel中有一个多选列表框,我正在尝试使用SQL通过ADO搜索数据库列中的选定值
例如,我有一个多选列表框,其中包含以下值:
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的所有行。
我面临的问题是我的选择可能会改变,因此必须调整查询。有没有办法自动化查询,以便搜索列表框中选择的所有值?
注意:在列表框中进行的选择将存储为逗号分隔值
以下是我用于列表框选择的完全匹配的代码(返回仅包含&#34的行; Apple,Mango"),我需要使其适用于任何列表框值组合(还应该返回" Apple,Banana,Mango"或与单元格中存在的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
答案 0 :(得分:0)
我正面临类似的问题。我的Excel工作表列包含值“1,2,3”,我想选择值为“1”的行。
SELECT * FROM [Sheet1$] A WHERE A.Col2 LIKE '%value1%' AND (A.Col1 LIKE '2%' OR A.Col1 LIKE '%2%' OR A.Col1 LIKE '%2' OR A.Col1 LIKE '2')
<强>查询:强>
SELECT * FROM [Sheet1$] A WHERE A.Col2 LIKE '%value one%'
返回的行数:0
当excel列包含逗号分隔的字符串时,逗号分隔值可正常工作,但当它们包含数字逗号分隔值时失败 即此查询返回正确的结果:
{{1}}
连接/ rs对象和字符串等没有问题。我对所有其他没有查询逗号分隔数值的查询使用相同的函数
解决了我的问题:原来是格式化问题...我在
中有以下值Col1(A)
1
1
1
1,2,3
2,3-
3,4,5-
Excel格式化为'常规'由于'常规'格式化,excel选择前3行作为数字,接下来3作为文本...查询无法检索文本并抛出错误消息,如下所示:
“您无法记录更改,因为您输入的值违反了为此表或列表定义的设置(例如,值小于最小值或大于最大值)...