Excel 列表对象中的 VBA 通配符
Posted
技术标签:
【中文标题】Excel 列表对象中的 VBA 通配符【英文标题】:VBA WildCard in Excel List Objects 【发布时间】:2021-08-04 14:32:43 【问题描述】:我加载了一个列表对象,我正在尝试使用下面的代码对其进行过滤。 如果我在下面使用固定的 SQL 语句,代码将按预期工作。
SELECT * FROM [All Contracts] WHERE [Asset_Number] = "Q123456"
但是,尝试在搜索字符串中引入任何形式的通配符都会导致 1004 错误。
这是当前有问题的子:
Public Sub QueryData( _
ByVal form As Variant _
)
Dim ws As Worksheet
Set ws = form.Worksheet
Dim searchTxt As String
Let searchTxt = form.textBox_FirstAssetNumber.value
' Build the SQL Statment
Dim SQL As String
If searchTxt = vbNullString Then
Let SQL = "Array(SELECT * FROM [All_Contracts])"
Else
Let SQL = "SELECT * FROM [All Contracts] WHERE (((Asset_Number) Like %" & [searchTxt] & "%));"
End If
#If Testing = 1 Then
Debug.Print "SQL Satatment is: " & SQL
#End If
With ws.ListObjects.item(1).QueryTable
.CommandType = xlCmdSql
.CommandText = SQL
.Refresh
End With
End Sub
我尝试用 Where 替换 'Like',也尝试用 '%' 替换 '*' 添加括号,删除括号似乎都导致 104 错误。
如果我在查询中不使用通配符,代码和 SQL 就可以工作。
我错过了什么?
【问题讨论】:
【参考方案1】:您要搜索的通配符和文本应包含在引号内。
SQL = "SELECT * FROM [All Contracts] WHERE Asset_Number Like '%" & searchTxt & "%';"
【讨论】:
很抱歉也没有用。让 SQL = "SELECT * FROM [All Contracts] WHERE Asset_Number Like '%" & searchTxt & "%';" 但是,将 'Like' 更改为 '=' 不会导致 1004 错误。但仍然没有返回查询结果。【参考方案2】:SQL = "Select * FROM [All Contracts$] WHERE [Asset_Number] LIKE '%" & searchTxt & "%'"
“所有合同”是工作表选项卡?
【讨论】:
“所有合同”是 PowerQuery以上是关于Excel 列表对象中的 VBA 通配符的主要内容,如果未能解决你的问题,请参考以下文章
让通配符在 Microsoft Word 的 VBA 宏中的查找和替换功能中起作用