2016-05-17 9 views

Antwort

1
Public Function CreatedModified() 

    Dim db As DAO.Database 
    Dim rs As DAO.Recordset 
    Dim tdf As DAO.TableDef 
    Dim qdf As DAO.QueryDef 
    Dim strSql As String 
    Dim obj As AccessObject 

    strSql = "DELETE * FROM tblCCSObjects" 

    Set db = CurrentDb 

    db.Execute strSql, dbFailOnError 

    Set rs = db.OpenRecordset("tblCCSObjects") 

    With rs 

     ' tables 
     For Each tdf In db.TableDefs 
      If Not (tdf.Name Like "*MSys*" Or tdf.Name Like "~*") Then 
       .AddNew 
       !ObjectType_Order = "1" 
       !ObjectType = "Table" 
       !ObjectName = tdf.Name 
       !DateCreated = tdf.DateCreated 
       !DateModified = tdf.LastUpdated 
       .Update 
      End If 
     Next 

     ' queries 
     For Each qdf In db.QueryDefs 
      If Not (qdf.Name Like "*MSys*" Or qdf.Name Like "~*") Then 
       .AddNew 
       !ObjectType_Order = "2" 
       !ObjectType = "Query" 
       !ObjectName = qdf.Name 
       !DateCreated = qdf.DateCreated 
       !DateModified = qdf.LastUpdated 
       .Update 
      End If 
     Next 

     ' forms 
     For Each obj In CurrentProject.AllForms 
       .AddNew 
       !ObjectType_Order = "3" 
       !ObjectType = "Forms" 
       !ObjectName = obj.Name 
       !DateCreated = obj.DateCreated 
       !DateModified = obj.DateModified 
       .Update 
     Next 

     ' reports 
     For Each obj In CurrentProject.AllReports 
       .AddNew 
       !ObjectType_Order = "4" 
       !ObjectType = "Reports" 
       !ObjectName = obj.Name 
       !DateCreated = obj.DateCreated 
       !DateModified = obj.DateModified 
       .Update 
     Next 

     ' macros 
     For Each obj In CurrentProject.AllMacros 
       .AddNew 
       !ObjectType_Order = "5" 
       !ObjectType = "Macros" 
       !ObjectName = obj.Name 
       !DateCreated = obj.DateCreated 
       !DateModified = obj.DateModified 
       .Update 
     Next 
     End With 

    rs.Close 
    Set rs = Nothing 
    Set db = Nothing 

End Function 
+1

Hans, nochmals vielen Dank für Ihre Führung. Ich habe den Code geändert und die Anweisungen von If .. then für Formulare, Berichte und Makros losgeschickt, wie Sie vorgeschlagen haben. Alles funktioniert noch! In der Zwischenzeit habe ich den Namen der Tabelle geändert und ein Feld "Objekttyp-Sortierreihenfolge" hinzugefügt, sodass ich nicht-alphanumerisch sortieren konnte. Oben ist der aufgeräumte Code. –

+1

Disco. Nochmals vielen Dank für Ihre Hilfe. Ich nehme an, dass das Dim obj As AccessObject und dbFailOnError normale Protokolltypen sind. Ich wollte oben hinzufügen, dass ich von einer Subroutine zu einer Funktion wechseln musste, damit ein "RunCode" in einem Makro arbeiten konnte. –

2

Verwenden Sie die CurrentProject.All* Sammlungen: AllForms; AllReports; und AllMacros.

Hier ein Beispiel, in dem Direkt-Fenster ist:

for each obj in CurrentProject.AllForms : ? obj.Name, obj.DateCreated, obj.DateModified : next 
frmClaims  8/11/2015 12:11:46 PM  10/6/2015 1:08:28 PM 
frmInvoices 3/8/2015 5:04:24 PM   10/6/2015 1:08:28 PM 
frmChoosePerson    3/28/2015 1:11:51 PM  2/28/2016 8:29:28 PM 

for each obj in CurrentProject.AllReports : ? obj.Name, obj.DateCreated, obj.DateModified : next 
rptPassThruQuery   3/9/2016 1:04:38 PM   3/9/2016 2:23:38 PM 
rptChangeSort 7/27/2015 10:45:38 AM  10/6/2015 1:08:30 PM 

for each obj in CurrentProject.AllMacros : ? obj.Name, obj.DateCreated, obj.DateModified : next 
Macro2  6/17/2015 10:21:58 AM  6/17/2015 10:21:58 AM 
+0

Danke Hans, habe ich es zu arbeiten. Als Neuling für VBA verstehe ich nicht die Theorie oder den Unterschied zwischen Access behandelt Tabellen und Abfragen vs. Formulare und Berichte. Ach, dein Code hat geholfen! –

+0

Ja, es gibt keine "Route", um alle verschiedenen Datenbankobjekttypen zu erhalten. Das kann verwirrend und frustrierend sein. Sobald Sie die passenden Routen für jeden der Typen kennen, ... haben Sie einen guten Start. :-) – HansUp

+0

Ich habe den gesamten VBA-Code unten hinzugefügt - um sich daran zu erinnern, wie man das wieder macht! –