SQL 在 VBA 中查询,代码存储在 Excel 中的多个单元格中

SQL query in VBA, code stored in several cells in Excel

我正在尝试编写 VBA 代码,允许用户在 Excel 中输入(例如更改日期),然后再通过 SQL 检索数据。只要我将 SQL 查询存储在单个单元格中,代码就可以正常工作。但是,SQL 查询包括 62 行,因此在单个单元格内编辑它并不是最佳选择。

我想在 Excel 中将 SQL 代码拆分为每行 1 行,以便于编辑。 SQL 代码当前存储在 "SQL" sheet 单元格 "A1".

关于如何使它与多个 rows/cells 一起工作有什么想法吗?

Sub ConnectSqlServer()

Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim sConnString As String

' Create the connection string.
sConnString = "Provider=OraOLEDB.Oracle;Data Source=xxxxxxx;User Id=xxxxxxx;Password=xxxxxxxxx;"

' Create the Connection and Recordset objects.
Set conn = New ADODB.Connection
Set rs = New ADODB.Recordset

' Open the connection and execute.
conn.Open sConnString
Set rs = conn.Execute(Sheets("SQL").Range("A1"))

For intColIndex = 0 To rs.Fields.Count - 1
Sheets("Output").Range("A1").Offset(0, intColIndex).Value = rs.Fields(intColIndex).Name
Next

' Check we have data.
If Not rs.EOF Then
    ' Transfer result.
    Sheets("Output").Range("A2").CopyFromRecordset rs
' Close the recordset
    rs.Close
Else
    MsgBox "Error: No records returned.", vbCritical
End If

' Clean up
If CBool(conn.State And adStateOpen) Then conn.Close
Set conn = Nothing
Set rs = Nothing

End Sub
 Dim SqlText as String
 Dim r as range
 For each r in Range("A1:A62")
      SqlText = SqlText & r.Text
  Next r
  Set rs = conn.Execute(sqlText)

请注意从 A2 到 A62 的每一行文本都以 space 开头,以确保这些行在连接时保持独立

如果您只想 select 您有 SQL 查询的第一行的非空行,您可以使用类似这样的东西。

这样做的好处是,您在 SQL 查询中添加一两行代码后就无需更改代码。

Public Function FirstRowAsString() As String

    Dim variantValues() As Variant
    Dim stringValue As String
    Dim rowCounter As Long

    range("A1").Select
    range(Selection, Selection.End(xlDown)).Select

    variantValues = Selection.Value

    For rowCounter = 1 To UBound(variantValues, 1) Step 1
        stringValue = stringValue + " " + CStr(variantValues(rowCounter, 1))
    Next rowCounter

    FirstRowAsString = stringValue

End Function