Re: Formulareingaben Speichern verhindern



Guten Morgen, Michael!


"Michael Zimmermann" <Zimmermann@xxxxxxxx> schrieb:

> Ich habe das ganze nie mit Unterformularen ausprobiert,
> da darfst Du jetzt Beta-Test-Arbeit leisten. :-)

Schön, und das als Laie :-)

Beta-Tester sind bezogen auf das, was sie testen, immer
Laien, weil's das erst seit kurzem gibt. Also keine falsche
Bescheidenheit.

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. 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
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)

For Each varKey In c3
Set ctrC = c1(varKey)
Debug.Print ctrC.Name
Debug.Print c2(varKey)
ctrC.ControlSource = c2(varKey)
Next varKey

' Herzliche Grüße
' Dietmar
' :-)

.



Relevant Pages

  • Re: Formulareingaben Speichern verhindern
    ... Private c1 As Collection ... Dim subFrmU As Access.SubForm ... Dim strKey As String ... Set c1 = New Collection ...
    (microsoft.public.de.access)
  • Re: Gleicher Bericht mehrmals Qffnen?=
    ... > Ich hab es einmal ohne Collection in einem Modul versucht: ... > Dim rep As Report ... > Set rpt = Nothing ... Damit speicherst du die Referenz auf den Bericht im Bericht selbst. ...
    (microsoft.public.de.access)
  • Re: Gleicher Bericht mehrmals Qffnen?=
    ... Ich hab es einmal ohne Collection in einem Modul versucht: ... Dim rep As Report ... Set rpt = New Report_XYZ ...
    (microsoft.public.de.access)
  • Re: Objekte gehen nicht in Collection
    ... > Dim Warengruppe As CWarengruppe ... > Set rst = comm.Execute ... auch für die Collection eine eigene Klasse ... auf (CWarengruppe und CWarengruppen). ...
    (microsoft.public.de.access)
  • Re: Wasserzeichen mit Word-Art
    ... Sub Vorschlag1() ... Dim hdr As Word.HeaderFooter ... Set doc = ActiveDocument ... With shp ...
    (microsoft.public.de.word.vba)