Visual Basic para Aplicaciones - S.O.S(Volcar Recordset a Excel, 4000filasX25col)

Life is soft - evento anual de software empresarial
 
Vista:

S.O.S(Volcar Recordset a Excel, 4000filasX25col)

Publicado por Mel (1 intervención) el 29/05/2002 18:15:06
Hola, necesitaría que alguien me ayudase con un problema que me trae de cabeza.
Tengo una BD en Oracle a la que me conecto desde VBA de Excel. Abro un recordset, con la consulta que me interesa, y la única forma que encuentro para volcar esta burrada de datos es con bucles recorriendome todo el recordset, con lo que tardo 30 segundos aprox.
Las otras opciones son las típicas, pero ninguna me sirve, no me dejar volcar más de 157 registros, eso en mi equipo, en otro, solamente 25 registros. ¿Cómo puedo solucionar esto?
Os enseño el código de las diferentes formas que he intentado:

*** OPCION A:
ActiveSheet.Cells(4, 1).CopyFromRecordset Rs
/* Se para dando error en el registro 157, error 3219

*** OPCION B:
With ActiveSheet.QueryTables.Add(Connection:=Rs, Destination:=Range(\"A5\"))
.Refresh BackgroundQuery:=False
End With
/* Devuelve un error en el .Refresh cuando el recordset contine
/*mas de 157 registros, Error 1004

*** OPCIÓN C:
ActiveSheet.Range(\"A10\").CopyFromRecordset Rs
/* Igual que opcion A, error 3219

*** OPCION D:
Do Until Rs.EOF
i = i + 1
For j = 0 To 23
Cells(i, j + 1).Value = Rs.Fields(j)
Next j
Rs.MoveNext
Loop
/* esto me funciona bien, pero no me sirve porque tarda 30 seg. Y
/*es probable que pueda encontrarme con más de 4000 filas.

Os agradezco muchisimo vuestra ayuda.

Un cordial saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:S.O.S(Volcar Recordset a Excel, 4000filasX25col

Publicado por Megaman (1 intervención) el 31/05/2002 06:13:25
Dim MSExcel As Excel.Application
Dim Fila As Integer
If Not Clmtto.rs.RecordCount = 0 Then
Set MSExcel = New Excel.Application
MSExcel.Visible = True
MSExcel.Workbooks.Add
MSExcel.SheetsInNewWorkbook = 1
MSExcel.Columns("A:B").ColumnWidth = 20
MSExcel.ActiveCell.Cells(1, 1) = "CODIGO"
MSExcel.ActiveCell.Cells(1, 2) = "NOMBRE"
Fila = 1
Clmtto.rs.MoveFirst
Do While Not (Clmtto.rs.EOF OR Clmtto.rs.BOF)
MSExcel.ActiveCell.Cells(Fila, 1) = Clmtto.rs.Fields(O).Value
MSExcel.ActiveCell.Cells(Fila, 2) = Clmtto.rs.Fields(1).Value
Clmtto.rs.MoveNext
Fila = Fila + 1
Loop
Else
MsgBox "NO EXISTE INFORMACION PARA EXPORTAR", vbInformation
End If

ESTA ES LA FORMA CORRECTA DE EXPORTAR DATOS A EXCEL Y SI CON ESTO EL PROBLEMA DE LOS 30 SEGUNDOS PERCISTE ES TU COMPUTADOR.

SUERTE!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar