Ошибка времени выполнения «3706»: не удается найти поставщика - Excel VBA «Provider = Microsoft.Jet.OLEDB.4.0» - PullRequest
0 голосов
/ 09 апреля 2020

Я видел, что эта ошибка не нова, но я не могу найти решение.

У меня есть один файл xls, который использует один лист, такой как db, и с ADODB я получаю наборы записей, которые мне нужны .

Код очень прост и работает правильно для каждого протестированного мной p c (5) с WIN7, WIN10, 32 или 64 бит.

Но у меня на P C, это клиент P c, который выдает мне эту ошибку: Run time error '3706': Provider cannot be found, я проверил версию WIN, офисную версию, они такие же, как и другие P C, 64-битная WIN10, MS Office 32Bit

Для решения этой проблемы требуется больше контроля?!?! спасибо за любые предложения fabrizio

Мой файл xls имеет 2 листа, 1-й с именем "dati" с двумя столбцами (Anno, Pezzi), 2-й с именем "test" пустой, это код:

Sub testConn()
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim strsql As String
Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adCmdText = &H1


Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")

Set rs = New ADODB.Recordset
    #If Win64 Then
        cn.Open "Provider=Microsoft.Jet.OLEDB.12.0; Data Source=" & ThisWorkbook.FullName & "; Extended Properties=""Excel 8.0;HDR=Yes;"";"
    #Else
         cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & ThisWorkbook.FullName & "; Extended Properties=""Excel 8.0;HDR=Yes;"";"
    #End If

strsql = "SELECT anno, Sum(Pezzi)as Tpz from [dati$] group by anno"

rs.Open strsql, cn, adOpenStatic, adLockReadOnly, adCmdUnspecified
rs.MoveFirst
With Worksheets("test")
    .Cells.ClearContents
    .Range("A1") = "Anno"
    .Range("B1") = "T.Pz"
    .Range("A2").CopyFromRecordset rs
    .Activate
    .Select
End With
End Sub

эти ссылки были добавлены в файл:

Microsoft ActiveX Data Objects 6.1 Library
Microsoft ActiveX Data Recordset 2.8 Library

1 Ответ

1 голос
/ 09 апреля 2020

Это работает, есть некоторые мелкие детали, которые вы используете, не подходит. Версия 12, драйвер туз, а не jet, и Extended Properties также Excel 12.0

И не нужно добавлять библиотеку.

Sub testConn()
Dim cn As Object
Dim rs As Object
Dim strsql As String
Dim connString


Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")

    If Application.Version < 12 Then
        connString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & ThisWorkbook.FullName & "; Extended Properties=""Excel 8.0;HDR=Yes;"";"
    Else
        connString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & ThisWorkbook.FullName & "; Extended Properties=""Excel 12.0;HDR=Yes;"";"
    End If

cn.Open connString

strsql = "SELECT anno, Sum(Pezzi) as Tpz from [dati$] group by anno"

Set rs = cn.Execute(strsql)

With Worksheets("test")
    .Cells.ClearContents
    .Range("A1") = "Anno"
    .Range("B1") = "T.Pz"
    .Range("A2").CopyFromRecordset rs
    .Activate
    .Select
End With
End Sub

...