【问题标题】:VBA WildCard in Excel List ObjectsExcel 列表对象中的 VBA 通配符
【发布时间】: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 就可以工作。

我错过了什么?

【问题讨论】:

    标签: sql excel vba ado


    【解决方案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
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-02
    • 1970-01-01
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    相关资源
    最近更新 更多