Use un libro de trabajo cerrado como base de datos (DAO) usando VBA en Microsoft Excel

Anonim

Con los procedimientos a continuación, puede usar DAO para recuperar un juego de registros de un libro cerrado y leer / escribir datos.
Llame al procedimiento de esta manera:
GetWorksheetData "C: \ Foldername \ Filename.xls", "SELECT * FROM [SheetName $]", ThisWorkbook.Worksheets (1) .Range ("A3")
Reemplace SheetName con el nombre de la hoja de trabajo de la que desea recuperar los datos.

Sub GetWorksheetData (strSourceFile como cadena, strSQL como cadena, TargetCell como rango) Dim db como DAO.Database, rs como DAO.Recordset, f como entero, r tan largo si TargetCell no es nada Entonces salga de Sub en caso de error Reanude el siguiente conjunto db = OpenDatabase (strSourceFile, False, True, "Excel 8.0; HDR = Yes;") 'solo lectura' Set db = OpenDatabase (strSourceFile, False, False, "Excel 8.0; HDR = Yes;") 'write' Set db = OpenDatabase ( "C: \ Foldername \ Filename.xls", False, True, _ "Excel 8.0; HDR = Sí;") 'solo lectura' Set db = OpenDatabase ("C: \ Foldername \ Filename.xls", False, False, _ "Excel 8.0; HDR = Yes;") 'escribe en error Ir a 0 Si db no es nada, entonces MsgBox "¡No se puede encontrar el archivo!", VbExclamation, ThisWorkbook.Name Salir Sub End If' 'lista los nombres de la hoja de trabajo' Para f = 0 Para db.TableDefs.Count - 1 'Debug.Print db.TableDefs (f) .Name' Next f 'abrir un conjunto de registros En caso de error Reanudar el siguiente conjunto rs = db.OpenRecordset (strSQL)' Establecer rs = db.OpenRecordset ( "SELECT * FROM [SheetName $]") 'Set rs = db.OpenRecordset ("SELECT * FROM [SheetName $]" & _ "DONDE [Nombre de campo] COMO 'A *'") 'Establecer rs = db.OpenRecordset ("SELECCIONAR * DE [Nombre de hoja $]" & _ "DONDE [Nombre de campo] COMO' A * 'ORDENAR POR [Nombre de campo]" ) En caso de error Ir a 0 Si rs no es nada, entonces MsgBox "¡No se puede abrir el archivo!", VbExclamation, ThisWorkbook.Name db.Close Establecer db = Nada Salir Sub End Si RS2WS rs, TargetCell rs.Close Establecer rs = Nada db. Cerrar Establecer db = Nothing End Sub Sub RS2WS (rs como DAO.Recordset, TargetCell como rango) Dim f como entero, r tan largo, c tan largo Si rs no es nada Entonces salga de Sub Si TargetCell no es nada y luego salga de Sub con la aplicación. = xlCalculationManual .ScreenUpdating = False .StatusBar = "Escribiendo datos desde el conjunto de registros …" Terminar con con TargetCell.Cells (1, 1) r = .Row c = .Column Terminar con con TargetCell.Parent .Range (.Cells (r, c ( r, c + f) .Formula = rs.Fields (f) .Name On Error GoTo 0 Next f 'write rec ords en caso de error Reanudar siguiente rs.MoveFirst en caso de error Ir a 0 Hacer mientras no rs.EOF r = r + 1 Para f = 0 To rs.Fields.Count - 1 En caso de error Reanudar siguiente .Células (r, c + f) .Fórmula = rs.Fields (f) .Value On Error GoTo 0 Siguiente f rs.MoveNext Loop .Rows (TargetCell.Cells (1, 1) .Row) .Font.Bold = True .Columns ("A: IV"). AutoFit Terminar con con la aplicación .StatusBar = Falso .Calculation = xlCalculationAutomatic .ScreenUpdating = Verdadero Terminar con End Sub

Los ejemplos de macros asumen que su proyecto VBA ha agregado una referencia a la biblioteca de objetos DAO.
Puede hacer esto desde dentro del VBE seleccionando el menú Herramientas, Referencias y seleccionando Microsoft DAO x.xx Object Library.