Tabla

Consulta

Formulario

Informe Macro Código Active X

Temas generales

Volver a selección

 >>>


Crear un formulario de Inicio de la aplicación que se cierra en unos segundos y abre el formulario principal o menú
Cerrar el formulario activo cuando desde este se abre otro distinto
Insertar un mensaje de confirmación en el botón salir de la aplicación
Numerar los Items de un subformulario
Limitar la cantidad de registros en un subformulario
Trabajar con dos formularios sincronizados en un formulario
Sacar un total en un formulario según los valores de un subformulario
Ver y ocultar dos subformularios en un mismo formulario
Ocultar el valor de un control dependiendo de su valor
Inhabilitar o habilitar un control según el valor de otro control
Consultar si se actualiza la modificación en un registro
Forzar que un valor introducido quede como predeterminado para los próximos registros
Guardar registros de forma automática
Textos en movimiento en un formulario

 

 

 

 

 

 

 

 

 

Crear un formulario de Inicio de la aplicación que se cierra en unos segundos y abre el formulario principal o menú

Como presentación de tus aplicaciones es importante que al ejecutar tu aplicación el primer formulario que se abra sea un formulario de presentación y que luego de unos instantes se cierre y abra automáticamente el formulario principal o menú.

Para ello vamos a seguir los siguientes pasos:

Crea un nuevo formulario de nombre Inicial con las siguientes propiedades:
  • Formulario Simple
  • Botones de Desplazamiento: No
  • Selectores de Registro: No
  • Cuadro de Control: No
  • Centrado Automático: Sí
  • Estilo de Borde Ninguno
En ese formulario podrás insertar una imagen que identifique tu aplicación y/o un texto donde donde escribas el nombre de la aplicación, versión, tu nombre, derechos, e-mail, etc.

Una vez que has terminado con el diseño de tu formulario vamos a escribir un poco de código en los siguientes eventos:

  • Evento Al Cargar:

Sub Form_Load()

Me.TimerInterval = 5000

End Sub

  • Evento Al Cronómetro

Sub Form_Timer()

DoCmd.Close

DoCmd.OpenForm "Menú Principal"

End Sub

Cierra el formulario y en el Menú Herramientas => Inicio, definelo como formulario de Inicio a Inicial

Ahora cuando ejecutes tu aplicación el primer formulario que se abrirá será Inicial, luego de 5 segundos se cerrará y abrirá automáticamente el formulario Menú Principal.

 

Cerrar el formulario activo cuando desde este se abre otro distinto

Como en casi todas las aplicaciones en Access el entorno visual del usuario para añadir datos o registrar operaciones es en base a formularios, es común que un formulario se abra desde otro formulario. Cuando esto ocurre generalmente el formulario desde donde se abre el nuevo queda abierto, con lo cual llegas en un momento a tener varios formularios abiertos al mismo tiempo.

Para evitar esto lo mejor es que cuando abrís un formulario a partir de otro, éste último se cierre y viceversa: al cerrar el que abriste, se abra el que cerraste.

Para tomaremos como ejemplo dos formularios "Sub Menú Maestros" y "Artículos". Seguiremos los siguientes pasos.

  • En el botón BtnArtículos del Sub Menú Maestros inserta la siguiente línea de código:

DoCmd.Open acForm, "Articulos"

DoCmd.Close acForm, "Sub Menú Maestros"

Esto cerrará el Sub Menú Maestros a la vez que abrirá el formulario Artículos.

  • En el botón Cerrar de tu formulario Artículos el código que tienes seguro es:

DoCmd.OpenForm "Sub Menú Maestros"

DoEvents

DoCmd.Close acForm, "Artículos"

Esto cerrará el formulario Artículos y abrirá el formulario Sub Menú Maestros.

 

Insertar un mensaje de confirmación en el botón salir de la aplicación

Generalmente en tus aplicaciones en el formulario principal tienes un botón Salir que al presionarlo se ejecuta una rutina que te hace salir del sistema. Algunas veces este botón es presionado por error, con lo cual al salir tienes que abrir nuevamente para seguir trabajando. Una manera de evitar este error es que al presionar el botón te aparezca un mensaje de confirmación, en el cual puedas optar por salir o continuar con el sistema.

Para ello en el evento Al Hacer Click del botón Salir tendrá que insertar el siguiente código:

Private Sub BtnSalir_Click()

On Error GoTo Err_BtnSalir_Click

If MsgBox("Quiere salir de la Aplicación?", vbYesNo + vbQuestion, "Confirmación") = vbYes Then

Application.Quit acPrompt

End

End If

Exit Sub

Exit_BtnSalir_Click:

Exit Sub

Err_BtnSalir_Click:

MsgBox Err.Description

Resume Exit_BtnSalir_Click

End Sub

 

Numerar los Items de un subformulario

Cuando trabajas con formularios y subformularios, generalmente en el subformulario va el detalle de los items asociados al formulario (Ej. Artículos). A veces necesitas que por cada formulario los item del detalle se numeren a partir de 1 en forma correlativa para cada registro del formulario, y al cargar un nuevo registro del formulario el detalle nuevamente se numere empezando de 1. Esto no se puede con los campos tipo autonumérico que trae Access, ya que la numeración seguirá sin volver a 1. Mediante código es posible esta opción, vamos a desarrollarla:

Tu campo Item debe ser Tipo Númerico

Crea un nuevo módulo que llamarás NroItem. Escribirás el siguiente código (son 2 rutinas):

    Public Function NuevoItem(rs As Recordset) As Long

    With rs

    If .RecordCount > 0 Then

    .MoveLast

    NuevoItem = !Item + 1

    Else

    NuevoItem = 1

    End If

    End With

    End Function

    '-------------

    Public Sub RenumerarItem(rs As Recordset, Status As Integer)

    Dim i As Long

    If Status <> acDeleteOK Then Exit Sub

    With rs

    .MoveLast

    For i = .RecordCount To 1 Step -1

    .Edit

    !Item = i

    .Update

    .MovePrevious

    Next

    End With

    End Sub

En el evento Antes de Insertar del subformulario que contiene el campo Item, escribirás el siguiente código:

    Private Sub Form_BeforeInsert(Cancel As Integer)

    Me.Item = NuevoItem(Me.RecordsetClone)

    End Sub

En el evento Después de Confirmar Eliminación, el siguiente código:

Private Sub Form_AfterDelConfirm(Status As Integer)

RenumerarItem Me.RecordsetClone, Status

End Sub

Con esto luego de cada nuevo registro al cargar el detalle, tu campo Item se irá autonumerando a partir de 1 y en caso de que elimines algún registro del detalle los registros restantes se renumerarán.

 

Limitar la cantidad de registros en un subformulario

Cuando tienes un subformualrio de detalles en el cual el número máximo de registros a cargar son 10 por Ej. (10 Artículos, 10 pagos, etc.) la forma de limitar la carga de más registros es la siguiente.

En el evento Al Activar Registro del formulario en cuestión deberás insertarle el siguiente código:

Private Sub Form_Current()

If Me.RecordsetClone.RecordCount >= 10 Then

Me.AllowAdditions = False

Else

Me.AllowAdditions = True

End If

End Sub

Entonces al tratar de cargar el registro o ítem nº. 11 no podrás.

 

Trabajar con dos formularios sincronizados en un formulario

Cuando tienes un formulario de consulta por Ej. de Clientes que cuenta con 2 subformularios: Ventas (Te muestra todas las ventas al cliente) y Detalle de Ventas ( Te muestra el detalle de cada venta) cómo sincronizarlos de manera tal que al seleccionar un Cliente, el Subformulario Ventas , cargue las ventas del Cliente y el subformulario Detalle de Ventas se actualice según la venta seleccionada en el Subformualrio Ventas.

El procedimiento a seguir es el siguiente:

Seguramente la sincronización entre el Formulario Clientes y el subformulario Ventas, está dada por IdCliente (Código de Cliente). Esto está bien.

Lo que hay que lograr es que el subformulario Detalle de Ventas se sincronice simultáneamente con el formulario Clientes y el subformulario Ventas.

Insertá en el formulario Clientes un cuadro de Texto con propiedad Visible = No y cuyo valor de origen sea: =[Ventas].[Formulario]![NroVenta] y llámalo NroVenta. Es decir cuando te muevas de una venta a otra este campo se actualizará.

Si ya insertaste el subformulario Detalle de Ventas insertá en las propiedades siguientes los valores:

Vincular Campos Principales => IdCliente;NroVenta

Vincular Campos Secundarios => IdCliente;NroVenta.

Con esto tendrás una sincronización perfecta entre los tres formularios.

 

Sacar un total en un formulario según los valores de un subformulario

Generalmente en el subformulario realizas los cálculos para cada registro por Ej. Cantidad X Precio, y necesitas sacar el total de todos los registros, para el registro activo del formualrio Principal.

Para ejemplificar este caso vamos a suponer que tienes el formulario Ventas y el subformualrio Detalle de Ventas, y lo que hay que calcular en el formulario el total general de todos los items del subformulario vinculado con la venta activa. Manos a la obra:

Supuestamente en tu subformulario tienes los campos Cantidad y Precio y haz agregado un campo independiente de nombre Total, cuyo origen es =([Cantidad]*[Precio]). Bien!

En el Pie del Formulario del subformualrio Detalle de Ventas inserta un control texto con formato Moneda y cuyo origen sea =Suma([Cantidad]*[Precio]). Llámalo TotalGral. OJO: Nunca utilices la función Suma para un campo ya calculado Ej. Suma([Total])

En la Propiedad Visible del Pie del Formulario que sea = NO.

En el formulario Ventas inserta un control texto con formato Moneda, de nombre TotGral, y cuyo origen sea lo siguiente: =[Detalle de Ventas].[Formulario]![TotalGral].

Cuando abras tu formulario Ventas tendrás el total para cada registro.

 

Ver y ocultar dos subformularios en un mismo formulario

Supongamos que tienes el Formulario Consulta de Clientes y en él quieres visualizar el subformulario Ventas o el subformulario Ventas Mensuales, es decir uno u otro pero no los dos.

Para conseguir esto vamos a seguir el siguiente procedimiento:

Inserta el subformulario Ventas Mensuales, en el formulario. Consulta Clientes siguiendo los pasos del Asistente.

Inserta el subformulario Ventas, encima y alineado del sub formulario Ventas.

Crea un Botón de Comando que llamarás Alternar y de Título poner &Ver Ventas

En el evento Al Hacer Click del botón Alternar escribe el siguiente código:

Private Sub Alternar_Click()

If Me![Alternar].Caption = "&Ver Ventas" Then

Me![Ventas].Visible = True

Me![Ventas Mensuales].Visible = False

Me![Alternar].Caption = "V&er Ventas Mensuales"

Else

Me![Ventas].Visible = False

Me![Ventas Mensuales].Visible = True

Me![Alternar].Caption = "&Ver Ventas"

End If

End Sub

Cuando se abra el Formulario Consulta Clientes, verás sólo el subformulario Ventas y en el botón aparecerá Ver Ventas Mensuales, si presionas el botón, el subformulario que visualizarás es Ventas Mensuales y en el botón aparecerá Ver Ventas.

 

Ocultar el valor de un control dependiendo de su valor

En el evento Al Abrir del Formulario escribe el siguiente código:

if Me!campo = 0 then

Me!campo.visible = false

else

Me!campo.visible = true

End if

 

Inhabilitar o habilitar un control según el valor de otro control

Supongamos un formulario que tiene 2 controles: Un control texto llamado Campo1 y un botón de comando llamado BtnGuardar cuya función es guardar el registro.

  1. El botón BtnGuardar que quede con la propiedad Activado en NO
  2. En el evento Después de Actualizar de Campo1 escribir el siguiente código:

Private Sub Campo1_AfterUpdate()

If Me![CAMPO1] => 100 Then

Me!BtnGuardar.Enabled = False.

Else

Me!BtnGuardar.Enabled = True

End If

End Sub

 

Consultar si se actualiza la modificación en un registro

Supongamos un formulario que tiene 2 controles: Un control texto llamado Campo1 y un botón de comando llamado BtnGuardar cuya función es guardar el registro.

  1. El botón BtnGuardar que quede con la propiedad Activado en NO
  2. En el evento Después de Actualizar de Campo1 escribir el siguiente código:

Private Sub Campo1_AfterUpdate()

Dim Respuesta As Integer

If Me.Dirty = True Then

Respuesta = MsgBox("Desea Salvar este Registro?", vbExclamation + vbYesNo + vbDefaultButton2, "Salvar Registro ???")

If Respuesta <> vbYes Then

Me!Guardar.Enabled = False

Else

Me!Guardar.Enabled = True

End If

End If

End Sub

Forzar que un valor introducido quede como predeterminado para los próximos registros

En algunos casos cuando la carga de datos en tu aplicación es repetitiva en cuanto al valor a insertar en un mismo campo de distintos registros puedes utilizar una función que te permita recuperar el valor del campo del último registro actualizado.

Supongamos que el campo de tu formulario es Destino y el valor siempre es Córdoba

En el evento al entrar del campo Destino escribirás el siguiente código:

Private Sub Destino_Enter()

SendKeys "^'"

End Sub

Cuando entres en el campo con la tecla Tab o Enter u otras te recuperará el valor del registro anterior. Si en algún ese valor varía escribelo. Esta opción no funciona cuando te desplazas por los registros con el mouse.

Guardar registros de forma automática

Si quieres automatizar el procedimiento de guardar registros en tu base de datos una forma es la siguiente:

En el evento Al Cronómetro del formulario que desees, inserta el siguiente código:

DoCmd.SetWarnings = False

DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70

DoCmd.SetWarnings = True

En el evento Intervalo de Cronómetro especifica cada cuantos milisegundos se actualizarán los registros.

Textos en movimiento en un formulario

Si quieres tener un poco de animación en tus formularios, una forma de hacerlo es mediante textos o mensajes en movimiento.

Para conseguir este efecto seguiremos estos procedimientos:

En el formulario que quieras crea una etiqueta de nombre lblFrase y escribe el texto de tu gusto.

En el evento Al Abrir del formulario en cuestión, escribe el siguiente código:

    Private Sub Form_Open(Cancel As Integer)

    Me!lblFrase.Width = 0

    Me.lblFrase.Left = Me.WindowWidth

    wFrase = Me!lblFrase.Caption

    End Sub

En el evento Intervalo de Cronómetro fija 50 milisegundos

En el evento Al Cronómetro, escribe el siguiente código:

Private Sub Form_Timer()

If Me!lblFrase.Left <= 50 Then

If Len(Me!lblFrase.Caption) > 1 Then

Me!lblFrase.Caption = Right(Me!lblFrase.Caption, Len(Me!lblFrase.Caption) - 1)

Else

Me!lblFrase.Width = 0

Me!lblFrase.Left = Me.WindowWidth

Me!lblFrase.Caption = wFrase

End If

Else

Me!lblFrase.Left = Me!lblFrase.Left - 50

Me!lblFrase.Width = Me!lblFrase.Width + 50

End If

End Sub