En esta página encontrarán algunos ejemplo de trucos de VBA (Visual Basic for Applications) que puedes utilizar en aplicaciones desarrolladas con la base de datos Microsoft Access. También puedes descargar los formularios, informes y códigos de ejemplo de Microsoft Access que encontrarás en esta página y disponer de ellos como quieras, ya sea para uso personal o profesional.
Empecé a desarrollar aplicaciones con Microsoft Access en 1995 con la primera versión Access 2.0 y hasta el día de hoy, es decir 27 años. Recuerdo que fue fascinantes pasar de COBOL a Access como herramienta por la cantidad de cosas que se simplificaban.
Dado que siempre he sido autodidacta, tanto en Basic como en PHP hay dos cosas que siempre me han ido muy bien, ejemplos de las funciones y un libro de referencia. Os dejo una recomendación que os puede ser útil.
Contenidos de System
-Todos- System (5)Clipboard - Cómo obtener el nombre del ordenador o PC - Leer archivos grandes con VBA - Seleccionar un archivo - Unir archivos de texto -
ClipboardCódigo para una función que permite copiar texto al clipboard...Private Declare PtrSafe Function GlobalUnlock Lib "kernel32" (ByVal hMem As LongPtr) As LongPtr Private Declare PtrSafe Function GlobalLock Lib "kernel32" (ByVal hMem As LongPtr) As LongPtr Private Declare PtrSafe Function GlobalAlloc Lib "kernel32" (ByVal wFlags As LongPtr, _ ByVal dwBytes As LongPtr) As LongPtr Private Declare PtrSafe Function CloseClipboard Lib "user32" () As LongPtr Private Declare PtrSafe Function OpenClipboard Lib "user32" (ByVal hwnd As LongPtr) As LongPtr Private Declare PtrSafe Function EmptyClipboard Lib "user32" () As LongPtr Private Declare PtrSafe Function lstrcpy Lib "kernel32" (ByVal lpString1 As Any, _ ByVal lpString2 As Any) As LongPtr Private Declare PtrSafe Function SetClipboardData Lib "user32" (ByVal wFormat As LongPtr, _ ByVal hMem As LongPtr) As LongPtr Const GHND = &H42 Const CF_TEXT = 1 Const MAXSIZE = 4096 Function ClipBoard_SetData(MyString As String) 'PURPOSE: API function to copy text to clipboard 'SOURCE: www.msdn.microsoft.com/en-us/library/office/ff192913.aspx #If VBA7 Then Dim hGlobalMemory As LongPtr, lpGlobalMemory As LongPtr Dim hClipMemory As LongPtr, x As LongPtr #Else Dim hGlobalMemory As Long, lpGlobalMemory As Long Dim hClipMemory As Long, x As Long #End If 'Allocate moveable global memory hGlobalMemory = GlobalAlloc(GHND, Len(MyString) + 1) 'Lock the block to get a far pointer to this memory. lpGlobalMemory = GlobalLock(hGlobalMemory) 'Copy the string to this global memory. lpGlobalMemory = lstrcpy(lpGlobalMemory, MyString) 'Unlock the memory. If GlobalUnlock(hGlobalMemory) <> 0 Then MsgBox "Could not unlock memory location. Copy aborted." GoTo OutOfHere2 End If 'Open the Clipboard to copy data to. If OpenClipboard(0&) = 0 Then MsgBox "Could not open the Clipboard. Copy aborted." Exit Function End If 'Clear the Clipboard. x = EmptyClipboard() 'Copy the data to the Clipboard. hClipMemory = SetClipboardData(CF_TEXT, hGlobalMemory) OutOfHere2: If CloseClipboard() = 0 Then MsgBox "Could not close Clipboard." End If End Function Sub CopyTextToClipboard() 'PURPOSE: Copy a given text to the clipboard (using Windows API) 'SOURCE: www.TheSpreadsheetGuru.com 'NOTES: Must have above API declaration and ClipBoard_SetData function in your code Dim txt As String 'Put some text inside a string variable txt = "This was copied to the clipboard using VBA!" 'Place text into the Clipboard ClipBoard_SetData txt 'Notify User MsgBox "There is now text copied to your clipboard!", vbInformation End Sub |
Cómo obtener el nombre del ordenador o PCPermite saber el nombre del PC donde está funcionando la base de datos Access...Public Function GetComputerName() As String Dim sResult As String * 255 GetComputerNameA sResult, 255 GetComputerName = Left$(sResult, InStr(sResult, Chr$(0)) - 1) End Function |
Leer archivos grandes con VBAUn ejemplo de lectura de archivos grandes sin que se bloquee el PC por falta de recursos. Probado con un archivo de 4 GB...Rutina de lectura:
Public Sub ImportV2() Dim strReg As String Dim strFile As String Dim fso As FileSystemObject Dim fil As Object strFile = "C:\Users\username\Downloads\file.txt" Set fso = CreateObject("Scripting.FileSystemObject") Set fil = fso.OpenTextFile(strFile, 1) Do Until fil.AtEndOfStream strReg = fil.ReadLine Loop fil.Close End Sub |
Seleccionar un archivoCómo seleccionar un archivo desde un formulario de Microsoft Access usando VBA....Recordar que se requiere una referencia a la librería: Microsoft Office 16.0 Object Library.
Public Function SelectFileSample() As String ' Requires reference to Microsoft Office 16.0 Object Library. Dim fDialog As Office.FileDialog Dim varFile As Variant Dim fso As FileSystemObject ' Set up the File Dialog. Set fDialog = Application.FileDialog(msoFileDialogFilePicker) With fDialog '.InitialFileName = strCarpeta ' Default folder ' Allow user to make multiple selections in dialog box .AllowMultiSelect = False ' Set the title of the dialog box. .Title = "Seleccionar un fichero" ' Clear out the current filters, and add our own. .Filters.Clear ' Sample for filters '.Filters.Add "Image JPG", "*.JPG" '.Filters.Add "Image PNG", "*.PNG" .Filters.Add "Todos los archivos", "*.*" ' Show the dialog box. If the .Show method returns True, the ' user picked at least one file. If the .Show method returns ' False, the user clicked Cancel. If .Show = True Then 'Loop through each file selected and add it to our list box. For Each varFile In .SelectedItems 'Me.FileList.AddItem varFile SelectFileSample = varFile Next Else MsgBox "No saleccionado ningún fichero", vbInformation, "Select File" End If End With End Function |
Unir archivos de textoBucle para unir ficheros de texto que están en una misma carpeta, en este caso .csv en uno solo....El siguiente código asume que todos tus archivos CSV tienen la misma estructura (es decir, las mismas columnas en el mismo orden). El proceso básicamente abre cada archivo CSV en la carpeta especificada, lee su contenido y lo escribe en un nuevo archivo CSV.
Dim rutaCarpeta As String Dim archivo As String Dim nombreArchivoUnido As String Dim textoArchivo As String Dim primeraLinea As Boolean Dim numArchivo As Integer Dim fso As Object, ts As Object, tsUnion As Object rutaCarpeta = "C:\TuCarpeta\" ' Modifica con la ruta de tu carpeta nombreArchivoUnido = rutaCarpeta & "ArchivoUnido.csv" ' Nombre del archivo final Set fso = CreateObject("Scripting.FileSystemObject") Set tsUnion = fso.CreateTextFile(nombreArchivoUnido, True) archivo = Dir(rutaCarpeta & "*.csv") primeraLinea = True Do While archivo <> "" ' Evita leer el archivo unido si ya existe en la carpeta If archivo <> "ArchivoUnido.csv" Then numArchivo = numArchivo + 1 Set ts = fso.OpenTextFile(rutaCarpeta & archivo, ForReading) ' Omitir la primera línea del archivo si no es el primero (suponiendo que es el encabezado) If Not primeraLinea Then ts.ReadLine ' Leer el contenido del archivo y escribirlo en el archivo unido Do While ts.AtEndOfStream <> True textoArchivo = ts.ReadLine tsUnion.WriteLine textoArchivo Loop ts.Close primeraLinea = False End If archivo = Dir() ' Siguiente archivo Loop tsUnion.Close Set ts = Nothing Set tsUnion = Nothing Set fso = Nothing MsgBox numArchivo & " archivos han sido unidos en " & nombreArchivoUnido, vbInformation End SubEste código realiza las siguientes tareas:
rutaCarpeta con la ruta correcta de tu carpeta de archivos CSV. También, este código omite el encabezado de todos los archivos excepto el primero; si tus archivos no tienen encabezados o quieres incluirlos todos, puedes ajustar la lógica acordemente.
Este código es un punto de partida básico. Dependiendo de tus necesidades específicas, podrías necesitar hacer ajustes, especialmente si los archivos CSV tienen diferentes estructuras o requieres un procesamiento de datos más complejo. |
Desarrollado con el plugin AB Dictionary para WordPress
Descargas de ejemplos de Microsoft Access
Historia Clínica
Es una base de datos sencilla para gestionar la historia clínica de una persona. Encontraras conceptos básicos como formularios, botones e informes. No se usan módulos VBA excepto el de los forms. Para nivel básico. Descargar HistoriaClinica en formato ZIP.
Acerca de Microsoft Access
Microsoft Access, una parte integral de la suite de Microsoft Office, es un sistema de gestión de bases de datos introducido por primera vez en 1992. Diseñado para usuarios de Windows, Access se creó para satisfacer la necesidad de un programa que pudiera manejar la gestión de datos y el desarrollo de aplicaciones de una manera más accesible que los sistemas de bases de datos más complejos y costosos de la época.
Desde su lanzamiento, Access se destacó por permitir a los usuarios no solo almacenar y gestionar grandes cantidades de información de manera eficiente, sino también por facilitar la creación de interfaces de usuario personalizadas y aplicaciones de bases de datos a través de su entorno de desarrollo integrado. Esto lo hizo especialmente popular entre las pequeñas y medianas empresas, así como entre los departamentos dentro de organizaciones más grandes, que necesitaban soluciones de bases de datos personalizadas sin la inversión significativa que requerían otros sistemas.
A lo largo de los años, Microsoft ha lanzado varias versiones de Access, cada una añadiendo nuevas funcionalidades, mejorando la interfaz de usuario y aumentando la integración con otros productos de Microsoft Office. Estas mejoras han permitido a Access mantenerse relevante en un mercado en constante cambio, adaptándose a las necesidades de los usuarios modernos y a las tendencias tecnológicas.
A pesar de enfrentar la competencia de otras soluciones de bases de datos y de la creciente popularidad de las soluciones basadas en la nube, Microsoft Access ha mantenido un núcleo leal de usuarios. Su capacidad para combinar una gestión de datos robusta con herramientas de desarrollo de aplicaciones relativamente fáciles de usar ha asegurado su lugar como una herramienta valiosa para la gestión de datos personal y empresarial.
Con el paso del tiempo, Microsoft Access ha evolucionado desde sus inicios como una herramienta de base de datos para pequeñas empresas hasta convertirse en una solución de gestión de datos completa, demostrando su durabilidad y adaptabilidad en el ámbito tecnológico.
Saludos.
¿Como hacer un instalador de programas ? Algo que grabe algunos archivos predeterminados en algún lugar del disco duro de manera discreta.
Para aplicaciones con Access y VBA usé durante muchos años Wise Installation System y me iba perfecto. Aún se puede descargar de Softonic: WISE Installation System para Windows
s@lu2
tengo una bd de un Almacen , en un formulario de salida de productos quiciera poder limitar la cantidad a «salir» de acuerdo al inventario existente para cada articulo.
gracias
hola no soy experta ni mucho menos, hice un formulario que manda llamar información de una base vinculada, pero no me extrae varios campos, no se por que razón, haber si alguién pueda orientarme gracias.
On Error GoTo Button_TratamientoErrores
‘mySql = «SELECT calendariobpm .institucio, calendariobpm .examen, calendariobpm .fec_ini, calendariobpm .aplicados, calendariobpm .registrado, calendariobpm .for_env, calendariobpm .desc_cal, calendariobpm .ent_arccal, curcalenbpm.requerimie FROM calendariobpm INNER JOIN curcalenbpm ON calendariobpm.num_aplic=curcalenbpm.num_aplic WHERE num_aplic = ‘» & Me.Aplicación & «‘»
On Error GoTo Button_TratamientoErrores
mySql = «SELECT institucio, examen, fec_ini, aplicados, registrado, for_env, desc_cal, ent_arccal, desc_exa, Requerimie FROM curcalenbpm»
mySql = mySql & » WHERE num_aplic = ‘» & Me.Aplicación & «‘»
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset(mySql, dbOpenSnapshot)
Me.Institución.Value = rst.Fields(0)
Me.Examen.Value = rst.Fields(1)
Me.Fecha_de_aplicación.Value = rst.Fields(2)
Me.Aplicados.Value = rst.Fields(3)
Me.Registrados.Value = rst.Fields(4)
Me.Entrega_resultados.Value = rst.Fields(5)
Me.des_exa.Value = rst.Fields(6)
Me.Requerimientos.Value = rst.Fields(7)
rst.Close
dbs.Close
Set rst = Nothing
Set dbs = Nothing
nota los campos que si jala son
Me.Institución.Value = rst.Fields(0)
Me.Examen.Value = rst.Fields(1)
Me.Fecha_de_aplicación.Value = rst.Fields(2)
y los que no acepta son:
Me.Aplicados.Value = rst.Fields(3)
Me.Registrados.Value = rst.Fields(4)
Me.Entrega_resultados.Value = rst.Fields(5)
Me.des_exa.Value = rst.Fields(6)
Me.Requerimientos.Value = rst.Fields(7)
Si pudieras enviar un mdb de ejemplo solo con un formulario, la tabla con datos de ejemplo y el código te lo puedo mirar
Eso es bastante sencillo de hacer, pero se debería usar código VBA en el momento de validar los datos.