PDA

Vollständige Version anzeigen : auswahlfeld funktioniert nicht


frontierscouts
26.04.2001, 11:54
hallo zusammen,
habe gerade einen vba-kursus absolviert und bin noch ein blutiger vba anfänger!habe mich natürlich gleich auf die produktion eines klassenmoduls gestürzt und bin fast dabei selbst abzustürzen. könnt ihr mir helfen?
wollte in einem personaldaten-formular ein auswahlfeld einbauen, in dem man nach einer personalnummer suchen kann. funktioniert aber nur mit fehlern! was habe ich falsch gemacht:
Private Sub Personalnummerauswahl_AfterUpdate()
On Error GoTo personalnummer_Err
Dim personalnummerauswahlmsgbox As Variant
With CodeContextObject
DoCmd.GoToControl "personalnummer"
DoCmd.FindRecord .Personalnummerauswahl, acStart, False, acDown, False, , True
If (personalnummer) = (Personalnummerauswahl) Then
DoCmd.GoToControl "RegisterStr183" 'unterformular
Else
personalnummerauswahlmsgbox = MsgBox("personalnummer nicht vorhanden! möchten sie einen neuen datensatz anlegen?", vbYesNo, "personaldaten-check")
If personalnummerauswahlmsgbox = 6 Then
DoCmd.GoToRecord , "", acNewRec
DoCmd.GoToControl "personalnummer"
End If
If personalnummerauswahlmsbbox = 7 Then
DoCmd.GoToControl "nachnameauswahl"
End If
End If
End With


personalnummer_Exit:
Exit Sub

personalnummer_Err:
MsgBox Error$
Resume personalnummer_Exit
End Sub

wahrscheinlich werdet ihr ich jetzt schieflachen, würde mich über schnelle hilfe sehr freuen
vielen dank im voraus
rainer dresen

Alexander Jan Peters
26.04.2001, 13:07
Hallo,

sieht nett aus, was Du da fabriziert hast, ich hab 10 Minuten gebraucht, um das zu verstehen. ;)

Mit den Befehlen RecordsetClone und Bookmark (s.Hilfe)ist es gut zu realisieren.
Dieses Beispiel hier soll Dir mal die Verwendung zeigen (insbsondere die untere Funktion beachten).


Private Sub Personalnummerauswahl_AfterUpdate()
Dim strPersAuswahl As String
Dim fErfolg As Boolean
Dim Mldg, Stil, Titel, Antwort

On Error GoTo sErr

strPersAuswahl = Me.Personalnummerauswahl.Value
fErfolg = fPersFinden(strPersAuswahl)

If fErfolg Then
'Es gibt die Personalnummer und das Formular ist aktualisiert
DoCmd.GoToControl "Text1"
Else
'Es wurde kein Eintrag gefunden, Benutzer fragen, ob er neuen Datensatz anlegen will
Mldg = "Möchten Sie einen neuen Datensatz anlegen ?"
Stil = vbYesNo + vbQuestion + vbDefaultButton2
Titel = "Anlage eines neuen Datensatzes"
Antwort = MsgBox(Mldg, Stil, Titel)

If Antwort = vbYes Then
'Anwort: Ja, Neuer Datensatz wird angelegt
DoCmd.GoToRecord , , acNewRec
DoCmd.GoToControl "Text1"
End If

End If

Exit Sub

sErr:
Exit Sub
End Sub

Private Function fPersFinden(strPersAuswahl As String) As Boolean
Dim varDummy As Variant
Dim rst As Recordset
Dim strBedingung As String

On Error GoTo fErr

strBedingung = "Personalnummer = '" & strPersAuswahl & "'"

fPersFinden = False

'Kopie der Datengrundlage
Set rst = Me.RecordsetClone
If rst.Bookmarkable = False Then
fPersFinden = False
Exit Function
End If

'Bildschirmaktualisierung ausschalten
Me.Painting = False

'Suche nach der gewünschten Personalnummer
rst.FindFirst strBedingung

If rst.NoMatch = True Then
'Nichts gefunden
'Aktualisierung erzwingen
Me.Requery
Set rst = Me.RecordsetClone
rst.FindFirst strBedingung

If rst.NoMatch = False Then
'Setzen des Zeigers (Bookmark) auf den Datensatz der gefunden wurde
Me.Bookmark = rst.Bookmark
fPersFinden = True
End If

Else
'Setzen des Zeigers (Bookmark) auf den Datensatz der gefunden wurde
Me.Bookmark = rst.Bookmark
fPersFinden = True

End If

'Bildschirmaktualisierung einschalten
Me.Painting = True
Exit Function

fErr:
fPersFinden = False
Me.Painting = True
Exit Function

End Function


Hier wird ein Zeiger (Bookmark) der dem Formular zugrunde liegenden Datengruppe auf den gewünschten Datensatz verschoben.
Es ist etwa so, als würdest Du mit den Navigationsschaltflächen zu einem Datensatz gehen.

Falls Du dazu noch Fragen hast ...

MfG

A.J.Peters

P.S. Es gibt auch einfachere Varianten.