2010-03-27 5 views
4

Je reçois une erreur Automation lors de l'exécution du code VBA dans Excel 2007. Je tente de me connecter à une base de données SQL Server distante et de charger des données d'Excel vers SQL Server.Erreur d'automatisation lors de l'exécution du script VBA dans Excel

L'erreur que je reçois est,

"Erreur d'exécution '-2147217843 (80040e4d)': Erreur Automation".

J'ai vérifié le site MSDN et il a suggéré que cela peut être dû à un bogue associé au fournisseur sqloledb et un moyen d'atténuer cela est d'utiliser ODBC. Eh bien j'ai changé la chaîne de connexion pour refléter le fournisseur ODBC et les paramètres associés et je reçois toujours la même erreur.

Voici le code avec ODBC comme fournisseur:

Dim cnt As ADODB.Connection 
Dim rst As ADODB.Recordset 
Dim stSQL As String 
Dim wbBook As Workbook 
Dim wsSheet As Worksheet 
Dim rnStart As Range 



Public Sub loadData() 
    'This was set up using Microsoft ActiveX Data Components version 6.0. 

    'Create ADODB connection object, open connection and construct the connection string object. 
    Set cnt = New ADODB.Connection 
    cnt.ConnectionString = _ 
    "Driver={SQL Server}; Server=onlineSQLServer2010.foo.com; Database=fooDB Uid=logonalready;Pwd='helpmeOB1';" 

    cnt.Open 

    On Error GoTo ErrorHandler 

    'Open Excel and run query to export data to SQL Server. 

    strSQL = "SELECT * INTO SalesOrders FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0', & _ 
    "'Data Source=C:\Database.xlsx; Extended Properties=Excel 12.0')...[SalesOrders$]" 

    cnt.Execute (strSQL) 

    'Error handling. 
ErrorExit: 
    'Reclaim memory from the connection objects 
    Set rst = Nothing 
    Set cnt = Nothing 

    Exit Sub 

ErrorHandler: 
    MsgBox Err.Description, vbCritical 
    Resume ErrorExit 


    'clean up and reclaim memory resources. 
    cnt.Close 
    If CBool(cnt.State And adStateOpen) Then 
    Set rst = Nothing 
    Set cnt = Nothing 

    End If 

End Sub 
+0

Sur quelle ligne, l'erreur se produit-elle? De plus, votre mot de passe du serveur SQL contient-il des guillemets simples? – shahkalpesh

+0

Le code meurt à 'cnt.open(), juste après la chaîne de connexion. Pour répondre à votre question de mot de passe, j'ai des guillemets simples autour d'elle. – brohjoe

+0

Vous n'avez pas besoin d'un point-virgule entre le nom de la base de données et le nom d'utilisateur? Aussi, en aparté, les 5 dernières lignes de votre Sub ne seront jamais exécutées. –

Répondre

3

A partir des réponses sur votre poste (et le vôtre), il semble que votre connectionstring est défectueux? Les chaînes de connexion peuvent causer un vrai mal de tête. Je connais. Essayez l'approche de Robert Gelb: http://www.vbrad.com/article.aspx?id=81 Fonctionne pour moi à chaque fois.