Como eliminar Error 3021 en Loop?

He creado una tabla que contiene datos para la generación de un libro de Ventas IVA y tengo un proceso que le asigna un número de serie a cada registro según el Tipo de Cliente y el Tipo de Factura (Factura o Devolución).

El proceso se cumple perfecto hasta que llega al final de los registros y el sistema emite el siguiente error: "Se ha producido el Error '3021' en tiempo de ejecución: No hay ningún registro activo." Lo que ocasiona la interrupción del proceso y la posibilidad de que los usuarios accedan a las lineas del programa con la opción "DEPURAR".

Aquí les dejo las lineas para su análisis y que por favor me ayuden a solucionar este inconveniente. Mil Gracias.

Dim stDocName As String
Dim db As Database
Dim rs As Recordset
Dim vTipoClie As Integer
Dim vSerie As Integer
Dim vFechaX As String
Dim vTipoFac As String
If MsgBox("Se generarán los datos correspondientes a las fechas desde el " & fechadesde.Value & " hasta la fecha " & fechahasta.Value & ", está de acuerdo?", vbYesNo, "Libro de Ventas") = vbYes Then
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70

DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70

' ** Actualiza DataLibros
stDocName = "ActDataLibros1"
DoCmd.RunMacro stDocName
Comando13.Enabled = True
' Activamos la bd
Set db = CurrentDb
' Creamos el recordset
Set rs = db.OpenRecordset("Select NumeroD,FechaE,TipoFac,TipoClie, FechaX, Serie from DataLibros order by FechaE")
vSerie = 1 ' Damos el valor a la variable vSerie
Do While Not rs.EOF ' mientras no sea final de fichero hazme...
vTipoClie = rs!TipoClie ' damos el valor de la variable igual al valor del campo TipoClie
vFechaX = rs!FechaX
vTipoFac = rs!TipoFac
Do While Not rs.EOF And vTipoClie = rs!TipoClie And vFechaX = rs!FechaX And vTipoFac = rs!TipoFac ' mientras no sea final de fichero y el campo TipoClie tenga el mismo valor....
rs.Edit ' editamos el recordset
rs!Serie = vSerie
Rs.Update ' damos el valor al campo serie igual al de la variable y actualizamos
rs. MoveNext ' vamos al siguiente registro
Loop ' cerramos el 2º bucle
vSerie = vSerie + 1 ' aumentamos el valor de vSerie
Loop ' cerramos el 1er bucle
Else
MsgBox "Procedimiento Abortado", vbInformation, "Información"
fechadesde.SetFocus
End
End If

1 respuesta

Respuesta
1

Antes de ir al siguiente registro:

If rs.EOF then

Exit do

End if

Es decir, si es final del fichero... sal del bucle

Hola Angeles...

Gracias por tu ayuda y tu pronta respuesta, pero hice lo indicado y aún sigue saliendo el mismo error, el proceso de detiene aquí:

Do While Not rs.EOF And vTipoClie = rs!TipoClie And vFechaX = rs!FechaX And vTipoFac = rs!TipoFac

Podrías por favor indicarme en que punto exactamente debo colocar la instrucción

If rs.EOF then
Exit do
End if

Por que ya la he cambiado de posición varias veces, pero donde la pongo (según indica la lógica, sigue apareciendo el mismo error)

Espero puedas ayudarme a resolver este errorcito.

Mil Gracias!

Creo que lo deberías poner antes de cerrar el 1er bucle y antes de cerrar el 2º

Me cuentas, saludos Angeles

*** Sí no te sale, puedes enviarme la BD (en access 2003) a mi correo y la echo un vistazo.

[email protected]

Página supuestos y soluciones en access: http://angelessebas.es/

Perfecto Angeles, resulto excelente. Muchísimas gracias, por eso eres mi Experta Favorita! je je!. Saludos y de nuevo muchísimas gracias....

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas