2010-11-19 230 views
1

我有以下ado连接从excel访问,但它不起作用,我得到上述错误。有任何想法吗?ADO执行 - 编译错误:用户定义类型未定义

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

顺便说一句,在SO上的代码格式有一个错误。为了避免这种情况,请在评论结束时“关闭”评论: -/ – 2010-11-19 14:41:32

回答

6

您是否参考了adodb库? (从VBE,选择工具,参考资料)

+0

不,我没有,我必须选择哪一个? – Carlos 2010-11-19 14:34:12

+1

Microsoft ADO分机6.0用于DDL和安全性? – Carlos 2010-11-19 14:37:39

+1

Microsoft ActiveX数据对象x.x通常有很多。选择一个你需要的,如果你不知道,选择最近的。 – 2010-11-19 14:38:24

0

我相信,这个问题可能会在这些类型:

adOpenKeyset, adLockOptimistic, adCmdTable 

尝试定义它们如下:

编辑
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 

后:

对不起,这是针对JScrip方言的,但我相信你可以将它改写为VBScript。 :)

+1

也许你没有注意到OP中的“错误”? – Fionnuala 2010-11-19 14:40:37

+0

的确,谢谢! – Wodzu 2010-11-19 14:44:53