Error de campo nulo al crear un nuevo registro
Lo primero, perdona el título, pero sintentizar a veces es complicado.
Te cuento. Estoy limpiando el código de una base de datos, optimizándolo. En los casos en que se repite un mismo código, lo paso a un módulo, y lo llamo desde el formulario en que lo necesito.
El código que se me repite es este:
Private Sub Form_Current() On Error Resume Next Dim vAutonum As Variant, vUltimo As Variant If Me.NewRecord Then If MsgBox("Vas a generar un nuevo apunte con numeración automática" & vbCrLf & vbCrLf & "¿Quieres seguir?", vbYesNo) = vbYes Then 'Tomamos el valor del campo CodFormaPago vAutonum = Me.CodFormaPago 'Si vAutonum no es nulo, es porque ya hay valor en el CodFormaPago, entonces salimos del procedimiento If Not IsNull(vAutonum) Then Exit Sub 'vUltimo es igual al Número de Registros del año +1, que se sumará abajo vUltimo = Nz(DCount("[CodFormaPago]", "[01-TPV Forma de pago]"), 0) 'Si vUltimo es nulo, es porque no hay ningún NumJustifica, entonces le damos valor 0 If IsNull(vUltimo) Then vUltimo = 0 End If 'Sumamos 1 al valor anterior vUltimo = vUltimo + 1 Me.CodFormaPago.Value = vUltimo Else 'Si la respuesta a la Pregunta ha sido No Me.Undo DoCmd.GoToRecord , , acPrevious Exit Sub End If End If End Sub
Donde tengo el problema es en esta parte:
vAutonum = Me.CodFormaPago 'Si vAutonum no es nulo, es porque ya hay valor en el CodFormaPago, entonces salimos del procedimiento If Not IsNull(vAutonum) Then Exit Sub
El código ya optimizado, que pongo en el módulo es:
Public Function GeneracionDeCodigosConsecutivosGeneral(FName As Form, Codigo As String, Formulario As String) Dim vAutonum As Variant, vUltimo As Variant If FName.NewRecord Then If MsgBox("Vas a generar un nuevo apunte con numeración automática" & vbCrLf & vbCrLf & "¿Quieres seguir?", vbYesNo, NombreBD) = vbYes Then vUltimo = Nz(DCount(Codigo, Formulario), 0) If IsNull(vUltimo) Then vUltimo = 0 End If vUltimo = vUltimo + 1 FName.Codigo.Value = vUltimo Else FName.Undo DoCmd.GoToRecord , , acPrevious Exit Function End If End If End Function
Y lo llamo desde el formulario así:
Call GeneracionDeCodigosConsecutivosGeneral(Me, "NombreFormaDePago", "T05FormasDePago")
Vamos al lío. En la parte que decía que tenía problemas al pasarlo al módulo, se debe a que evalúa si ya has iniciado un nuevo registro y has escrito algo en el campo Código. Por norma general, ese valor va a ser nulo, y ahí está el error que me da. Entonces, no tengo ninguna de meter esas tres líneas en el módulo para que evalúe si es o no nulo.
Yo había pensado en evaluarlo en el propio formulario, pero quería saber si existe alguna forma de hacerlo en el módulo sin que de ese error de campo nulo.