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 宏中的查找和替换功能中起作用

使用 VBA 解析和拆分带有通配符的字符串?

如何使用通配符编写vba过滤器

如何使用带有通配符查询的 Hibernate Search 并输出结果对象列表

从java中的HashMap返回通配符匹配列表

在Excel中,如何在左侧的范围内找到相同的单词?