Formulario no calcula la fecha de fin de garantía

En un formulario tengo puesto en un cuadro de texto que recoge el dato de una tabla al que intento sumarle el plazo de garantía, que también es un campo existente en una tabla para que me devuelva el valor de la fecha fin de garantía en otro cuadro de texto no vinculado a la tabla.

Tengo el siguiente código y sin embargo, no me devuelve nada. No sé qué es lo que estoy haciendo mal. ¿Podéis echarme un mano?

Private Sub FechaPuestaMarcha_AfterUpdate()

Dim intervalo As String
Dim number As Double

intervalo = yyyy
number = Garantia
Date = FechaPuestaMarcha

If Not IsNull(FechaPuestaMarcha) Then
finGarantia = DateAdd(yyyy, Garantia, FechaPuestaMarcha)
End If
End Sub

1 respuesta

Respuesta
1

Prueba así:

Private Sub FechaPuestaMarcha_AfterUpdate()
If Not IsNull(FechaPuestaMarcha) Then
Me.finGarantia = DateAdd("yyyy", Me.Garantia, Me.FechaPuestaMarcha)
End If
End Sub

Un saludo.


Me da error. 

La expresión al cargar produjo el error de ha detectado un nombre ambiguo :fechapuestamsrcha after update

Te cuento, yo creo que el error está en que el formulario abre la tabla tbInventario a través de un combo para localizar el equipo que quiero dar de baja y eso me está complicando mucho todo el código, porque no me termina de funcionar ningún comando bien.

Yo lo que quiero es que el usuairo abra un artículo en concreto, el formulario muestre sólo ciertos campos de la tabla tbInventario, y que si no está de baja, registre ciertos datos y después me devuelva el mensaje de Ok y el formulario en blanco preparado para el siguiente registro. Este es el código que tengo hasta ahora, pero me da varios errores ( no me calcula la fecha de fin de garantía, no me limpia los campos, me pide el campo clave de un nuevo registro....pufff....estoy deseperada, porque no termino de conseguir que funcione.

Option Compare Database
Option Explicit

Private Sub aptoDonacion_Click()
If (aptoDonacion) = (-1) Then
DestinatarioDonacion.Locked = False
Else
DestinatarioDonacion.Locked = True
End If
End Sub

Private Sub BuscaNumero_AfterUpdate()
Dim rs As Object
Set rs = Me.Recordset.Clone
rs.FindFirst "[nInventario] = " & Str(Nz(Me![BuscaNumero], 0))
If Not rs.EOF Then Me.Bookmark = rs.Bookmark


If Not IsNull(IdTipoBaja) Then
Me.avisoBaja.Visible = True
Me.avisoObservaciones.Visible = True
ObservacionesBaja.Locked = False
aptoDonacion.Locked = False
Vretirado.Locked = False

Else
Me.avisoBaja.Visible = False
Me.avisoObservaciones.Visible = False
IdTipoBaja.Locked = False
FechaBaja.Locked = False
ObservacionesBaja.Locked = False
aptoDonacion.Locked = False
Vretirado.Locked = False

End If
End Sub

Private Sub cancelar_Click()
On Error GoTo errorcancelar:
DoCmd.RunCommand acCmdUndo
DoCmd.GoToRecord acActiveDataObject, , acNewRec
IdTipoBaja = ""
Me.ObservacionesBaja = ""
Me.DestinatarioDonacion = ""
MsgBox ("BAJA CANCELADA"), vbInformation
NInventario.SetFocus
BuscaNumero.SetFocus
errorcancelar:
If Err.number = 2046 Then
DoCmd.GoToRecord acActiveDataObject, , acNewRec
MsgBox ("No se guardará ningún cambio"), vbInformation
NInventario.SetFocus
BuscaNumero.SetFocus
Err.Clear
Exit Sub
End If
End Sub

Private Sub FechaPuestaMarcha_AfterUpdate()

'Dim intervalo As String
'Dim number As Double
'
'intervalo = yyyy
'number = Garantia
'Date = FechaPuestaMarcha
'
'Private Sub FechaPuestaMarcha_AfterUpdate()
' If Not IsNull(FechaPuestaMarcha) Then
' Me.finGarantia = DateAdd("yyyy", Me.Garantia, Me.FechaPuestaMarcha)
' End If

End Sub

Private Sub Form_Current()
Form_Load
End Sub

Private Sub Form_Load()

'DoCmd.GoToRecord acActiveDataObject, , acNewRec
Dim Campos As Object
For Each Campos In Me.Controls
If TypeOf Campos Is TextBox Or TypeOf Campos Is ComboBox Then
Campos.Locked = True
End If
Next Campos
BuscaNumero.Value = ""
BuscaNumero.SetFocus
Me.avisoBaja.Visible = False
Me.avisoFecha.Visible = False
Me.avisoTipo.Visible = False
Me.avisoObservaciones.Visible = False
[BuscaNumero].Locked = False 'Comb. que NO debe bloquearse

End Sub

Private Sub guardar_Click()
On Error GoTo errorguardar

If Not IsNull(IdTipoBaja) And Not IsNull(FechaBaja) Then
DoCmd.RunCommand acCmdSaveRecord
DoCmd.RefreshRecord
Me.BuscaNumero.SetFocus
Me.BuscaNumero.Requery
MsgBox ("BAJA REGISTRADA"), vbInformation
Me.avisoFecha.Visible = False
Me.avisoTipo.Visible = False
Me.avisoObservaciones.Visible = False
ElseIf IsNull(IdTipoBaja) Then
Me.avisoTipo.Visible = True
IdTipoBaja.SetFocus
ElseIf IsNull(FechaBaja) Then
Me.avisoBaja.Visible = True
FechaBaja.SetFocus
End If

errorguardar:
Err.Clear
''If Err.number = 0 Then
'' Resume Next
'' Else
' MsgBox Err.number
' MsgBox Err.Description
' Err.Clear
''End If
Exit Sub
End Sub

Private Sub salir_Click()
On Error GoTo salir

DoCmd.Close acForm, "Frm2Bajas"
DoCmd.OpenForm "menu_principal"
salir:
If Err.number = 2046 Then
Dim msg As String
' msg = "Error #" & Err.Number & Chr(13) & Error

MsgBox ("NO SE REALIZARA NINGUNA MODIFICACIÓN"), vbInformation

Err.Clear

End If

End Sub

Private Sub Vretirado_Click()
If (Vretirado) = (-1) Then
FechaRetirada.Locked = False
Else
FechaRetirada.Locked = True
End If

End Sub

Ese error te indica que tienes dos procedimientos que se llaman igual. Revisa el código de tu formulario y elimina uno de ellos

Tienes razón! Está dos veces,  grrrrr

Gracias. 

Aunque la comprobaciones ya las tendré que hacer mañana. 

Muchas gracias. Mañana te cuento 

Hola buenos días:

Solucioné el error (se produjo al pegar el código) pero cuadro de texto sigue sin mostrar la fecha en la que vence el plazo de garantía

Pues que raro, porque el código es correcto (si efectivamente son esos los nombres, que creo que si) y acabo de comprobar que funciona.

Comprueba que tienes bien vinculado el evento con el código. Para eso saca las propiedades del cuadro de texto FechaPuestaMarcha, vete a la pestaña Eventos, y comprueba que en la fila de "Después de actualizar" te ponga [Procedimiento de Evento].

nada, que no.

El evento está bien seleccionado. El código es el que tu me has dado y el campo sigue sin actualizarse.

Ni idea qué estoy haciendo mal

Te mando un mini-ejemplo con el código funcionando. Mira a ver qué tienes distinto...

http://filebig.net/files/RyzmrXppUL 

ok

Sabes?, la única diferencia que existe entre lo que tengo yo y lo que me has enviado tú, es que en mi caso, el campo "fingarantia" no es un campo de la tabla. Lo que pretendía es que fuera un campo calculado en el formulario porque es un dato que no deseaba guardar. Dime si la única forma de que funcione es crear el campo en la tabla, por favor o si puedo calcularlo directamente en el formulario sin tener que almacenarlo.

Muchas gracias!!!!

Te tendría que funcionar igual aunque no lo guardes en la tabla.

No sé que es lo que te puede estar pasando...

Si quieres envíame una copia de tu BD (sin datos personales) a [email protected] y le echo un vistazo a ver si doy con el problema

El "problema" está en que como el campo lo tienes bloqueado (por el código del form_load), nunca se actualiza y por tanto no se ejecuta el evento.

Solución: pon el código dentro del form_current, así en cada registro te hará el cálculo.

Por cierto, que si la garantía es en meses, el código sería:

Me.finGarantia = DateAdd("m", Me.Garantia, Me.FechaPuestaMarcha)

Un saludo.


Añade tu respuesta

Haz clic para o

Más respuestas relacionadas