PDA

Vollständige Version anzeigen : Eigenschaftseinstellung eines Formulares


Franz Karl
27.03.2006, 16:41
Hallo zusammen,

wie kann ich wenn ich z.B. 100 Formulare in meiner Anwendung habe, quasi per Automatik-Programm eine Ererignisprozedur im Bereich Beim öffnen in jedes Formular einstellen, ohne dass ich jedes einzelne Formular händisch öffnen muss ?

Danke für die Hilfe !

Lamerman
27.03.2006, 17:42
Du meinst beim Schliessen von Formular1 soll sich Formular2 öffnen usw.?


DoCmd.OpenForm "Formular2"
DoCmd.Close "Formular1"

milko
27.03.2006, 19:08
Im Endeffekt suchst du eine Prozedur, welche alle Formulare durchläuft und ein definiertes Event mit Code befüllt, oder?
Ich weiß nicht, ob so etwas geht. Beim einfachen Kopieren des VBA-Codes erkennt das Formular oft nicht das Event. Das Hauptproblem ist also das Erstellen eines Events für ein Formular per Code.

Leseratte
27.03.2006, 19:47
machbar wäre das, jedoch auch relativ Aufwendig umzusetzen.

1.) du mußt ermittel wieviele Formulare es gibt
2.) du brauchst eine Schleife, die so oft läuft, wie es Formulare gibt, dabei mußt Du den Namen des Formulars kennen, an dessen Stelle sich die Schleife gerade befindet.
Dann kannst Du mit CreateEventProc("Form_Open", frm.Name) den gewünschten Code in jedes Formular eintragen.

Frag mich nicht wie diese Funktion komplett geschrieben aussieht, weiß ich nicht, müßte man sich hinsetzen und probieren, aber wenn Du die Ansätze verfolgst, und ein wenig VBA Literatur liest, solltest Du es schaffen. Ach so, für die Ermittlung der Anzahl der Formulare gibt es Code, einfach mal Googlen.

Leseratte
27.03.2006, 23:00
wobei ich noch nachtragen möchte, bevor Du diese Funktion entwickelt hast, bist Du mit Copy and Paste schneller, weil ohne fließende Erfahrung in VBA, dürfte es nicht einfach werden.

Franz Karl
28.03.2006, 12:45
Danke für die Hinweise,

vrmt. ist der Hinweis, alles mit Copy and Paste zu machen der vernünftigste, da es sich um eine 1xAktion handelt.

Anne Berg
28.03.2006, 13:22
Hallo,
ich habe etwas in der Art eben erst gebraucht, um Berichte anzupassen. Wenn du einmal eine solche Prozedur geschrieben hast, kannst du bei Bedarf - in abgewandelter Form - immer wieder darauf zurückgreifen. Und glaube mir, der Fall wird eintreten! ;)

Also, ehe ich ca. 100 Formulare manuell editiere, schreibe ich lieber eine Funktion dafür, selbst wenn es doppelt so lange dauern würde! :D

Anne Berg
28.03.2006, 14:12
Hier mal ein Beispiel:Public Function UpdateAllForms()
Dim db As Database, doc As Document, ctl As Control
Dim frm As Form, mdl As Module
Dim i As Integer, j As Integer, lngRetVal As Long
Set db = CurrentDb
For Each doc In db.Containers("forms").Documents
DoCmd.OpenForm doc.NAME, acViewDesign
Set frm = Forms(doc.NAME)
' Beispiel: Steuerelemente durchlaufen
For Each ctl In frm.Controls
If ctl.ControlType = acImage Then 'And ctl.NAME Like "BILD*" Then
i = i + 1
Debug.Print i, doc.NAME, ctl.NAME, ctl.Picture, ctl.Height; ctl.Width
End If
Next ctl
'Beispiel: Ereignisprozedur erstellen
Set mdl = frm.Module
lngRetVal = mdl.CreateEventProc("Open", "Form")
mdl.InsertLines lngRetVal + 1, " DoCmd.Maximize"
' ... weitere Zeilen ...
' speichern
DoCmd.Close acForm, doc.NAME, acSaveYes
Next doc
Set db = Nothing
End Function