'91'对象variables/未在ADODB连接线上设置块

我想查询一个数据库来填充一个列表框(以及其他各种任务)。 我运行我的代码时出现以下错误:

错误:

91 Object variable or With block variable not set 

我的代码:

 Private Sub UserForm_Initialize() On Error GoTo UserForm_Initialize_Err Dim cnn As ADODB.Connection Dim rst As ADODB.Recordset Dim StrDBPath As String Dim strSQL As String strSQL = "SELECT [Heads A].[Date Entered], [Heads A Issues].Department, [Heads A Issues].Equipment, [Heads A Issues].[Operation Issues], Sum([Heads A Issues].Downtime) AS SumOfDowntime1, IIf([Head A Crew]='3','C-Crew',IIf([Head A Crew]='2','B-Crew','A-Crew')) AS Crew " & _ "FROM [Heads A] INNER JOIN [Heads A Issues] ON [Heads A].[HeadLineA ID] = [Heads A Issues].[HeadLineA ID]" & _ " GROUP BY [Heads A].[Date Entered], [Heads A Issues].Department, [Heads A Issues].Equipment, [Heads A Issues].[Operation Issues], IIf([Head A Crew]='3','C-Crew',IIf([Head A Crew]='2','B-Crew','A-Crew'))" & _ " HAVING ((([Heads A].[Date Entered])>=#" & Sheets("Choices").Cells(2, 1).Value & "# And ([Heads A].[Date Entered])<=#" & Sheets("Choices").Cells(2, 2).Value & "#) And (([Heads A Issues].Department)='" & Sheets("Choices").Cells(2, 3).Value & "') And ((IIf([Head A Crew]='3','C-Crew',IIf([Head A Crew]='2','B-Crew','A-Crew'))) Like IIf('" & Sheets("Choices").Cells(2, 4).Value & "'='all','*-Crew','" & _ Sheets("Choices").Cells(2, 4).Value & "'))) ORDER BY [Heads A Issues].Department, [Heads A Issues].Equipment;" StrDBPath = Application.ActiveWorkbook.Path & "\Daily Closing Report V997.accdb" cnn.Open "Provider=Microsoft.Ace.OLEDB.12.0;" & _ 'THIS IS WHERE THE ISSUE IS "Data Source=" & StrDBPath & ";" &_ "Jet OLEDB:Engine Type=5;" & _ "Persist Security Info=False;" rst.Open strSQL, cnn, adOpenStatic, adLockOptimistic CopyText (strSQL) If (rst.RecordCount = 0) Then MsgBox "0 records found." Unload UserForm1 Exit Sub End If If rst.RecordCount > 0 Then rst.MoveFirst End If With Me.ListBox1 .Clear Do While rst.EOF = False .AddItem rst![Department,Heads A] rst.MoveNext Loop End With UserForm_Initialize_Exit: On Error Resume Next rst.Close cnn.Close Set rst = Nothing Set cnn = Nothing Exit Sub UserForm_Initialize_Err: MsgBox Err.Number & vbCrLf & Err.Description, vbCritical, "Error!" Resume UserForm_Initialize_Exit End Sub 

我已经缩小了错误出现在打开我的连接(上面标记)的行上,但是我不确定它为什么会按照原样行事。 TIA!

尽早将它绑定为新的。

 Dim cnn As new ADODB.Connection 

你可以像Don Jewett所说的那样做,分两行来做:

 Dim cnn As ADODB.Connection Set cnn = New ADODB.Connection 

这是后期绑定,在你的情况下只是一个额外的代码行。 如果你的代码中的连接可能永远不会由于逻辑而产生,那么在连接打开的时候晚点连接是很好的,所以绑定在需要的时候才会发生。 但是,既然你正在使用你的连接和logging集,那么你可能早就把它绑定了。