Condiciones al apretar botón y referir a registros anteriores

Tengo un formulario "Elementos" que se abre en un nuevo registro a través de otro formulario "Menu". Me gustaría saber como puedo hacer para que cuando un campo Si/no "Motores" está sin marcar en el formulario y otro campo "Tipo" (texto corto) está vacío que al apretar un botón me diga que debo rellenar el campo "Tipo" en el caso que el Si/No "Motores" sea nulo. He utilizado este código pero no me responde.

Private Sub Comando477_Click()
If Motores = Null And Tipo = Null Then
MsgBox "Debes rellenar Tipo si los Motores está NOK"
Else
DoCmd. Close
DoCmd. OpenForm "FormRegistroCardayTorre"
DoCmd. GoToRecord,, acNewRec

Ademas me gustaria hacer que si cuando voy a un nuevo registro detecta que el campo Tipo el anterior registro se ha escrito lo mismo que aparezca un mensaje que diga "Ya pusiste éste Tipo de Motor en el registro anterior".

Y tambien que se pudiera navegar por los registros pero que solo el nuevo registro estuviera activo y todos los otros inactivos (que no se pudieran modificar).

1 Respuesta

Respuesta
1

Vamos por partes. Luego trataremos de concatenar las respuestas. Es de suponer que el formulario Elementos lo abres desde Menu con algo, más o menos, así

DoCmd. OpenForm "Elementos",,,, acFormAdd

Y quieres que si los controles, que supongo son del formulario Menu, Motores y Tipo son nulos que te avise, antes. Si es eso puedes poner

If motores=0 and isnull([tipo]) then

msgbox"Debes...

Docmd. Cancelevent

else

docmd.openform"elementos",,,,acformadd

end if 

Para lo segundo, en el evento Antes de actualizar del cuadro de texto TIPO puedes poner

If dlast("tipo","elementos")='" & me.tipo & "' then

msgbox"Ya pusiste...

docmd.cancelevent

end if

Para lo último, si tengo el formulario, para abreviar sólo le he puesto la instrucción al control NombreCliente(había que saber como es tu formulario)

Cuando pongas el cursor en el registro nuevo se habilita para que escribas, pero si volvieras a poner el cursor en uno ya "rellenado" se inhablita.

El código del evento Al activar el registro lo he puesto como

Private Sub Form_Current()
If Me.NewRecord Then
NombreCliente.Enabled = True
Else
NombreCliente.Enabled = False
End If
End Sub

Por cierto, también podrías evitar que cambien nada poniendo, en el evento Al activar registro

Private Sub Form_Current()
For Each Control In Form.Controls
If Control.ControlType = acTextBox Then
If Me.NewRecord Then
Control.Locked = False
Else
Control.Locked = True
End If
End If
Next
End Sub

Así, si puedes poner el cursor el cualquier control pero como no sea un registro nuevo no puedes modificar lo escrito en los cuadros de texto. En mi caso, los controles del formulario son sólo cuadros de texto, si también hay algún combinado seía

If control.controltype=actextbox or control.controltype=accombobox then

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas