在excel中使用范围的SQL查询作为条件

我使用Excel中的SQL查询中的外部数据将数据提取到电子表格中,然后将电子表格发送到我的学院之一,比如销售部门,他们可以查看查询的信息。
我想能够有一个单元格,他们可以input数据,并按刷新button。

所以我需要做一些这样的事情:

SELECT Customer.CustomerCode, Customer.Name, OrderHeader.OrderType, OrderHeader.OrderNumber FROM Customer INNER JOIN OrderHeader ON Customer.CustomerID = OrderHeader.CustomerID WHERE (OrderHeader.OrderType = 2) AND (OrderHeader.OrderNumber = Range("A1").Value) 

不知道如何或如果这是可能的,我需要这样做的原因是因为我正在经历所有行情的线,如果超过65536,那么我会有一个问题。

这是我目前所拥有的SQL不同,但并不重要

在这里输入图像说明

最简单的方法是将参数的值拉入到VBA中,然后将SQL语句创build为具有参数值的string,然后填充查询的commandtext。

下面是单元格A1中参数的基本示例。

 Sub RefreshQuery() Dim OrderNo As String Dim Sql As String ' Gets value from A1 OrderNo = Sheets("Sheet1").Range("A1").Value 'Creates SQL Statement Sql = "SELECT Customer.CustomerCode, Customer.Name, " & _ "OrderHeader.OrderType , OrderHeader.OrderNumber " & _ "FROM Customer " & _ "INNER Join OrderHeader ON Customer.CustomerID = OrderHeader.CustomerID " & _ "WHERE (OrderHeader.OrderType = 2) And (OrderHeader.OrderNumber = " & OrderNo & ") " With ActiveWorkbook.Connections(1).ODBCConnection .CommandText = Sql .Refresh End With End Sub 

这假定您在Excel中有查询开始,并且这是唯一的查询。 否则,你必须定义查询的名称如下:

 With ActiveWorkbook.Connections("SalesQuery").ODBCConnection 

我希望帮助:)

除了@ OWSam使用ODBC的例子之外,我们还可以使用ADO从SQL Server撤消查询结果。 使用ADO,你不能使用Windowsvalidation,你需要用户input他们的密码,以便能够运行查询。

我个人创build一个用户名和密码的用户窗体。 用户名使用Environ预填充,然后他们可以input密码到相关的文本框中。

 Sub sqlQuery() Dim rsConn As ADODB.Connection, rsData As ADODB.Recordset Dim strSQL As String, winUserName As String, pwd As String winUserName = UCase(Environ("username")) pwd = "mypassword" 'password needed here. strSQL = "SELECT * FROM mydatabase" 'query Set rsConn = New ADODB.Connection With rsConn .ConnectionString = "Provider = sqloledb;" & _ "Data Source = [server name here];" & _ "Initial Catalog = [initial database];" & _ "Integrated Security=SSPI;" & _ "User ID = " & winUserName & ";" & _ "Password = " & pwd & ";" .Open End With Set rsData = rsConn.Execute(strSQL) Range("A1").CopyFromRecordset rsData End Sub 

编辑:您必须进入引用并打开Microsoft ActiveX数据对象logging集6.0库(或VBE中的等效)。