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
Hallo!
Du kannst mit Application.SaveAsText das Formular als Textdatei exportieren und mit Application.LoadFromText wieder importieren.
Gruß
Josef
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
Hallo Doming,
wieso erstellst Du nicht einfach eine "StandardDB.accdb" aus der Du dann einfach Standardobjekte importierst?
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
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
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
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 FunctionSieht 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
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
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
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).