Hola Amigos foreros!!!
Les cuento que despues de mucho recorrer por el foro y ver varios ejemplos de como requerir campos, he puesto esto:
'GRACIAS XAVI
Public Function verificardatos(nombreform As String, NombreTabla As String)
' definimos las variables
Dim ctl As Control ' para recorrer los controles
Dim msg As String ' para generar el mensaje
Dim algomal As Boolean ' para controlar si algo esta mal
' constantes de color para colorear los campos erroneos
Const colorMalo As Double = vbRed
Const colorbueno As Double = vbWhite
' iniciamos las variables
algomal = False
msg = "Faltan datos por introducir. Verifica los siguientes campos." & vbCrLf & vbCrLf
' recorremos los controles del formulario que hemos pasado como argumento
For Each ctl In Forms(nombreform).Controls
' si el control esta en la seccion detalle
With Forms(nombreform).Controls(ctl.Name)
If .Section = acDetail Then
' y su Origen del control no es nulo y que este no sea algo
' que referencie a otros controles o campos calculados
' (de ahí esa verificacion a que el primer caracter no sea =)
On Error GoTo errVerifica ' controlaremos que exista esa propiedad
If Trim(Nz(.ControlSource, "")) <> "" And Left(.ControlSource, 1) <> "=" Then
' verificamos los datos que contiene y que sean datos requeridos
If IsNull(.Value) And CampoRequerido(NombreTabla, Forms(nombreform).Controls(ctl.Name).ControlSource) Then
' parece que no hay nada escrito
algomal = True
msg = msg & vbCrLf
msg = msg & "· " & .Tag
.BackColor = colorMalo
Else
.BackColor = colorbueno
End If
End If
End If
End With
' aqui es donde continuamos si se ha producido un error
continua:
On Error GoTo 0
Next
msg = msg & vbCrLf & vbCrLf & "Son los que aparecen en rojo."
If algomal Then
MsgBox msg, vbCritical, "Verificación de datos"
End If
exitVerifica:
Exit Function
errVerifica:
' manejamos el error 438, que es cuando intentamos acceder o modificar una propiedad que no existe
' para un control
If Err.Number = 438 Then
Resume continua
Else
MsgBox Err.Number & "-" & Err.Description
Exit Function
End If
End Function
' GRACIAS TARIBO
Public Function CampoRequerido(Tabla As String, Campo As String) As Boolean
Dim dbs As DAO.Database
Dim Campito As DAO.Field
Dim Tablita As TableDef
Set dbs = CurrentDb
Set Tablita = dbs.TableDefs(Tabla)
For Each Campito In Tablita.Fields
If Campito.Name = Campo Then
If Campito.Required = True Then
CampoRequerido = True
Exit Function
Else
CampoRequerido = False
Exit Function
End If
End If
Next Campito
Set Tablita = Nothing
dbs.Close
Set dbs = Nothing
End Function
y en el Botón en el evento al hacer click:
Call verificardatos(Me.Name, Me.RecordSource)
Bueno hasta ahí me funciona perfecto pero...
solamente me lo hace en el Form principal..
Les cuento como tengo armado el Form:
El principal es Ingreso con el orgen de datos de la tabla Articulos
y el SubForm es ING_Talles con el origen de datos de la tabla talles.
el boton se encuentra en la Form principal osea Ingreso...
Alguien sabe como hacer para que tambien verifique El SubForm ING_Talles
Desde ya muchas gracias
Saludos