Создайте строку подключения, объединяя каждый параметр.
Sub Conn2SQL()
Const TABLE_NAME = "TableName"
Const DRIVER = "{SQL Server}"
Dim conf
conf = Array("A12", "database", "A13", "server", _
"A14", "password", "A15", "uid")
Dim wb As Workbook, wsConfig As Worksheet, wsOut As Worksheet
Dim i As Integer, strConn As String, sQry As String
Set wb = ThisWorkbook
Set wsConfig = wb.Sheets("Sheet1")
Set wsOut = wb.Sheets("SavedConfig")
' construct connection string
strConn = "driver=" & DRIVER & ";"
For i = 1 To UBound(conf) Step 2
strConn = strConn & conf(i) & "=" & wsConfig.Range(conf(i - 1)).Value & ";"
Next
'Debug.Print strConn
sQry = "SELECT * FROM [" & TABLE_NAME & "]"
' connect to db and run sql
Dim cnn1 As New ADODB.Connection, mrs As New ADODB.Recordset
Dim iCols As Integer
With cnn1
.ConnectionString = strConn
.ConnectionTimeout = 30
.Open
End With
wsConfig.Range("H35") = "LAST RUN STARTED " & Now
cnn1.Execute "USE " & wsConfig.Range(conf(0))
' output
mrs.Open sQry, cnn1
For iCols = 0 To mrs.Fields.Count - 1
wsOut.Cells(1, iCols + 1).Value = mrs.Fields(iCols).Name
Next
wsOut.Cells(2, 1).CopyFromRecordset mrs 'A2
wsConfig.Range("D35") = "LAST RUN COMPLETED " & Now
i = wsOut.Cells(Rows.Count, 1).End(xlUp).Row
MsgBox i & " rows added to " & wsOut.Name, vbInformation
mrs.Close
cnn1.Close
End Sub
Проверьте строку подключения с этим кодом
Sub testconnect()
Dim conn As New ADODB.Connection, rs As New ADODB.Recordset, s As String
s = "" ' put connection string here
With conn
.ConnectionString = s
.ConnectionTimeout = 30
.Open
End With
Set rs = conn.Execute("SELECT CURRENT_TIMESTAMP")
MsgBox "Time is " & rs(0), vbOKOnly
conn.Close
End Sub