** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Mensaje al validar campo
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoMensaje al validar campo

 Responder Responder
Autor
Mensaje
emijas Ver desplegable
Asiduo
Asiduo


Unido: 03/Junio/2004
Localización: España
Estado: Sin conexión
Puntos: 363
Enlace directo a este mensaje Tema: Mensaje al validar campo
    Enviado: 28/Mayo/2015 a las 09:05
Buenos Dias he usado esta solución de Guarracuco para validar que los campos de un formulario esten completos

http://www.mvp-access.com/foro/validaciones-acces-2010_topic79461.html?KW=tag

Funciona genial,

Ahora bien en un formulario en particular me da el siguiente error al hacher click en un boton

Hay un uso no válido de un . (punto), de un operador ! o de paréntesis ( ).

Y el caso es que en ese formulario en particular he puesto un solo campo para validar.

El codigo del boton es este

Debug.Print "antes del IF"

If campos_obligatorios(Me.Name) = False Then

Cancel = 1

Else

Debug.Print "no hay campos faltantes"

End If

El caso es que en la ventana de DEBUG si sale "antes del IF" y luego me aparece el mensaje

Hay un uso no válido de un . (punto), de un operador ! o de paréntesis ( ).

Y se queda allí.

alguna sugerencia!

Saludos y gracias de antemano.
Arriba
E. Feijoo Ver desplegable
Moderador
Moderador


Unido: 16/Abril/2004
Localización: España
Estado: Sin conexión
Puntos: 19948
Enlace directo a este mensaje Enviado: 28/Mayo/2015 a las 10:03
Esos mensajes aparecen cuando se evalúan las expresiones antes de ser ejecutadas (lo hace de forma automática el motor de Access), lo adecuado seria mostrar lo que se intenta evaluar, no la secuencia de eventos (los eventos no dan problemas, los problemas aparecen al 'hacer algo' en/con ellos).
Arriba
emijas Ver desplegable
Asiduo
Asiduo


Unido: 03/Junio/2004
Localización: España
Estado: Sin conexión
Puntos: 363
Enlace directo a este mensaje Enviado: 28/Mayo/2015 a las 11:25
Buenos Dias

¿Y ese mensaje a que se debe? y en todo caso como puedo como puedo mostrar lo que se intenta evaluar o de donde es exactamente el error.

Este error solo ha aparecido cuando añadí al codigo 

campos_obligatorios(Me.Name) = False 

Un saludo
Arriba
E. Feijoo Ver desplegable
Moderador
Moderador


Unido: 16/Abril/2004
Localización: España
Estado: Sin conexión
Puntos: 19948
Enlace directo a este mensaje Enviado: 28/Mayo/2015 a las 13:24
Tiene toda la pinta de ser una función a la que se le 'pasa como parámetro' el nombre del formulario actual, seria pues en su destino (la función) donde se podría ver si el parámetro cumple los requisitos esperados o si el parámetro que devuelve la función es el que se espera como termino en la comparación.

Solo un inciso: si Access pudiera localizar con absoluta precisión la causa del fallo, no lo consideraría un fallo y propondría (o aplicaría directamente) una solución.
Arriba
VIMIPAS Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 06/Enero/2006
Localización: ESPAÑA
Estado: Sin conexión
Puntos: 5300
Enlace directo a este mensaje Enviado: 28/Mayo/2015 a las 15:49
Hola buenas tardes.

Publicado originalmente por emijas emijas escribió:

Buenos Dias.....    campos_obligatorios(Me.Name) = False .....


Y vimipas copia aquí la función de Guarracuco:

Function campos_obligatorios(este As String) As Boolean

Dim frm As Form

'Debug.Print este

Set frm = Forms(este)

For Each ctl In frm.Controls

    If ctl.ControlType = 109 Or ctl.ControlType = 111 Then' cuadros de texto y cuadro de lista

    'Debug.Print CTL.Name; CTL.Value

        If ctl.Tag = "*" And (IsNull(ctl.Value) Or ctl.Value = "") Then

            campos_obligatorios = False

            MsgBox "El campo " & ctl.Name & " es obligatorio.", vbCritical, titulo

            frm.Controls(ctl.Name).SetFocus

            Exit Function

        End If

    End If
o
Next

campos_obligatorios = True

End Function

Si en el penúltimo renglón de esta función que puso Guarracuco existe esto:

campos_obligatorios = True

y está funcionando a la perfección, al menos así lo he comprobado yo hace unos instantes. ¿Tú por que pones False?

¿Podrías poner también lo mismo?, y además colocar el asterisco, y asegurarte de que ese control es de los del Type que indica Guarracuco.

Después de hacer la prueba, nos indicas cual es el resultado.

Saludos

Editado por VIMIPAS - 28/Mayo/2015 a las 15:53
Gracias
Arriba
MexMan70 Ver desplegable
Colaborador
Colaborador


Unido: 17/Julio/2007
Localización: DarkSide
Estado: Sin conexión
Puntos: 9233
Enlace directo a este mensaje Enviado: 29/Mayo/2015 a las 21:01
Observa que en la solución propuesta por Carlos (Guarracuco) es en el evento BeforeUpdate y tu lo estas aplicando en un botón (me imagino que en el evento Al Hacer Click):

Publicado originalmente por emijas emijas escribió:

El codigo del boton es este

Debug.Print "antes del IF"
If campos_obligatorios(Me.Name) = False Then
   Cancel = 1
Else
   Debug.Print "no hay campos faltantes"
End If

La solución esta en revisar la ayuda de Access acerca del Evento Click y del Evento BeforeUpdate, analiza y encontrarás el error
OneDrive: http://sdrv.ms/Vk6eJd
Arriba
E. Feijoo Ver desplegable
Moderador
Moderador


Unido: 16/Abril/2004
Localización: España
Estado: Sin conexión
Puntos: 19948
Enlace directo a este mensaje Enviado: 30/Mayo/2015 a las 00:13
No he analizado la función propuesta por Guarracuco (la original), asi que mis notas iran sobre el código expuesto por Vimipas.

Una función devolverá un valor del tipo que se le indique o (si no se le indica tipo) un 'Variant' para adaptarse a lo que pueda venir.

Dado que POR DEFECTO al dimensionar una variable este nace con valor cero si es numérica, una cadena de longitud cero si es de texto y un false si es Booleana, el poner a false lo que nace y es false si no se le adjudica otro valor, en principio es redundante ...

Al respecto de la comparación:
If campos_obligatorios(Me.Name) = False Then ...

En principio es correcta, la función puede devolver un valor false o true y por ello no debería dar error alguno (o se cumple o no se cumple y punto final).

Que se la llame desde un botón no es un problema, lo que hará (sea cual fuere quien la utilice) es recorrer el conjunto de objetos del formulario que se le pase como parámetro y evaluar si cada uno de los objetos en el contenidos (de forma individual) deberá ser tenido en cuenta y si se le tiene en cuenta, si cumple unas determinadas condiciones .... no debería ser la causa del error.

Creo que hay algo mas (el código real que se aplico no ha sido publicado) que es la causa del error de sintaxis y eso solo se podrá saber si se ve 'todo' o si el autor del hilo genera un punto de interrupción para hacer un seguimiento paso a paso del código (a momento actual) desconocido.

Dado el mensaje, la duda me surge en el posible nombre del formulario, en que se este utilizando una copia (su nombre sea algo como 'copia del formulario xxxx') y que por tener espacios, al interpretarlo la falta de unos corchetes de al traste con todo.

Arriba
MexMan70 Ver desplegable
Colaborador
Colaborador


Unido: 17/Julio/2007
Localización: DarkSide
Estado: Sin conexión
Puntos: 9233
Enlace directo a este mensaje Enviado: 30/Mayo/2015 a las 15:34
Hola a todos !

Analizando el código de Carlos observo dos errores:
1.- No se ha definido la variable ctl, definela así: Dim ctl As Control
2.- No se ha definido la variable titulo, definela así: Dim titulo as String, posteriormente asignarle el texto del Título de la ventana, aunque me decanto por pasar el texto directamente en el MsgBox

Esos son los dos primeros errores que veo en la función.

emijas:

Adicionalmente a los errores de la citada funcionatambién te dará error en el evento Al hacer clic del botón de comando que tu has puesto, como dije en mi intervención anterior analiza el porque del error. La razón la podras ver si lees la ayuda. Esto es sin totalmente independiente del error que tu expones y que no aquilato en su justa dimension por no saber que otro código tienes como ya te han comentado.

Usa un punto de interrrupción para realizar un seguimiento del error y observar en que linea te esta mandando el error.

OneDrive: http://sdrv.ms/Vk6eJd
Arriba
guarracuco Ver desplegable
Moderador
Moderador
Avatar

Unido: 24/Abril/2004
Localización: EEUU
Estado: Sin conexión
Puntos: 3090
Enlace directo a este mensaje Enviado: 01/Junio/2015 a las 00:05
Roberto, error siempre y cuando esté la declaración Option Explicit.
https://tucondominioaldia.net
Arriba
MexMan70 Ver desplegable
Colaborador
Colaborador


Unido: 17/Julio/2007
Localización: DarkSide
Estado: Sin conexión
Puntos: 9233
Enlace directo a este mensaje Enviado: 01/Junio/2015 a las 16:01
Buen día Carlos, efectivamente; tengo la costumbre de declarar Option Explicit.


OneDrive: http://sdrv.ms/Vk6eJd
Arriba
emijas Ver desplegable
Asiduo
Asiduo


Unido: 03/Junio/2004
Localización: España
Estado: Sin conexión
Puntos: 363
Enlace directo a este mensaje Enviado: 14/Junio/2015 a las 11:13
Buenos Dias

Es cierto que guarracuco la utiliza en una fuincion del tipo BeforeUpdate, en otros formularios la he usado en una Onclick sin probkemas.

Aquí por algún motivo al hacer OnClick me da el error, he dado vueltas a sus mensajes pero no hallo la forma de que me funcione.

He desistido de dar con la solución para que alguien  cierre el hilo.

Muchas gracias
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable