Simplificar Código para optimizarlo y agrupar not isnull

Es una pregunta para Sveinbjorn El Rojo

Tengo que crear un código cuyo denominador común es "and not isnull" y me gustaría saber si se puede escribir de una manera más profesional sin tener que repetir "and not isnull", agrupando todos los campos implicados en un solo not isnull o de alguna otra manera.

Ahora mismo el código es así:

If not isnull (me.Numero_Registro) and not isnull(me.Titulo) and not isnull (me.Autor) and not isnull(me.Editorial) and not isnull(me.Año) and not isnull(me.Idioma) and not isnull(me.Tipo_Documento) and not isnull(me.Categoria) and not isnull(me.Materia) and not isnull(me.Submateria) and not isnull (me.Signatura) then ...

Me pregunto si no se podrían agrupar en un solo Not IsNull los 11 campos que inidico en la pregunta sin tener que repetir "And not isnull" en cada campo o de alguna otra forma.

2 respuestas

Respuesta
1

Feliz año,

Hasta donde yo sé, no se puede simplificar más, a no ser que te crees una función que devuelva True/False si se cumplen todas esas condiciones y la uses. Pero no te evita tener que escribirlos una vez así en la función.

Un saludo.


Un nuevo foro de Access, no dudes en pasarte: http://nksvaccessolutions.com/Foro/ 

Al menos con la función evito tener que repetir  código si hago uso de él en varios formularios  y solo tengo que llamar a la función...

Podrías indicarme el código de la función, al menos con 3 campos para ver la rutina.

Muchas gracias

Por ejemplo:

Public Function fncValida() As Boolean
If not isnull (me.Numero_Registro) and not isnull(me.Titulo) and not isnull (me.Autor) and not isnull(me.Editorial) and not isnull(me.Año) and not isnull(me.Idioma) and not isnull(me.Tipo_Documento) and not isnull(me.Categoria) and not isnull(me.Materia) and not isnull(me.Submateria) and not isnull (me.Signatura) then
fncValida=True
Else
fncValida=False
End Function

La pones en un módulo independiente, y la usas así:

If fncValida=True Then...

Muchísimas gracias

Con esta función me evito tener que escribir un montón de código igual en varios formularios y así solo tengo que llamar a la función en cada formulario, lo que me genera solo 1 línea de código aunque eso sí como bien dices, al escribir la función sí tengo que escribir todos los campos.

Feliz Año!!

Respuesta
1

Depro: Tal como quedamos en el texto de tú otra pregunta, te doy mi punto de vista sobre éste tema.

Ya que ignoro las acciones que tú quieres desencadenar al encontrar Controles Nulos, te facilito una Función general en la que tienes varias opciones.
En un Módulo Estandar que ya tengas o en uno nuevo que puedes crear:
1.- Después de
Option Compare Database
Option Explicit
‘Declaramos las Variables Publicas para usar en cualquier parte de la Aplicación
Public Ctrl As Access.Control
Public ControlesNulos As Integer
Public ControlesNoNulos As Integer

2.- Copia y pega éste código

Public Function ControlesNulosEnForm(Frm As Form, Cancel As Integer) As Boolean
On Error GoTo ControlesNulosEnForm_TratamientoErrores
ControlesNulos = 0
ControlesNoNulos = 0
For Each Ctrl In Frm.Controls
'Voy directo al TipoTextBox y ComboBox
If TypeOf Ctrl Is TextBox Or TypeOf Ctrl Is ComboBox Then
If Ctrl.Name <> "UnNombre" Then 'Puede ponerse otra u otras condiciones
If Not IsNull(Ctrl.Value) Then
Ctrl.BackColor = RGB(155, 255, 50)
ControlesNoNulos = ControlesNoNulos + 1
Else
Ctrl.BackColor = RGB(255, 255, 0)
ControlesNulos = ControlesNulos + 1
''Si se quiere que el código acabe en el "Primer Control Nulo", descomentar las siguientes 5 líneas
'Ctrl.SetFocus
'MsgBox "Encontrado Control Nulo. " & vbCrLf & "Su Nombre es: " & Ctrl.Name, vbExclamation, "CONTROL NULO"
'Cancel = True
'End
'Exit Function
End If
End If
End If
Next Ctrl
'Si las 5 líneas indicadas están descomentadas, aquí solo llegaremos si no hay Controles Nulos, entonces pueden escribirse las acciones
'O escribir las acciones en el Código de llamada >> Hacer Operaciones con Formularios, Informes etc
If ControlesNulos = 0 Then
ControlesNulosEnForm = False
Else
ControlesNulosEnForm = True
End If
ControlesNulosEnForm_Salir:
On Error GoTo 0
Exit Function
ControlesNulosEnForm_TratamientoErrores:
MsgBox "Error " & Err & " en Procedimiento.: ControlesNulosEnForm de Documento VBA: MdlControles (" & Err.Description & ")", vbCritical + vbOKOnly, "ATENCION"
Resume ControlesNulosEnForm_Salir
End Function

3.- Para llamar la Función: Desde algún evento del Formulario >> Ejemplo un Botón que aquí llamo BtnNulos
Private Sub BtnNulos_Click()
If ControlesNulosEnForm(Me.Form, 0) = False Then
'Unas Acciones
Else
'Otras acciones
End If
MsgBox "Hay " & ControlesNulos & " Controles sin valor y " & ControlesNoNulos & " Controles con valor en éste Formulario", vbInformation, "RESUMEN CONTROLES FORMULARIO"

End Sub

Espero haberte ayudado y si tienes dudas me comentas. Saludos >> Jacinto

Muchas gracias Jacinto

La verdad es que son varias acciones en distintos formularios las que se producen al encontrar nulos por eso no te indiqué una acción concreta, por eso me viene muy bien esta funcion genérica por tanto.

La función me viene perfecta y el hecho de que añadas explicaciones de los pasos a seguir me ayuda a poder entenderla. Te lo agradezco.

Un saludo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas