0% encontró este documento útil (0 votos)
47 vistas6 páginas

Código VBA para Gestión en Access

Este documento contiene extractos de código Visual Basic para Microsoft Access que muestran ejemplos de uso de botones, formularios, subformularios, filtros, consultas y funciones para calcular edades. Incluye código para añadir registros, editarlos, eliminarlos y comprobar registros duplicados, así como manejar errores al abrir formularios y consultas.
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOC, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
47 vistas6 páginas

Código VBA para Gestión en Access

Este documento contiene extractos de código Visual Basic para Microsoft Access que muestran ejemplos de uso de botones, formularios, subformularios, filtros, consultas y funciones para calcular edades. Incluye código para añadir registros, editarlos, eliminarlos y comprobar registros duplicados, así como manejar errores al abrir formularios y consultas.
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOC, PDF, TXT o lee en línea desde Scribd

Extracto de cdigo Visual Basic para Ms Access

Estudiar el bloqueo de registros y los informes del Hogar Botones con texto e imagen Para que en los botones aparezca imagen e icono, pones un botn con texto y una imagen al lado, sobrepuesta, capturas pantalla y guardas el recorte del texto y la imagen como .bmp. Despus, al crear el botn slo has de decirle que lo quieres como imagen y se la pones. No se nota nada de nada. Access en red Se programa todo junto, luego divides la base de datos, en el servidor pones la que tiene las tablas, y en los terminales pones las otras con tablas vinculadas. Comando Aceptar En primer lugar controla que determinados campos no estn en blanco, si ambos estn completos simplemente cierra el formulario activo. Se supone que los datos nuevos y/o modificados quedan guardados con esta operacin.
Private Sub Comando_Click() On Error GoTo Err_Comando_Click If IsNull(Nombre) = True Then mensaje = MsgBox("Has de completar el nombre del socio", vbExclamation, "Datos incompletos") ElseIf IsNull(Fechana) = True Then mensaje = MsgBox("Has de completar la fecha de nacimiento", vbExclamation, "Datos incompletos") Else [Link] [Forms]![Principal]![Subformulario].[Form].Requery 'Actualiza Principal End If Exit_Comando_Click: Exit Sub Err_Comando_Click: MsgBox [Link] Resume Exit_Comando_Click End Sub

Comando Cancelar Antes de cerrar el formulario deshace los cambios realizados. Para evitar que el programa falle si no se han hecho cambios, programamos en el fallo la salida del formulario.
Private Sub Comando_Click() On Error GoTo Err_Comando_Click [Link] acFormBar, acEditMenu, acUndo, , acMenuVer70 [Link] Exit_Comando_Click: Exit Sub Err_Comando_Click: [Link] Resume Exit_Comando_Click End Sub

Comando edita Abre el formulario denominado edita y presenta el mismo socio que est seleccionado en el formulario consulta. Seguidamente, cambia el valor de la variable y cerramos el formulario anterior.
Private Sub Comando_Click() On Error GoTo Err_Comando_click Dim stDocName As String Dim stLinkCriteria As String stDocName = "Edita" stLinkCriteria = "[Idsoc]=" & Me![Idsoc]

Pg. 1 de 6

Extracto de cdigo Visual Basic para Ms Access


[Link] stDocName, , , stLinkCriteria stDocName = "consulta" [Link] acForm, stDocName Exit_Comando_click: Exit Sub Err_Comando_click: MsgBox [Link] Resume Exit_Comando_click: End Sub

Evento abrir del formulario consulta En este evento, que viene de la consulta, controlamos que el nmero de socio no est en blanco, si lo est es que el nmero introducido como parmetro en la consulta no existe en nuestra tabla, as que sacamos un mensaje de error diciendo que no existe
Private Sub Form_Open(Cancel As Integer) If IsNull(Idsoc) Then [Link] mensaje = MsgBox("No existe socio con ese nmero", vbExclamation, "Error") End If End Sub

Cambiar estado del registro Sirve para dar de baja registros sin borrarlos de la tabla y, por tanto manteniendo los datos. Una idea es pasarlos a otra tabla Histrico que no entorpezca el funcionamiento normal. En este caso ha habido que refrescar el formulario despus de cambiar la fecha porque no lo haca automticamente. Observar que el usuario ha de confirmar el cambio de estado.
Private Sub Comando_Click() On Error GoTo Err_Comando106_Click mensaje = MsgBox("Desea dar de baja el socio?", vbYesNo, "Confirmacin baja") If mensaje = vbYes Then Fechabaja = [Texto] [Forms]![edita].[Form].Requery End If Exit_Comando_Click: Exit Sub Err_Comando_Click: [Link] Resume Exit_Comando_Click End Sub

Comprobar registros repetidos Para evitar la introduccin de registros iguales, controlamos en el evento Despus de actualizar que busque en toda la tabla un registro con un campo igual. Existen dos posibilidades: que el campo sea texto (string)
Private Sub NIF_AfterUpdate() Dim existe As Variant existe = DLookup("Nif", "Tabla", "Nif = '" & [Link] & "'") If IsNull(existe) = False Then mensaje = MsgBox("Este socio ya existe en la base de datos", vbInformation, "Datos duplicados") End If End Sub

Y dos, que el campo sea numrico


Dim existe As Variant existe = DLookup("Id_asiento", "Asientos", "[Id asiento]=" & Me.Id_asiento) If IsNull(existe) = False Then

Pg. 2 de 6

Extracto de cdigo Visual Basic para Ms Access


mensaje = MsgBox("Este asiento ya existe", vbInformation, "Datos duplicados") [Id asiento] = "" [Id asiento].SetFocus End If

Aadir nuevo registro Codificado a la carga del formulario, va enlazado con una consulta (maxsoc) que contiene el nmero mximo de socio, slo falta aadir un nuevo registro y sumarle 1 a esta cantidad.
Private Sub Form_Open(Cancel As Integer) Dim num As Integer [Link] , , acNewRec Dim basedatos As Database Dim registros As Recordset Set basedatos = CurrentDb 'asigna a basedatos la actual Set registros = [Link]("maxsoc", dbOpenDynaset) num = registros!maximo + 1 [Link] , , acNewRec [Idsoc] = num [Fechaalta] = Texto65 End Sub

Ejecutar consulta de borrado Desupus de llamar a la consulta Borra hacemos un refresco del subformulario para que se actualizen los datos. Tambin aplicable este refresqueo despus de aadir o modificar. Apunte interesante el de estudiar el borrado de registro mediante cdigo.
Private Sub Comando_Click() Dim stDocName As String Dim stLinkCriteria As String stDocName = "Borra" [Link] stDocName, acNormal, acEdit [Forms]![Principal]![Subformulario].[Form].Requery End Sub

Eliminar registro seleccionado de una tabla sin confirmaciones de access


Dim mensaje As String mensaje = MsgBox("Desea eliminar la lnea", vbYesNo, "Eliminacin") If mensaje = 6 Then Dim var As String var = "DELETE * FROM lineas WHERE [Link] = " & Val([Link]) [Link] False 'se apagan los mensajes por default del access [Link] var 'sen ejecuta la consulta de eliminacin [Link] True 'se encienden los mensajes por default de access [Forms]![A_cabecera]![Subformulario].[Form].Requery End If

Apertura de formularios La apertura de los formularios se realiza siempre igual, aqu interesante el control del error, generalmente provocado por la pulsacin de la tecla Cancelar de la pantalla que pide el parmetro.
Private Sub Comando_Click() On Error GoTo Err_Comando_Click Dim stDocName As String Dim stLinkCriteria As String stDocName = "Consulta" [Link] stDocName, , , stLinkCriteria Exit_Comando_Click:

Pg. 3 de 6

Extracto de cdigo Visual Basic para Ms Access


Exit Sub Err_Comando_Click: mensaje = MsgBox("Operacin cancelada", vbInformation, "Consulta") Resume Exit_Comando_Click End Sub

Otra de tratamiento de errores Es un caso similar al de la apertura de formularios, aqu es la pantalla de bsquedas la que provoca el error si el foco no est bien situado.
Private Sub Comando_Click() On Error GoTo Err_Comando30_Click [Link] [Link] acFormBar, acEditMenu, 10, , acMenuVer70 Exit_Comando30_Click: Exit Sub Err_Comando_Click: mensaje = MsgBox("Selecciona un campo para bsquedas", vbExclamation, "Error") Resume Exit_Comando_Click End Sub

Botones de opcin que cambian de subformulario Cdigo muy prctico a la hora de aplicar filtros en los subformularios, si no funcionan bien, como ha sido el caso, se hacen dos consultas y se programa el cambio de formulario, adems del cambio de seleccin de botn. No queda muy elegante, as que se aconseja la utilizacin de filtros y quedar esta opcin en ltimo lugar.
Private Sub Opcin18_Click() On Error GoTo Err_Opcin18_Click Opcin20 = 0 [Link] = "Subformulario" Exit_Err_Opcin18_Click: Exit Sub Err_Opcin18_Click: MsgBox [Link] Resume Exit_Err_Opcin18_Click End Sub

Filtros Ejemplo del uso de filtros. Este en particular no funcionaba bien cuando se cambiaba el orden del subformulario, pero puede servir para otro caso.
Dim filtro As String filtro = "[Link] Is Null" [Link]("Subformulario").[Link] = filtro [Link]("Subformulario").[Link] = True

Abrir un registro ya seleccionado en subformulario Al hacer doble clic en la lnea del subformulario en modo tabla se abre el formulario Consulta con los datos del socio que habamos seleccionado.
Private Sub Idsoc_DblClick(Cancel As Integer) Dim stDocName As String Dim stLinkCriteria As String stDocName = "Consulta" stLinkCriteria = "[Idsoc]=" & Me![Idsoc] [Link] stDocName, , , stLinkCriteria End Sub

Registros simultneos en formulario y subformulario Programado en el evento Al Activar registro, hace que en el formulario principal se muestren t odos los datos del registro seleccionado en el subformulario.

Pg. 4 de 6

Extracto de cdigo Visual Basic para Ms Access


Private Sub Form_Current() On Error GoTo fallo Dim num As Integer Dim filtro As String num = Me![Idsoc] filtro = "Idsoc=" & num [Forms]![Principal].Filter = filtro [Forms]![Principal].FilterOn = True salida: Exit Sub fallo: MsgBox [Link] Resume salida End Sub

Funcin para calcular la edad Esta function hay que ponerla en un mdulo. Despus la llamas desde donde quieras, le pasas los parmetros de fecha de nacimiento y fecha actual en formato fecha y te devuelve la edad. En el caso que nos ocupa la llamada se hace desde campos calculados en diversas consultas de la siguiente forma:
Edad: Edad([Fechana];Ahora()) Function Edad(fechaBase As Variant, fechaRef As Variant) As Integer On Error GoTo errores Edad = DateDiff("yyyy", fechaBase, fechaRef) If Month(fechaBase) > Month(fechaRef) Then Edad = Edad - 1 If Month(fechaBase) = Month(fechaRef) Then If Day(fechaBase) > Day(fechaRef) Then Edad = Edad - 1 End If End If Exit Function errores: Edad = 0 End Function

Registro que no existe Muy til a la hora de controlar los errores al abrir consultas con registros que no existen. Slo controla que salga en blanco el campo principal en el evento abrir.
Private Sub Form_Open(Cancel As Integer) If IsNull(Idsoc) Then [Link] mensaje = MsgBox("No existe socio con ese nmero", vbExclamation, "Error") End If End Sub

Macro AUTOEXEC Crear macro llamada AUTOEXEC, que va a ser la primera cosa que haga el programa al abrir. La idea es darle una orden de minimizar, con lo cual se minimiza la ventana de la base de datos, otra orden de abrir el formulario principal y una tercera de maximizar. Al editar se queda en la pgina de ficha seleccionada Cuando le das al botn editar para que se quede en la ficha que estamos trabajando.
Dim ControlFicha As Control, Pagina As Page ' Devuelve referencia al control de ficha. Set ControlFicha = Me!TabCtl97 ' Devuelve referencia a la pgina seleccionada actualmente. Set Pagina = [Link]([Link]) [Link]

Cerrar formulario con tecla esc


Crea un boton de comando, que cierre el formulario, o la consulta. En las opciones de dicho botn, hay una opcion que pone cancelar, que por defecto est a No. Ponla a Si y listo.

Pg. 5 de 6

Extracto de cdigo Visual Basic para Ms Access


Imprimir con opciones
[Link] acCmdPrint

Pg. 6 de 6

También podría gustarte