Excel VBA:晚期绑定参考

我正在尝试在Excel中为加载项编写一些代码,该代码从SQL Server获取一些数据。 代码本身是完美的工作,但不知何故被损坏。

看来代码会好几次,然后突然触发Excel崩溃。 经过很长时间,我已经确定它与引用有关,看起来好像在崩溃时我将引用“Microsoft ActiveX Data Objects 2.8 Library”更改为其他内容,然后再回来,该加载项将工作再次。

看来重build插件是行不通的,我开始探索后期绑定的select。 我似乎无法理解如何去做。

Private Sub RetrieveToWorksheet(SQL As String, WriteTo As Range, Optional WriteColumnNames As Boolean = True) If GetStatus = "True" Then MsgBox ("Database is currently being updated. Please try again later.") Exit Sub End If Application.ScreenUpdating = False Dim Connection As ADODB.Connection Dim RecordSet As ADODB.RecordSet Dim Field As ADODB.Field Dim RowOffset As Long Dim ColumnOffset As Long On Error GoTo Finalize Err.Clear Set Connection = New ADODB.Connection Connection.ConnectionTimeout = 300 Connection.CommandTimeout = 300 Connection.ConnectionString = "Provider=sqloledb;Data Source=vdd1xl0001;Initial Catalog=SRDK;User Id=SRDK_user;Password=password;Connect Timeout=300" Connection.Mode = adModeShareDenyNone Connection.Open Set RecordSet = New ADODB.RecordSet RecordSet.CursorLocation = adUseServer RecordSet.Open SQL, Connection, ADODB.CursorTypeEnum.adOpenForwardOnly RowOffset = 0 ColumnOffset = 0 If WriteColumnNames = True Then For Each Field In RecordSet.Fields WriteTo.Cells(1, 1).Offset(RowOffset, ColumnOffset).Value = Field.Name ColumnOffset = ColumnOffset + 1 Next ColumnOffset = 0 RowOffset = 1 End If WriteTo.Cells(1, 1).Offset(RowOffset, ColumnOffset).CopyFromRecordset RecordSet Finalize: If Not RecordSet Is Nothing Then If Not RecordSet.State = ADODB.ObjectStateEnum.adStateClosed Then RecordSet.Close Set RecordSet = Nothing End If If Not Connection Is Nothing Then If Not Connection.State = ADODB.ObjectStateEnum.adStateClosed Then Connection.Close Set Connection = Nothing End If If Err.Number <> 0 Then Err.Raise Err.Number, Err.Source, Err.Description End Sub 

长话短说:我只是希望加载项自动添加引用“Microsoft ActiveX数据对象2.8库”。

所有的帮助非常感谢!

在回答关于后期绑定的问题时,这涉及replace代码行

 Dim Connection As ADODB.Connection 

 Dim Connection As object 

并取代

 Set Connection = New ADODB.Connection 

 Set Connection = GetObject(, "ADODB.Connection") 

对于该库中的其他对象也是如此。

现在,我不确定这是否能解决您所遇到的实际问题。 这听起来像在ActiveX库中有一个错误,你正在击中它,尽pipe你没有做任何事情似乎特别深奥。