d4shoernchen
Goto Top

Access (2010), Datensätze zählen via VBA und Wert in anderes Formular übergeben

Guten Morgen,

ich komme bei meiner Access-Datenbank leider nicht weiter. Ich habe eine Datei in der zwei Tabellen und dazu zwei Formulare angelegt sind. Einmal das Hauptformular und in diesem Formular wird auch das zweite Formular angezeigt. Es handelt sich um eine kleine und einfache Kundenverwaltung.

Nun habe ich via VBA "Beim Anzeigen" im UF und dem Befehl
Me!Anzahl_Artikel.Value = Me.RecordsetClone.RecordCount
Die Anzahl an Datensätzen gezählt. In Hauptformular sind die Daten des Kunden hinterlegt, im UF die Artikel die er kauft. Die Artikel werden nun korrekt gezählt. Nun würde ich diesen Wert gerne an das Hauptformular übergeben, denn im Kopf des Hauptformulars soll erscheinen, wie viele Artikel der Kunde besitzt. Hier komme ich leider nicht weiter.

Ich bin mir sicher, dass Ihr mir bei dem kleinen Problem helfen könnt.

Vielen Dank
@d4shoerncheN

Content-ID: 231042

Url: https://administrator.de/contentid/231042

Ausgedruckt am: 22.11.2024 um 02:11 Uhr

colinardo
colinardo 26.02.2014 aktualisiert um 08:35:00 Uhr
Goto Top
Hi @d4shoerncheN,
mit
Dim formParent As Form
Set formParent = Me.Parent
formParent.DeinTextFeld.SetFocus
formParent.DeinTextFeld.Value = "Testwert"  
in der Subform solltest du an eine Referenz der Form erhalten in der sich die Subform befindet. Damit kannst du dann den Inhalt eines Steuerelementes in der Parentform setzen.

Grüße Uwe
d4shoerncheN
d4shoerncheN 26.02.2014 aktualisiert um 09:19:32 Uhr
Goto Top
Hallo Uwe,

erst einmal viele Dank für deine Antwort.

Da ich mich mit VBA eigentlich nicht auskenne, komme ich mit deiner Lösung leider auch nicht weiter. Ich füge deinen Code (Textbox angepasst) im VBA unter "Beim Anzeigen" über meinem Zählcode ein?

Wenn ja, wie mache ich weiter?

Gruß
@d4shoerncheN
colinardo
Lösung colinardo 26.02.2014 aktualisiert um 10:01:45 Uhr
Goto Top
Also,
du gehst in deine Subform, markierst diese mit dem rechteckigen Kästchen ganz oben links im Formular, und wählst dann in den Eigenschaften unter Ereignisse > Beim Anzeigen den Code-Editor. Dort fügst du dann den obigen Code ein. Im Code musst den Namen des Textfeldes welches in deiner Hauptform liegt anpassen (DeinTextFeld).
Dim formParent As Form
Set formParent = Me.Parent
formParent.DeinTextFeld.SetFocus
formParent.DeinTextFeld.Value = Me.RecordsetClone.RecordCount
Wenn dir das nicht hilft -> Teamviewer face-wink

Grüße Uwe
d4shoerncheN
d4shoerncheN 26.02.2014 aktualisiert um 09:37:01 Uhr
Goto Top
Hallo Uwe,

doch das hilft. So hatte ich es eingefügt. Erhalte nun folgende Meldung:

Laufzeitfehler: 2465
Anwendungs- oder objektdefinierter Fehler.

und markiert die Zeile mit setFocus.

DeinTextFeld wurde in den Namen der Textbox umbenannt.

NACHTRAG
Mein Fehler. Geht nun face-smile

Kann man auch anzeigen lassen, welcher der aktuelle Datensatz ist? z. B. 2 von 3 statt nur 3.

Gruß
colinardo
colinardo 26.02.2014 um 09:41:41 Uhr
Goto Top
hier geht es problemlos, dann stimmt bei dir der Name des Textfeldes noch nicht, es muss der im Eigenschaften-Manager sein:

77b6a26676ede185d91e43aae6f0a602

Grüße Uwe
colinardo
colinardo 26.02.2014 aktualisiert um 09:44:22 Uhr
Goto Top
Zitat von @d4shoerncheN:
Kann man auch anzeigen lassen, welcher der aktuelle Datensatz ist? z. B. 2 von 3 statt nur 3.
Verstehe ich jetzt nicht ganz ... der aktuell markierte Datensatz im Unterformular soll im Hauptformular angezeigt werden ?
d4shoerncheN
d4shoerncheN 26.02.2014 aktualisiert um 10:08:44 Uhr
Goto Top
Sooo,

also zu #1. Wie gesagt, funktioniert nun. Habe dort fälschlicherweise den Namen der Textbox aus dem Unterformular eingegeben.

Zu #2
Die Navigationsleiste vom Unterformular habe ich entfernt, damit es nicht zur Verwirrung kommt. In dem Unterformular werden in der Formularansicht die Artikel (in dem Fall Tiere) mit spezifischen Daten angezeigt. Oben im Kopfbereich (noch mit Text52 benannt) sollte nun angezeigt werden, wie viele Tiere der Kunde besitzt. Dies funktioniert ja nun auch super. Nun wäre es gut, wenn man daneben aber noch anzeigen könnte, welches Tier das gerade aktuell angezeigte ist. Da man zwischen den Datensätzen im Unterformular ja hin und her springt. z.B. 1 von 3 Tieren, 2 von 3 Tieren.

NACHTRAG
Bzw. das man die Anzahl an Tiere die nun im HF angezeigt wird so beibehält, aber im Unterformular wieder sehen kann welches das gerade angezeigte Tier ist. Quasi die Navigationsleiste nachbaut.

Gruß
colinardo
Lösung colinardo 26.02.2014 aktualisiert um 10:01:41 Uhr
Goto Top
Ah OK, kein Problem.
du änderst die letzte Zeile des Codes in
formParent.Text52.Value = Me.CurrentRecord & " von " & Me.Recordset.RecordCount  
Grüße Uwe
d4shoerncheN
d4shoerncheN 26.02.2014 um 10:01:38 Uhr
Goto Top
Hallo,

du bist der Beste - dank dir face-smile

Gruß
@d4shoerncheN
d4shoerncheN
d4shoerncheN 04.03.2014 um 08:07:32 Uhr
Goto Top
Moin @colinardo,

ich brauche noch einmal deine Hilfe bei Access.

Bekommt man es hin, dass er beim Verlassen des Hauptformulares (sei es beim blättern der Datensätze, oder bei einer Neuanlage) geprüft wird, ob eine Checkbox aktiviert ist?

Hintergrund ist der: Neuer Kunde wird angelegt, dieser muss die Checkbox "AGB-Akzeptiert" angehakt haben. Ist dies nicht der Fall, erscheint eine MSGBOX das dieser Kunde noch die AGBs akzeptieren muss. Eventuell ist es ja möglich, dass diese MSGBOX immer bei dem Aufruf des Hauptformulars kommt. Frei nach dem Motto "Kunde XY und Kunde Z müssen die AGBs noch akzeptieren".

Dank dir.

Gruß
Toni
colinardo
colinardo 04.03.2014 aktualisiert um 09:09:48 Uhr
Goto Top
Hallo Toni,
Nothing ist impossible face-wink

also wenn deine Checkbox z.B. den Namen cbAGB hat dann kannst du es folgendermaßen machen:
Private Sub Form_Close()
    checkAGB
End Sub

Private Sub Form_Open(Cancel As Integer)
    checkAGB
End Sub

Sub checkAGB()
    If cbAGB.Value = False Then
        MsgBox "Bitte nicht vergessen, Sie müssen noch den AGB zustimmen!", vbExclamation  
    End If
End Sub
Für den Fall das du nicht weißt wohin mit dem Code, hier dazu noch eine Demo-Datenbank.

Das Kontrollkästchen sollte natürlich an ein Wahr/Falsch-Feld in der Datenbank gebunden sein.

Grüße Uwe