Skip to content

ExportObjs

Sub ClearErrs()
    mdb = "C:\acc.mdb"

    qry1 = "update tbl set col=0 where col2 = 'xyz';"
    qry2 = "delete * from tbl where col = 'xyz';"

    Dim db As Access.Application
    Set db = GetObject(mdb)
    db.DoCmd.RunSQL qry1
    db.DoCmd.RunSQL qry2

    MsgBox "All Done!"
End Sub

Public Sub MainFn()
    Dim dbTo As String
    dbTo = "C:\acc.mdb"

    'rename objects
    RnmObjs dbTo    

    'delete objects
    DelObjs dbTo

    'export objects
    ExpObjs dbTo

    MsgBox "All Done!"
End Sub

Sub RnmObjs(mdb As String)
    On Error GoTo Error_Handler
    Dim db As Access.Application
    Set db = GetObject(mdb)

    'tables
    RenameObject db, "tbl", "nam_old", "nam_new"

Error_Exit:
    On Error Resume Next
    db.Application.Quit
    Set db = Nothing
    Exit Sub

Error_Handler:
    MsgBox "Error " & Err.Number & vbCrLf & Err.Description, vbCritical, "Error in RenameObjects!"
    Resume Error_Exit
End Sub

Sub DelObjs(mdb As String)
    On Error GoTo Error_Handler
    Dim db As Access.Application
    Set db = GetObject(mdb)

    'tables
    DeleteObject db, "tbl", "tbl_x"

Error_Exit:
    On Error Resume Next
    db.Application.Quit
    Set db = Nothing
    Exit Sub

Error_Handler:
    MsgBox "Error " & Err.Number & vbCrLf & Err.Description, vbCritical, "Error in DeleteObjects!"
    Resume Error_Exit
End Sub

Sub ExpObjs(dbTo As String)
    On Error GoTo Error_Handler

    'tables
    ExportObject dbTo, "tbl", "tbl_x", True

    'queries
    ExportObject dbTo, "qry", "insert_qry"

    'forms
    ExportObject dbTo, "frm", "x_subform"

Error_Exit:
    On Error Resume Next
    Exit Sub

Error_Handler:
    MsgBox "Error " & Err.Number & vbCrLf & Err.Description, vbCritical, "Error in ExportObjects!"
    Resume Error_Exit
End Sub

Sub RenameObject(db As Access.Application, typ As String, nam_old As String, nam_new As String)
    db.DoCmd.Rename nam_old, ObjTyp(typ), nam_new
End Sub

Sub DeleteObject(db As Access.Application, typ As String, nam As String)
    db.DoCmd.DeleteObject ObjTyp(typ), nam
End Sub

Sub ExportObject(db As String, typ As String, nam As String, Optional strucOnly As Boolean = False)
    DoCmd.TransferDatabase acExport, "Microsoft Access", db, ObjTyp(typ), nam, nam, strucOnly
End Sub

Function ObjTyp(typ As String) As AcObjectType
    Select Case typ
        Case "frm"
            ObjTyp = acForm
        Case "mco"
            ObjTyp = acMacro
        Case "mod"
            ObjTyp = acModule
        Case "qry"
            ObjTyp = acQuery
        Case "rpt"
            ObjTyp = acReport
        Case "tbl"
            ObjTyp = acTable
        Case Else
            ObjTyp = acDefault
    End Select
End Function

Public Sub ExportObjects(db As String)
    On Error GoTo Error_Handler

     ' Tables
    For Each tdf In CurrentDb.TableDefs
        If Left(tdf.Name, 4) = "MSys" Then    'Ignore/Skip system tables
            ExportObject "tbl", obj.Name, db
        End If
    Next tdf

    ' Queries
    For Each qdf In CurrentDb.QueryDefs
        If Left(qdf.Name, 1) = "~" Then     'Ignore/Skip system generated queries
            ExportObject "qry", obj.Name, db
        End If
    Next qdf

    ' Forms etc
    For Each obj In CurrentProject.AllForms, AllReports, AllMacros, AllModules
        ExportObject "frm", obj.Name, db
    Next obj

Error_Handler_Exit:
    On Error Resume Next
    Set qdf = Nothing
    Set tdf = Nothing
    Set obj = Nothing
    Exit Sub

Error_Handler:
    MsgBox "Error Number: " & Err.Number & vbCrLf & _
           "Error Description: " & Err.Description, _
           vbCritical, "Error in Export Objects!"
    Resume Error_Handler_Exit
End Sub