2010-11-19 92 views
1

J'ai la connexion ado suivante d'Excel à l'accès, mais cela ne fonctionne pas, je reçois l'erreur ci-dessus. Des idées?ADO Exécution - erreur de compilation: Type défini par l'utilisateur non défini

Sub ADO_to_access() 

Dim database As New ADODB.Connection // ERROR HERE 
Dim connectionstring As String 
Dim NewSet As Recordset 
Dim CurrentSheet As Worksheet 

Set CurrentSheet = ActiveSheet 
Set objaccess = Nothing 

connectionstring = "Provider=Microsoft.Jet.OLEDB.4.0; " & _ 
     "Data Source=C:\Users\Carlos\Desktop\VBA - CW - Database.mdb;" 

database.Open connectionstring 

' ************* MEN 
Set NewSet = New ADODB.Recordset 
NewSet.Open "Mens_Dept_Data", database, adOpenKeyset, adLockOptimistic, adCmdTable 

x = 6 
Do While Len(Range("P" & x).Formula) > 0 
With NewSet 
.AddNew 

.Fields("Irina").Value = CurrentSheet.Range("P" & x).Value 
.Fields("Thomas").Value = CurrentSheet.Range("Q" & x).Value 
.Fields("Jackie").Value = CurrentSheet.Range("R" & x).Value 

.Update 
End With 
x = x + 1 
Loop 

NewSet.Close 
database.Close 

End Sub 
+0

d'ailleurs, il y a un bug dans le formatage du code sur SO. Pour l'éviter, "fermez" le commentaire avec un "à la fin de vos commentaires: -/ –

Répondre

6

Avez-vous fait référence à la bibliothèque adodb? (De VBE, sélectionnez Outils, Références)

+0

non je ne l'ai pas fait, lequel dois-je choisir? – Carlos

+1

Microsoft ADO ext 6.0 pour le DDL et la sécurité? – Carlos

+1

Microsoft ActiveX Data Objects x.x Ils sont souvent nombreux. Choisissez celui dont vous avez besoin, si vous ne connaissez pas, sélectionnez le plus récent. –

0

Je belive que le problème pourrait être dans ces types:

adOpenKeyset, adLockOptimistic, adCmdTable 

Essayez de les définir comme suit:

var adOpenForwardOnly = 0, adOpenKeyset = 1, adOpenDynamic = 2, adOpenStatic = 3; //CursorType Values 
var adLockReadOnly = 1, adLockPessimistic = 2, adLockOptimistic = 3, adLockBatchOptimistic = 4; //LockTypeEnum Values 
var adStateClosed = 0, adStateOpen = 1, adStateConnecting = 2, adStateExecuting = 4; //ObjectStateEnum Values 
var adUseServer = 2, adUseClient = 3 //CursorLocationEnum Values 
var adCmdTable = 2 //CommandTypeEnum Values 

Après Edit:

Désolé c'est pour le dialecte JScrip, mais je suis sûr que vous pouvez le changer en VBScript. :)

+1

Peut-être n'avez-vous pas remarqué "erreur ici" dans l'OP? – Fionnuala

+0

En effet, merci! – Wodzu