Error en código para crear los valores de un campo con dos condicionales
He compuesto el código, pero me da un error en su parte final y no entiendo como solucionarlo. Expongo a continuación mi problema a ver si alguien puede echarme una mano.
Tengo una tabla de Access en la que trato de automatizar la creación de datos del campo signatura (cuando éste está en blanco) a partir del campo caja.
Si el valor del campo caja de ese registro es igual al valor del campo caja del registro anterior, entonces se copia el campo signatura de ese registro anterior y ese será el valor de signatura en el registro actual.
Si por el contrario, el valor del campo caja es distinto en el registro anterior, entonces habría que sumarle 1 al valor de signatura del registro anterior. Como signatura es un campo cadena (ej.: 0101, 0102, 0103..) lo que hago es con una función seleccionar el último cáracter, convertirlo a número, sumarle 1, convertirlo a cadena y componer la actual signatura con la conjunción de los tres primeros cáracteres y el cuarto al que le he sumado 1 previamente.
Este es el código que he escrito:
Option Compare Database
Option Explicit
Sub bucle_signatura()
Dim miconexion As New ADODB.Connection
Set miconexion = CurrentProject.Connection
Dim instruccion_sql As String
instruccion_sql = "SELECT * FROM Tabla1 "
Dim mirecordset As New ADODB.Recordset
mirecordset.Open instruccion_sql, miconexion, adOpenKeyset, adLockOptimistic
Dim mirecordsetclone As String
Dim caja_anterior As Integer
Dim mirecordsetclone2 As String
Dim derecha_signatura As Integer
Dim izquierda_signatura As String
Dim nuevo_digito As Integer
Do Until mirecordset.EOF
If IsNull(mirecordset!signatura) Then
mirecordset.MovePrevious
caja_anterior = mirecordset!Caja
mirecordset.MoveNext
End If
If (mirecordset!Caja) = caja_anterior Then
mirecordset.MovePrevious
mirecordsetclone = mirecordset!signatura
mirecordset.MoveNext
mirecordset!signatura = mirecordsetclone
mirecordset.Update
Else
mirecordset.MovePrevious
mirecordsetclone2 = mirecordset!signatura
izquierda_signatura = Left(mirecordsetclone2, 3)
nuevo_digito = Val(Right(mirecordsetclone2, 1)) + 1
derecha_signatura = CStr(nuevo_digito)
mirecordset.MoveNext
mirecordset!signatura = izquierda_signatura & derecha_signatura
mirecordset.Update
End If
mirecordset.MoveNext
Loop
MsgBox "Se han introducido los valores del campo Caja/signatura_archivo"
mirecordset.Close
Set mirecordset = Nothing
miconexion.Close
Set miconexion = Nothing
End Sub
El error que me da al intentar ejecutar el código es:
Se ha producido el error '3021' en tiempo de ejecución:
El valor de BOF o EOF es True, o el catual registro se eliminó; la operació solicitada requiere de un registro actual.
Y al presionar el botón de depurar me selecciona la parte correspondiente a:
mirecorsetclone2 = mirecordset!signatura