Осложнения при переносе данных из SQL Server в Excel с использованием VBA - PullRequest
0 голосов
/ 16 октября 2019

Я пытаюсь извлечь данные из SQL Server в Excel, чтобы заполнить уже существующую рабочую таблицу, поэтому я написал тестовый код для этого. Хотя это было несовершенным, в основном я проверял установление соединения с сервером, но я сталкиваюсь с ошибкой автоматизации 440 при открытии соединения. Что я делаю неправильно в этой части кода.

Я еще не вносил никаких изменений и проверил, чтобы убедиться, что он скомпилирован нормально.

Sub GetPhysicalCount()
    Dim squery As String
    Dim cnLogs As New ADODB.Connection
    Dim rsData As New ADODB.Recordset
    Dim rsHeaders As New ADODB.Recordset
    Dim x As Long
    Dim y As Long
    Dim dbpath As String
    Dim dbname As String
    Dim AppExcel As Excel.Application
    Dim Workbook As Object
    Dim Worksheet As Object
    Dim strConn As String
    Dim Count As Long


    pUser = "AllenBroady"
    pPsw = "Cthulu90"
    pServer = "IMCPU_TEST"
    pCatalog = "MasterMFG"




    strConn = "Provider = SQLOLEDB;"
    strConn = strConn & "Initial Catalog= & pCatalog; & Data Source= & pServer;"
    strConn = strConn & "Integrated Security=sspi;& User ID= & pUser; & Password= & pPsw;"

    cnLogs.Open strConn

        With rsHeaders

            .ActiveConnection = cnLogs

                    .Open "SELECT * FROM MasterMFG WHERE Dept_Code = 001"

                 Do While Not rsHeaders.EOF

                    Cells(1, l_counter + 1) = rsHeaders(0)

                    l_counter = l_counter + 1

                    rsHeaders.MoveNext

                  Loop

            .Close

            End With

            With rsCount
                  .ActiveConnection = cnLogs
                    .Open "SELECT COUNT(Dept_Code)FROM MasterMFG WHERE Total <> 0"
                      Count = rsCount
                  .Close
            End With



            With rsData

            .ActiveConnection = cnLogs
                .Open "SELECT  Dept_Code, Total FROM MasterMFG WHERE Total <> 0"


               For i = 1 To Count

                    Sheet1.Range("A" & i + 1) = rsData.Fields(i)
                    rsData.MoveNext
                    Sheet1.Range("B" & i + 1) = rsData.Fields(i)
               Next i

            .Close

            End With

        cnLogs.Close

        Set cnLogs = Nothing

        Set rsHeaders = Nothing

        Set rsData = Nothing

    Sheets(1).UsedRange.EntireColumn.AutoFit

End Sub

Я получаю ошибку «Автоматизация» (ошибка 440)

1 Ответ

0 голосов
/ 16 октября 2019

Ваши strConn = strConn строки не объединены должным образом.

Ваши переменные не оцениваются, их имена просто помещаются прямо в строку.

Измените, например,

 strConn = strConn & "Initial Catalog= & pCatalog; & Data Source= & pServer;"
 strConn = strConn & "Integrated Security=sspi;& UserID= & pUser; & Password= & pPsw;"

до

 strConn = strConn & "Initial Catalog=" & pCatalog & ";Data Source=" & pServer & ";"
 strConn = strConn & "Integrated Security=sspi;User ID= "& pUser; & "Password= " & pPsw & ";"
...