Excel VBA – 应用程序定义或对象定义的错误

我正在使用下面的代码从oracle数据库中提取一些信息。 我已经多次使用这种types的Oracle连接和SQL脚本,但是,这个特殊的脚本抛出了应用程序定义或对象定义的错误。 在出现错误之前,报告会填充7625行。

有任何想法吗?

Sub SQL_CDS() Sheets("CDS Data").Select Dim SQL As String Dim orasession As Object Dim oradatabase As Object Dim dyprod As Object Dim Row As Integer Application.ScreenUpdating = False Set orasession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraSession Object. ( Oracle ) Set oradatabase = orasession.DbOpenDatabase("sid_cnded", "bo_bca_rep/bobcarep01", 0&) 'Create the OraDatabase Object by opening a connection to Oracle. SQL = SQL & "SELECT selection_no as one, " SQL = SQL & "selection_status as two, " SQL = SQL & "onhand_cds as three, " SQL = SQL & "allocated_cds as four, " SQL = SQL & "nr_date as five, " SQL = SQL & "last_8_weeks_shipped as six, " SQL = SQL & "reorder_weeks_shipped as seven, " SQL = SQL & "reorder_status_shipped as eight " SQL = SQL & "FROM RPAT.BBC_CDS" Set dyprod = oradatabase.CreateDynaset(SQL, 0&) Sheets("CDS Data").Select Row = 2 If Not dyprod.EOF And Not dyprod.bof Then dyprod.movefirst Do Until dyprod.EOF Sheets("CDS Data").Cells(Row, 1).Select ActiveCell.Value = dyprod.Fields("one").Value Sheets("CDS Data").Cells(Row, 2).Select ActiveCell.Value = dyprod.Fields("two").Value Sheets("CDS Data").Cells(Row, 3).Select ActiveCell.Value = dyprod.Fields("three").Value Sheets("CDS Data").Cells(Row, 4).Select ActiveCell.Value = dyprod.Fields("four").Value Sheets("CDS Data").Cells(Row, 5).Select ActiveCell.Value = dyprod.Fields("five").Value Sheets("CDS Data").Cells(Row, 6).Select ActiveCell.Value = dyprod.Fields("six").Value Sheets("CDS Data").Cells(Row, 7).Select ActiveCell.Value = dyprod.Fields("seven").Value Sheets("CDS Data").Cells(Row, 8).Select ActiveCell.Value = dyprod.Fields("eight").Value dyprod.movenext Row = Row + 1 Loop End If Range("A2").Select End Sub 

谢谢SMORF

没有select(并使用Long作为一个行计数器):

 Sub SQL_CDS() Sheets("CDS Data").Select Dim SQL As String Dim orasession As Object Dim oradatabase As Object Dim dyprod As Object Dim Row As Long '<<<<<< avoid integer values when dealing with rows Application.ScreenUpdating = False Set orasession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraSession Object. ( Oracle ) Set oradatabase = orasession.DbOpenDatabase("sid_cnded", "bo_bca_rep/bobcarep01", 0&) 'Create the OraDatabase Object by opening a connection to Oracle. SQL = SQL & "SELECT selection_no as one, " SQL = SQL & "selection_status as two, " SQL = SQL & "onhand_cds as three, " SQL = SQL & "allocated_cds as four, " SQL = SQL & "nr_date as five, " SQL = SQL & "last_8_weeks_shipped as six, " SQL = SQL & "reorder_weeks_shipped as seven, " SQL = SQL & "reorder_status_shipped as eight " SQL = SQL & "FROM RPAT.BBC_CDS" Set dyprod = oradatabase.CreateDynaset(SQL, 0&) Sheets("CDS Data").Select 'not required Row = 2 If Not dyprod.EOF And Not dyprod.bof Then dyprod.movefirst Do Until dyprod.EOF Sheets("CDS Data").Cells(Row, 1).Resize(1,8).Value = _ Array(dyprod.Fields("one").Value, _ dyprod.Fields("two").Value, _ dyprod.Fields("three").Value, _ dyprod.Fields("four").Value, _ dyprod.Fields("five").Value, _ dyprod.Fields("six").Value, _ dyprod.Fields("seven").Value, _ dyprod.Fields("eight").Value) dyprod.movenext Row = Row + 1 Loop End If Range("A2").Select End Sub