Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Formular (keine Daten) als Datei speichern

Begonnen von Doming, Juni 19, 2025, 12:05:45

⏪ vorheriges - nächstes ⏩

Doming

Hallo,

ich möchte ein Formular mit dem dahinterliegenden Code als Datei speichern, um es auch in zukünftigen DB verwenden zu können.
Wie ich eine Datei in eine andere DB exportiere weiß ich, aber kann man solch ein Formular auch irgendwo abspeichern, um es dann wie ein Modul als Datei in einer anderen DB zu importieren?

Gruß
 Doming

Josef P.

Hallo!

Du kannst mit Application.SaveAsText das Formular als Textdatei exportieren und mit Application.LoadFromText wieder importieren.

Gruß
Josef

Doming

#2
Hallo und danke für den Tipp, Josef.

Man kann den Formular-Code vom VBA-Editor aus exportieren (CLS-Format), importieren lässt sich das dann aber nicht.

Mit Josefs Befehlen werde ich mir die Formulare nun wegspeichern und bei Bedarf dann mittels ein paar kleinen Prozeduren eigenständig ins neue Projekt einbinden.

Gruß
 Doming

andyfau

Hallo Doming,
wieso erstellst Du nicht einfach eine "StandardDB.accdb" aus der Du dann einfach Standardobjekte importierst?
Beste Grüße
Andreas

Doming

Hallo Andreas,

exportieren würde gehen, Import ist mein Problem.
Ich werde meine ,,Standardmodule und Formulare" als txt exportieren und mit einer Public-Prozedur nachinstallieren.
Morgen, wenn ich wieder am betreffenden Rechner bin.
Ich werde das dann hier nachreichen und zum Zerfleddern freigeben  ;)

Gruß
 Doming

Knobbi38

Wenn man zwei DBs gleichzeitig ausmacht, kann man auch Drag&Drop zwischen diesen machen. Da braucht man nicht immer extra etwas importieren  ;)

Nur mal so ...

Knobbi38

Josef P.

#6
Hallo!

Der Export als Textdatei hat den guten Nebeneffekt, dass man die Datei mit einem Versionsverwaltungssystem nutzen kann.

Ich verwende für meine wiederverwendbaren Codemodule ein Access-Add-In, mit dem ich auch die Abhängigkeiten auflöse.
Im Codemodule schreibe ich dafür in einen XML-Block, welche anderen Codemodule benötigt werden.

Gruß
Josef




Doming

Hallo,
folgenden Code habe ich mir zusammengebastelt:
Public Sub AllesDa()
    IstVorhanden "tabelle1"
    IstVorhanden "tabelle2"
    IstVorhanden "frmformular1"
    IstVorhanden "frmformular2"
    IstVorhanden "frmformular3"
End Sub
'-----------------------------------------------------------------------
Private Function IstVorhanden(SuchName As String) As Boolean
    On Error GoTo Fehler
    If DCount("[Name]", "MSysObjects", "[Name] = '" & SuchName & "'") = 1 Then
        IstVorhanden = True
    End If
   
    If IstVorhanden Then
        Debug.Print SuchName & " ist vorhanden"
    Else
        If Left(SuchName, 3) = "frm" Then
            If Not HolFormular(SuchName) Then
                Debug.Print "Ich habe Probleme beim Import von " & SuchName
            Else
                Debug.Print SuchName & " ist jetzt vorhanden!"
            End If
        Else
            Debug.Print SuchName & " ist NICHT vorhanden"
        End If
    End If
    Exit Function
Fehler:
    Debug.Print Now, SuchName, Err.Number, Err.Description
End Function
'-----------------------------------------------------------------------
Private Function HolFormular(FName As String) As Boolean
 Dim QuellDatei As String
    QuellDatei = "C:\Entwicklung\Module\" & FName & ".txt"
    If Dir(QuellDatei) <> "" Then
        Application.LoadFromText acForm, FName, QuellDatei
        DoEvents
        HolFormular = True
    Else
        Debug.Print "Ich finde das Formular " & FName & " nicht im Module-Verzeichnis"
    End If
End Function
Sieht aus als würde es wie gewünscht laufen.
Schön wäre es noch, wenn er mir nicht nur die Formulare importiert, sondern auch die Tabellenverknüpfungen.

Gruß
Doming

Josef P.

Hallo!

ZitatSchön wäre es noch, wenn er mir nicht nur die Formulare importiert, sondern auch die Tabellenverknüpfungen.
Zuerst dachte ich, du willst wiederverwendbare Formulare bzw. Codemodule exportieren.
Wenn du aber bestehende Tabellenverknüpfungen auch anlegen willst, könnte das auch eine Versionsverwaltung werden.

Als Anregung ein Beispiel, wie so ein Vorhaben mit dem ImportWizard aussehen würde:
https://github.com/AccessCodeLib/AccessCodeLib/blob/master/usability/OptionManagerSetup.bas
Auszug:
'<codelib>
'  <file>usability/OptionManagerSetup.bas</file>
'  <use>usability/OptionManager.cls</use>
'  <ref><name>VBIDE</name><major>5</major><minor>3</minor><guid>{0002E157-0000-0000-C000-000000000046}</guid></ref>
'  <execute>OptionManagerSetup_SetupTable()</execute>
'  <execute>OptionManagerSetup_CreateHelperModule()</execute>
'  <execute>OptionManagerSetup_RemoveSelf()</execute>
'</codelib>
Über die execute-Blöcke werden Prozeduren ausgeführt, die z. B. in diesem Fall eine Tabelle statt einer Verknüpfung erstellen.

Gruß
Josef




Doming

Hallo Josef,

Deinen Post habe ich als Anregung genommen noch etwas weiter zu recherchieren und habe meinem Code noch eine weitere Prozedur hinzugefügt
Private Function HolTabelle(Tabelle As String) As Boolean
On Error GoTo Fehler
 Dim QuellDb As String

    Select Case Tabelle
        Case "tblTabelle1", "tblTabelle2": QuellDb = "C:\Daten\BackEnd1.accdb"
        Case "tblTabelle3":                QuellDb = "C:\Daten\BackEnd2.accdb"
    End Select
   
    DoCmd.TransferDatabase acLink, "Microsoft Access", QuellDb, acTable, Tabelle, Tabelle
   
Fehler:
    HolTabelle = Err = 0
    If Err > 0 Then Debug.Print "Fehler HolTabelle: " & Tabelle, Err.Number, Err.Description
End Function

Die Funktion scheint gegeben, ich bin zufrieden

Gruß
 Doming

PhilS

Zitat von: Doming am Juni 20, 2025, 08:05:03Sieht aus als würde es wie gewünscht laufen.
In deiner IstVorhanden-Prozedur könntest/solltest du noch auf den Typ des Objektes prüfen. Der Objektname allein ist nicht eindeutig.

Zitat von: Doming am Juni 20, 2025, 08:05:03Schön wäre es noch, wenn er mir nicht nur die Formulare importiert, sondern auch die Tabellenverknüpfungen.
Du kannst die knüpften Tabellen mittels DAO.Database.CreateTableDef erstellen. Die erforderlichen Informationen sollten in der MSysObjects-Tabelle vorhanden sein (siehe z.B. Connect, ForeignName).
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor