Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[ACCESS] Endlosformular per VBA

Empfohlene Antworten

Auf ein neues!

Ich habe ein Formular mit 2 Dropdown-Feldern. In diesen werden erst der Nachname und dann der Vorname des gewünschten Mitarbeiters ausgewählt. Die meisten Mitarbeiter bei uns haben mehrere Vorgänge (Jahresverträge, MAE, ...).

Meine Frage ist:

Wie stelle ich es an, daß nach der Auswahl des Mitarbeiters ein Endlosformular erstellt und angezeigt wird, in welchem die einzelnen Daten angegeben sind?

Hallo Goos,

Die Größe sollte nur meinen Hilferuf verdeutlichen :D

Hallo Maulwurf_der_Schlaue

Endlosformular bezeichnet einfach nur ein Formular in Listenform, beidem alle benötigten Datensätze untereinander angezeigt werden, also nicht ein Datensatz = eine Seite

also ich würd mal so versuchen:

ein formular erstellen mit einer drop-down list die die name der mitarbeiter enthält (tabellenhinhalt)

und einen button oder so... wenn du den drückst fügst du einfach neue elemente hinzu und passt die länge/breite des forumlars an...

also so

/* pseudo code */

onButtonClick ()

name = getdata(sqlstring('select info1 from tabelle1 where ...')

for each c in name

mynameobj = createlabel()

mynameobj.inhalt = c.value

mynameobj.xpos = ...

mynameobj.ypos = ...

....

irgendwie so... oder du erstellst einen bericht ... wenn du nicht unbedingt ein endlosforumar brauchst...

Hab es jetzt anders versucht.

Alserstes hab ich ein Endlosformular erstellt, in dem alle Datensätze enthalten sind.

Dann hab ich über VBA folgenden Code verwendet


Private Sub ma_vorname_AfterUpdate()

Dim sqlstr As String
Dim db As DAO.Database
Dim liste As DAO.Recordset

Set db = CurrentDb

Set liste = db.OpenRecordset("SELECT Personalnummer FROM tbl_Personal WHERE Name='" & nachname & "' AND Vorname='" & ma_vorname & "'", dbOpenForwardOnly)

Forms("Vorgangsdaten").Controls("ufrm_Vorgangsdaten.Personalnummer").Form.Filter = liste
Forms("Vorgangsdaten").Controls("ufrm_Vorgangsdaten.Personalnummer").Form.FilterOn
ufrm_Vorgangsdaten.Visible = True

End Sub[/PHP]

Aber genau hier hänge ich schon wieder.

Ich bekomme die Meldung:

Laufzeitfehler 2465

Microsoft Access kann das in Ihrem Ausdruck angesprochene Feld "ufrm_Vorgangsdaten.Personalnummer" nicht finden.

Das Feld existiert aber !!!!!!!!

Was ist nun schon wieder falsch ????? :mod:

Voraussetzungen:

eine Tabelle mit den Mitarbeitern drin, Schlüsselfeld heißt id (AutoWert). Ich hab nur ein Kombinationsfeld verwendet, in dem Name+Leerzeichen+Vorname aus der Tabelle Mitarbeiter angezeigt wird. Schlüsselspalte ist das Feld id der Tabelle Mitarbeiter.

Wenn Du es mit zwei Kombinationsfeldern machen willst, musst Du beim ersten in der AfterUpdate-Funktion die Datenherkunft für das zweite ändern, das war mir jetzt auf die schnelle zu umständlich.

Folgende Lösung:

Beim Auswählen des Namens aus der Liste wird eine in einem extra Modul geparkte Funktion ausgeführt. Die Mitarbeiter-id wird als Parameter übergeben.


Private Sub Kombinationsfeld1_AfterUpdate()

form_auftraege_aktualisieren (Kombinationsfeld1)

End Sub

Die Funktion schließt das Formular und ruft es mit einem entsprechenden Kriterium neu auf. Das Formular zeigt Daten aus der Tabelle auftraege an, wobei die Tabelle auftraege über das Feld mitarbeiter mit dem Feld id der Tabelle mitarbeiter verknüpft ist.

Public Sub form_auftraege_aktualisieren(form_auftraege_where)

DoCmd.Close acForm, "auftraege", acSaveNo

DoCmd.OpenForm "auftraege", , , "mitarbeiter=" & Trim(Str(form_auftraege_where))

End Sub

Vielleicht geht's auch eleganter, aber es funktioniert.

Das im Unterfromular (ufrm_Vorgangsdaten) angesprochene Steuerelement trägt den Namen Personalnummer.

Selbst wenn ich jetzt schreibe

Forms("Vorgangsdaten").Controls("ufrm_Vorgangsdaten.Personalnummer").Form.Filter = liste 
Forms("Vorgangsdaten").Controls("ufrm_Vorgangsdaten.Personalnummer").Form.FilterO[/PHP]

bringt mir das Programm die Fehlermeldung mit dem Fehlercode 2465.

Also an der Namensvergabe liegt es nicht,wäre auch zu schön gewesen.

Hi Reindeer,

Wenn Du es mit zwei Kombinationsfeldern machen willst, musst Du beim ersten in der AfterUpdate-Funktion die Datenherkunft für das zweite ändern, das war mir jetzt auf die schnelle zu umständlich.
Das läuft, soweit bin ich.

Dein Beispiel werd ich mal ausprobieren

Hi, Maulwurf_der_Schlaue

wäre es dann nicht so :

Forms("Vorgangsdaten").Controls("Personalnummer").Form.Filter

So einfach ist das nicht.

Mein Hauptformular heist Vorgangsdaten.

Das darin enthaltene Unterformular heißt ufrm_vorgangsdaten.

Die Dropdownfelder befinden sich im Hauptformular.

Sobald Name und Vorname in diesen DropDownfeldern ausgewählt wurden, soll im Unterformular ein Filter angewendet werden, d.h. es sollen alle Vorgänge zu dieser einen Person selektiert und angezeigt werden.

Hab es jetzt geklärt. Letzte Probs mit meiner aktuellsten Frage hier im Forum beantwortet.

Beitrag: Laufzeitfehler '2001'

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.