El otro día nuestra empresa se encargó de convertir una gran cantidad de bases de datos de Access a múltiples backends de SQL Server. Para tener una idea de las tareas involucradas, necesitábamos una forma de contar todas las tablas, consultas, formularios y macros en cada base de datos.

Realicé una rápida búsqueda en Internet, pero no me gustó ninguno de los fragmentos de código, así que creé un pequeño programa que imprimirá las estadísticas inmediatas de Windows.

Public Sub CountObjects()
Dim qdf As DAO.QueryDef
Dim obj As Object
Dim tdf As DAO.TableDef
Dim i As Long

i = 0
Debug.Print CurrentDb.TableDefs.Count
For Each tdf In CurrentDb.TableDefs
If Not Left(tdf.Name, 4) = "MSys" Then
i = i + 1
End If
Next tdf
Debug.Print "Number of tables: " & i

'Determine number of queries
Debug.Print "Number of Queries: " & CurrentDb.QueryDefs.Count

'Determine number of forms
Debug.Print "Number of Forms: " & CurrentProject.AllForms.Count

'Determine number of Macros
Debug.Print "Number of Macros: " & CurrentProject.AllMacros.Count

'Determine number of reports
Debug.Print "Number of Reports: " & CurrentProject.AllReports.Count

End Sub

Un par de observaciones:

  • Para no contar las tablas del sistema, pase a través de la colección TableDef e ignore cualquier nombre de tabla que comience con MSys
  • No podrá utilizar la colección de Formulario para contabilizarlos ya que sus miembros constan sólo de formularios abiertos.

¡Disfruta!