Re: Formulareingaben Speichern verhindern
- From: "Michael Zimmermann" <Zimmermann@xxxxxxxx>
- Date: Mon, 9 Jul 2007 22:25:40 +0200
Hallo!
Dietmar Thesing:
Nun gut, dann trau ich mich mal, dir zu zeigen, was ich
bisher daraus gemacht habe. Am Speichern bin ich noch
dran, aber das Binden und Entbinden und Sammeln scheint
zu funktionieren. Alles befindet sich im Formular-Modul.
Fehlerbehandlung folgt später. Unten der Code, mit
Deklarationen, Form_Load und dem Codeschnippsel fürs
Wieder-Binden der Steuerelemente. Würd mich freuen, wenn
du Lust hast, Verbesserungsvorschläge zu machen.
Hab ich.
Die Länge der Collection-Keys ist mir z.B. etwas lang
geraten. (Die Formatierung ist bei mir etwas
übersichtlicher, hab jetzt zum Posten ein paar
Einrückungen rausgenommen und ein paar
Code-Zeilen-Umbrüche gemacht.)
Option Compare Database
Option Explicit
Private c1 As Collection
Private c2 As Collection
Private c3 As Collection
Private Sub Form_Load()
'Setzt voraus, dass alle anzusprechenden Steuerelemente
'nur in Ufos und UF-Ufos vorhanden sind,
'weil das eigentliche Formular keine Daten,
'sondern nur das TabControl enthält.
Dim subFrm As Access.SubForm
Dim subFrmU As Access.SubForm
'Controls für die drei Ebenen
Dim ctrFrm As Access.Control
Dim ctr As Access.Control
Dim ctrU As Access.Control
'strKey(U): Der Collectionschlüssel als Zeichenfolge.
'Wird aus dem "Pfad" der Controls komplett
zusammengesetzt, 'weil es sein kann, dass dieselben Namen
' 'in verschiedenen Unterformularen vorkommen.
'Die Identifizierung erfolgt also über die
'Steuerelementnamen der UFos.
Dim strKey As String
Dim strKeyU As String
Dim ctrC As Access.Control
Set c1 = New Collection
Set c2 = New Collection
Set c3 = New Collection
'Sammeln
For Each ctrFrm In Me.Controls
If ctrFrm.ControlType = acSubform Then
Set subFrm = Me(ctrFrm.Name)
strKey = subFrm.Name & "!"
For Each ctr In subFrm.Controls
If ctr.ControlType = acTextBox Or _
ctr.ControlType = acComboBox Then
strKey = strKey & ctr.Name
c1.Add ctr, strKey
c2.Add ctr.ControlSource, strKey
c3.Add strKey, strKey
c3 ist m. E. überflüssig.
ctl.ControlSource = c2(ctl.Parent.Name & "!" & ctl.Name)
sollte beim Binden tun, was Du brauchst. Formularname,
Ausrufezeichen, Control-Name sind ja Dein Schlüssel, wenn
ich recht verstanden habe. Um unter alteingefleischten
Programmierern nicht aufzufallen wäre aber _ statt !
schöner.
End If
'strKey zurücksetzen
strKey = subFrm.Name & "!"
If ctr.ControlType = acSubform Then
Set subFrmU =
Me(ctrFrm.Name).Controls(ctr.Name) For Each
ctrU In subFrmU.Controls If
ctrU.ControlType = acTextBox Or _
ctrU.ControlType = acComboBox Then
strKeyU = strKey & ctr.Name & "!" &
ctrU.Name c1.Add ctrU, strKeyU c2.Add
ctrU.ControlSource, strKeyU c3.Add
strKeyU, strKeyU End If
Next ctrU
End If
Next ctr
End If
Next ctrFrm
For Each ctrC In c1
ctrC.ControlSource = ""
Next ctrC
e:
Set subFrm = Nothing
Set subFrmU = Nothing
End Sub
Hier das Binden einfach als Codeschnippsel, die Variablen
sind natürlich deklariert, bei varKey wusste ich nicht so
recht:
' Zuerst Steuerelemente wieder binden
'in c1 sind die Controls mit Key als String,
'der sich aus dem kompletten Namen mit UFO-Ctr-Namen
zusammensetzt. 'in c2 befindet sich der
Control-Source-String, mit Key, der auch in c1 ist.
'Der entspricht aber nicht dem Namen des Controls in c1.
'Deshalb c3, wo der Key gespeichert wurde.
'(An den kommt man ja sonst nicht dran)
Sieht doch soweit gut aus. Die c3 mit Key, Key ist aber
unästhetisch. Versuch mal meinen Vorschlag von oben.
For Each varKey In c3
Set ctrC = c1(varKey)
Debug.Print ctrC.Name
Debug.Print c2(varKey)
ctrC.ControlSource = c2(varKey)
Next varKey
Alles in allem ist das für einen 'beta-testenden Laien, der
noch nie Collections gesehen hat', doch sehr ordentlich. :-)
Weiter so!
Gruß aus Mainz
Michael
.
- Follow-Ups:
- Re: Formulareingaben Speichern verhindern
- From: Dietmar Thesing
- Re: Formulareingaben Speichern verhindern
- References:
- Re: Formulareingaben Speichern verhindern
- From: Michael Zimmermann
- Re: Formulareingaben Speichern verhindern
- From: Dietmar Thesing
- Re: Formulareingaben Speichern verhindern
- From: Michael Zimmermann
- Re: Formulareingaben Speichern verhindern
- From: Dietmar Thesing
- Re: Formulareingaben Speichern verhindern
- Prev by Date: Re: Datenzugriffssseite unter Access 2007
- Next by Date: Re: Formulareingaben Speichern verhindern
- Previous by thread: Re: Formulareingaben Speichern verhindern
- Next by thread: Re: Formulareingaben Speichern verhindern
- Index(es):
Relevant Pages
|