es geht um den Feature Request #29, d.h. Erforderliche Tabellen bereits während des Imports mit dem ImportWizard zu erstellen.
Ich würde die Problemstellung an dieser Stelle gerne noch etwas mehr verallgemeinern und das Thema "Setup-Module" oder "Setup-Routinen" nennen.
Mir gefällt dass Josef's erster Ansatz eigentlich am besten:
Josef hat geschrieben:Lösungsansätze:
1.) wie bei den erforderlichen Verweisen in Codelib-Block ein Tag unterbringen, das auf ein Code-Modul (z. B. Klasse mit definierter Schnittstelle) verweist, über welches die Tabelle erzeugt wird. Dafür müsste das Code-Modul in die Anwendung kopiert und ausgeführt werden.
Was ich mir übergelgt habe ist die Setup-Routine am Ende des Imports mittels des <execute>-Tags auszuführen, Beispiel:
- Code: Alles auswählen
'<codelib>
' ...
' <execute>SetupUSysRegInfo()</execute>
' <execute>SetupProjectProperties()</execute>
' ...
'</codelib>
<execute> wird einfach nur an Eval() weitergereicht, es müsste also auch möglich sein Methoden aufzurufen die (entweder Boolean oder Int/Long als Return-Value haben und) in einer "Statischen" Klasse (mit Attribute VB_PredeclaredId = True) definiert sind.
Prinzipiell könnte man die Setup-Routinen auch als Modul ausführen, wenn dann im <execute>-Tag der vollqualifizierte Name verwendet wird (da sonst Compiler-Fehler auftreten wenn man mehrere SetupModule gleichzeitig importieren will).
Fragen:
- Klasse / statische Klasse / Modul ... was wollen wir nehmen?
- Kann in VBA ein Modul auch eine Schnittstelle implementieren?
- Wie sollte eine solche Schnittstelle eurer Meinung nach aussehen? (do's and don'ts)
- Sollte es lieber eine allgemeine Schnittstelle "ISetup" geben oder lieber mehrere spezielle wie z.B. "ISetupTable", "ISetupProperties", ...?
- Es wäre denkbar, das SetupModul nach dem Import wieder automatisch zu entfernen, was haltet Ihr davon?
Gruß Sten
Update
Das geht wohl doch nicht so einfach... der einzige Fall der im Test bereits funktioniert ist:
- Code: Alles auswählen
Public Function SubTest()
MsgBox "It Works"
End Function
und dann
- Code: Alles auswählen
?eval("SubTest()")
Selbst der Aufruf ?eval("Modulname.SubTest()") funktioniert schon nicht mehr.
Ebenso wenn es eine Public Sub anstatt Public Function sein soll.
Kennt jemand noch einen anderen Weg?
/Update