ADODB - Создание функции VBA для минимизации повторяющегося кода? - PullRequest
1 голос
/ 01 марта 2020

У меня есть следующий код, который получает данные из таблицы базы данных с ADODB и выводит на лист. Я часто этим пользуюсь, меняя между cnn (access / mysql et c ....) / разными запросами.

Есть ли способ, как я могу создать это как функцию, чтобы минимизировать повторяющийся код?

Sub getDBdata()
    Dim Cnn As ADODB.Connection
    Dim rs As ADODB.Recordset

     Set Cnn = New ADODB.Connection
     Set rs = New ADODB.Recordset

    Cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\test\TESTDB.MDB"

     SQLString = "SELECT * FROM TABLE1"

    rs.Open SQLString, Cnn, adLockReadOnly

    Sheet1.Range("A2").CopyFromRecordset rs

    rs.Close

    Cnn.Close
    Set Cnn = Nothing
    Set rs = Nothing
End Sub

пример:

sub getSpecificData()

Connection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\test\TESTDB.MDB"
SQLString = "SELECT COLUMN1 FROM TABLE1"
OutputLocation = Sheet1.Range("A1")

      getDBData Connection, SQLString, OutputLocation

End Sub

Цените любую помощь

1 Ответ

1 голос
/ 01 марта 2020

Самое простое, что нужно сделать, это добавить 3 параметра к вашему сабвуферу:

Sub getDBdata(connString as string, SQL as String, rngDest As Range)
    Dim Cnn As ADODB.Connection
    Dim rs As ADODB.Recordset

    Set Cnn = New ADODB.Connection
    Set rs = New ADODB.Recordset

    Cnn.Open connString
    rs.Open SQL, Cnn, adLockReadOnly
    rngDest.CopyFromRecordset rs

    rs.Close
    Cnn.Close
    Set Cnn = Nothing
    Set rs = Nothing
End Sub
...