none
Auflisten aller Objekte (Tabellen/Abfragen/Formulare und deren Steuerelemente)

    Frage

  • Hallo

    Ich möchte via VBA eine Auflistung aller Objekte (Tabellen und deren Felder, das Gleiche bei Abfragen, Fomulare und deren Steuerelemente und das Gleiche in den Reports) in der aktuellen Datenbank. Dies einerseits für Dokumentationszwecke, andererseits zum Suchen von Objektnamen und Anpassen von Namen (z.B. Controll im Formular mit dem Namen "Bezeichnungsfeld" anstelle von lbl...)

    Um die Controls der Formulare auslesen zu können, müssen diese in der Entwurfsansicht geöffnet werden. Wenn ich in der aktuellen DB z.B. ein Übersichtsformular mit all den ausgelesenen Daten (z.B. in einer Temp-Tabelle) habe, möchte ich nicht, dass sich das Formular schliesst (resp. in die Entwurfsansicht wechselt) und ich es dann wieder neu öffnen muss.

    Ich habe mir somit überlegt, das ich die Datenbank mit einer neuen Instanz von Access öffne, dann mit CurrentProject und CurrentData die Objekte durchlaufe und dann die DB wieder schliesse.

    Private m_AppAccess As Access.Application
    Private m_bolDBS As Boolean Private a Private m_CurrentData As Object Property Get AccApplication() As Access.Application If m_AppAccess Is Nothing Then Set m_AppAccess = New Access.Application End If Set AccApplication = m_AppAccess End Property Public Function CurrDBS(Optional strNameWithPath As String) As Boolean If m_bolDBS = False Then If Len(strNameWithPath) > 0 Then strNameWithPath = strNameWithPath Else strNameWithPath = CodeDb.Name End If Set a = AccApplication.DBEngine.Workspaces(0).OpenDatabase(strNameWithPath, False, False) 'AccApplication .OpenCurrentDatabase(strNameWithPath, False)
    m_bolDBS = True End If CurrDBS = True End Function Property Get currData() As Object Dim tbl Call CurrDBS If m_CurrentData Is Nothing Then Set m_CurrentData = AccApplication.CurrentData End If Set currData = m_CurrentData
    ' Dieser Teil ist nur zum Testen in dieser Get-Prozedur... For Each tbl In m_CurrentData.AllTables Debug.Print tbl.Name Next tbl End Property

    Ich rufe die Prozedur via Direktfenster mit ?currData auf.

    Der Code funktioniert bis zu For Each tbl... Dort gibt es den Laufzeitfehler 2467: In dem von Ihnen eingegebenen Ausdruck wird auf ein Objekt verwiesen, das geschlossen oder nicht vorhanden ist.

    Ich finde meinen Denkfehler nicht. Was mache ich falsch?

    Vielen Dank für Eure Antworten.


    Danke und Gruss Thomas



    • Bearbeitet Alphawolfi Montag, 2. Dezember 2013 21:06
    Montag, 2. Dezember 2013 21:04

Antworten

  • Solche Analyse Arbeiten erledigst Du am besten mit dem Total Access Analyzer von FMS (www.fmsinc.com)
    Er kostet zwar was (versuch' zuerst mit der Trial Version), aber ist den Preis immer wert.
    Gruss
    Henry

    "Alphawolfi" schrieb im Newsbeitrag news:fc04be7f-9dc4-4200-9f28-b2138ccd0070@communitybridge.codeplex.com...

    Ich möchte via VBA eine Auflistung aller Objekte (Tabellen und deren
    Felder, das Gleiche bei Abfragen, Fomulare und deren Steuerelemente und
    das Gleiche in den Reports) in der aktuellen Datenbank. Dies einerseits
    für Dokumentationszwecke, andererseits zum Suchen von Objektnamen und
    Anpassen von Namen (z.B. Controll im Formular mit dem Namen
    "Bezeichnungsfeld" anstelle von lbl...)

    • Als Antwort markiert Alphawolfi Montag, 16. Dezember 2013 22:40
    Dienstag, 10. Dezember 2013 09:20

Alle Antworten

  • Hallo Thomas

    Lass doch den Code in der aktuellen DB laufen und in der Schlaufe fängst du das Formular welches du nicht in die Entwurfsansicht umschalten möchtest ab und gehst weiter zum nächsten.

    Das ist sicher einfacher als was du am ausprobieren bist.

    Gruss Markus

    Donnerstag, 5. Dezember 2013 15:08
  • Hallo!

    > andererseits zum Suchen von Objektnamen und Anpassen
    > von Namen (z.B. Controll im Formular mit dem Namen
    > "Bezeichnungsfeld" anstelle von lbl...)

    Für diese Aufgabe könnte ich Dir ein Add-In empfehlen:

    http://www.team-moeller.de/?Add-Ins:TM-FixObjectNames

    HTH


    Thomas@Team-Moeller.de
    Blog: Blog.Team-Moeller.de
    Homepage: www.Team-Moeller.de


    Samstag, 7. Dezember 2013 12:10
  • Solche Analyse Arbeiten erledigst Du am besten mit dem Total Access Analyzer von FMS (www.fmsinc.com)
    Er kostet zwar was (versuch' zuerst mit der Trial Version), aber ist den Preis immer wert.
    Gruss
    Henry

    "Alphawolfi" schrieb im Newsbeitrag news:fc04be7f-9dc4-4200-9f28-b2138ccd0070@communitybridge.codeplex.com...

    Ich möchte via VBA eine Auflistung aller Objekte (Tabellen und deren
    Felder, das Gleiche bei Abfragen, Fomulare und deren Steuerelemente und
    das Gleiche in den Reports) in der aktuellen Datenbank. Dies einerseits
    für Dokumentationszwecke, andererseits zum Suchen von Objektnamen und
    Anpassen von Namen (z.B. Controll im Formular mit dem Namen
    "Bezeichnungsfeld" anstelle von lbl...)

    • Als Antwort markiert Alphawolfi Montag, 16. Dezember 2013 22:40
    Dienstag, 10. Dezember 2013 09:20
  • Danke für Eure Antworten

    Danke und Gruss Thomas

    Montag, 16. Dezember 2013 22:40