Новый ответ
Мой оригинальный ответ содержит некоторую ценную информацию об использовании кавычек и синглов в запросах, но не касается вопроса ОП.
Хотя это не совсем понятно, этот отрывок из ADO »Набор записей» Фильтр объясняет это
Если вы используете оператор LIKE, вы также можете использовать подстановочные знаки * или% в качестве последнего символа в строке или в качестве первого и последнего символа встрока.
При использовании оператора LIKE со свойством фильтра записей ADODB, если фильтр начинается с подстановочного знака (* или%), то он должен заканчиваться подстановочным знаком (* или%).Подстановочные знаки в середине строки фильтра не работают.
То, что мы не можем использовать подстановочный знак с оператором LIKE, используя фильтр записей ADO, не заканчивая фильтр подстановочным знаком, не означает, что мы не можемзаставить его работать!
Давайте взломать систему!
- Добавить вычисляемое поле в запрос, который возвращает последний символ
- Использовать% для последнего символаADO Recordset Filter
- Фильтруйте исходное поле, используя Like * somevalue% и вычисленное поле = последний символ
Тестовый код
Sub Test()
TestFilter "(Location Like '*Q%') AND (LOCATIONLastChar = '''')"
End Sub
Sub TestFilter(Filter As String)
Const BaseConnectionString = "Data Source=@FullName;Extended Properties='Excel 12.0;HDR=YES;IMEX=1'"
Dim Conn As New ADODB.Connection, rs As New ADODB.Recordset
Dim SQL As String
Set Conn = New ADODB.Connection
With Conn
.Provider = "Microsoft.ACE.OLEDB.12.0"
.ConnectionString = Replace(BaseConnectionString, "@FullName", ThisWorkbook.FullName)
.Open
End With
SQL = "SELECT *, Right(LOCATION,1) AS LOCATIONLastChar FROM [Data$] Where Not IsNull(Row_ID)"
rs.Open SQL, Conn, adOpenKeyset, adLockOptimistic, adCmdText
rs.Filter = Filter
If Not rs.BOF Then
Worksheets.Add
Range("A1").CopyFromRecordset rs
End If
rs.Close
Conn.Close
End Sub
Исходное сообщение
Когда у меня возникают проблемы при написании запроса, я использую Access Query Designer, чтобы помочь мне написать его.
SELECT Table1.Field1
FROM Table1
WHERE (((Table1.Field1) Like "a'*"));
Обратите внимание, что дизайнер использует кавычки вокруг строки фильтра.SQL может использовать двойные или одинарные кавычки для строк.
Если вы используете двойные кавычки для строковых значений, любые кавычки в двойных кавычках должны быть удвоены.
Вот пример:
rs.Open "SELECT Table1.Field1 FROM Table1 WHERE (((Table1.Field1) Like ""a'*""));"
Это, однако, боль в шее, чтобы получить право.Поэтому я пишу несколько вспомогательных функций, которые удваивают для меня кавычки или одинарные кавычки.
Function getClipBoardText()
With CreateObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
.getFromClipBoard
getClipBoardText = .getText
End With
End Function
Sub PrintText()
Dim s As String
s = getClipBoardText
Debug.Print Replace(s, Chr(34), String(2, 34))
End Sub
Теперь все, что мне нужно сделать, - это скопировать SQL конструктора и запустить PrintText
* 1046.*
Чтобы сделать очень длинную историю короткой, просто удвойте одинарную кавычку, заключенную в одинарные кавычки!
RcrdsetSheet.Filter = "[LOCATION] LIKE '*Q'''"
Вот как бы вы это сделалииспользуйте одинарные кавычки внутри двойных кавычек
RcrdsetSheet.Filter = "[LOCATION] LIKE ""*Q'"""