繁体   English   中英

如何在VBA上的SQL查询中将单元格Excel单元格引用定义为参数?

[英]how to define cell excel cell reference as a parameter in SQL query on VBA?

如果有人对此提供帮助,那就太好了。

我想提供来自其他工作表的单元格引用作为我要查询的位置中的参数,而不是字符串“ Arunraj S”,我需要提供来自sheet1(“ PDA”)范围(“ c3”)的引用。

通过where查询提供直接字符串时,它可以很好地进行检索。

但是,当我尝试如下更改查询时,将引发语法错误;

 query = "SELECT DISTINCT [Client Name] FROM [Execution Report$] WHERE
 [Employee Name] =" & Sheets("PDA").Range(C3).value

这是我的代码:

Sub Pull_Data_from_Excel_with_ADODB()

    Dim cnStr As String
    Dim rs As ADODB.Recordset
    Dim query As String

    Dim fileName As String
    fileName = "C:\Users\nizamudeen.s\Desktop\PDA Template.xlsx"


    cnStr = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
               "Data Source=" & fileName & ";" & _
               "Extended Properties=Excel 12.0"

        query = "SELECT DISTINCT [Client Name] FROM [Execution Report$] WHERE [Employee Name] = 'Arunraj S';"


            Set rs = New ADODB.Recordset
    rs.Open query, cnStr, adOpenUnspecified, adLockUnspecified

        Cells.Clear
    Range("A2").CopyFromRecordset rs
    Dim cell As Range, i As Long
        With Range("A1").CurrentRegion
        For i = 0 To rs.Fields.Count - 1
            .Cells(1, i + 1).Value = rs.Fields(i).Name
        Next i
        .EntireColumn.AutoFit
    End With
End Sub

通常,员工的姓名是文本字符串。 您应该能够将单引号(也称为“勾号”)与包裹在整个SQL语句中的双引号结合使用,从而不必在引号字符串中处理引号。

query = "SELECT DISTINCT [Client Name] FROM [Execution Report$] WHERE [Employee Name] LIKE '" & Sheets("PDA").Range(C3).value & "';"

使用Bob in Sheets(“ PDA”)。Range(C3)时,应显示为

SELECT DISTINCT [Client Name] FROM [Execution Report$] WHERE [Employee Name] LIKE 'Bob';

我通常与LIKE运算符进行“模式匹配”,但出于所有意图和目的,LIKE等同于相同。

您将查询作为字符串传递。 到目前为止,您的查询看起来像这样(假设单元格C3中的名称是Tom Smith

SELECT DISTINCT [Client Name] FROM [Execution Report$] WHERE
 [Employee Name] = Tom Smith

看到这一点,您可能会发现它在SQL中会失败,因为它应该读取(注意名称周围的单引号):

SELECT DISTINCT [Client Name] FROM [Execution Report$] WHERE
 [Employee Name] = 'Tom Smith'

因此,将query声明更改为:

 query = "SELECT DISTINCT [Client Name] FROM [Execution Report$] WHERE
 [Employee Name] ='" & Sheets("PDA").Range(C3).value & "'"

这样可以解决问题吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM