MS-Access-Formular - Neuer Rekord auf öffnen und nach dem speichern Datensatz
In Bezug auf meine Frage hier gepostet:
MS Access-Formular, in dem Benutzername ausgewählt ist aus der Liste
Ich habe ein Formular erstellt, verwendet, wie ein Mitarbeiter Zeit Blatt. Benutzer, doppelklicken Sie auf das Formular und ein weiteres Formular öffnet sich, wo Sie wählen Sie Ihren Benutzernamen aus einer combo-box und die wichtigste Zeit, die Blatt-form lädt, die speziell für Ihren Benutzernamen. Sie sind in der Lage, neue Datensätze hinzufügen, und auch Ihre früheren Veröffentlichungen durch scrollen durch die "Vorherigen" und "Nächsten" Datensätze.
Jedoch, wenn ein Benutzer öffnet die form, die Ihre letzten Datensatz zeigt. Auch, wenn ein neuer Datensatz gespeichert wird, wird dieser neue Datensatz wird weiter angezeigt, es sei denn, ein Benutzer klickt auf "Neuer (leerer) Datensatz" - button.
Kann mir jemand helfen, ändern Sie den VBA-code in der form zu ermöglichen:
1) Einen leeren Datensatz, um automatisch zu laden, wenn das Formular geöffnet wird
2) Einen leeren Datensatz, um automatisch zu laden, wenn ein neuer Datensatz gespeichert/geändert.
Dies ist die pop-up-Fenster - Formular, das erscheint, wenn Sie wählen Sie die wichtigsten Daten Anmeldeformular:
Dies ist der code, der hinter dem pop-up-form (oben):
Private Sub Form_Current()
If VBA.Strings.Len(txtUN & "") = 0 Then DoCmd.OpenForm "frm_UserName", acNormal, , , , acDialog
If VBA.Strings.Len(txtUsername & "") = 0 Then txtUsername = txtUN
End Sub
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim ctl As Control
On Error GoTo Err_BeforeUpdate
If Me.Dirty Then
If MsgBox("Do you want to save?", vbYesNo + vbQuestion, _
"Save Record") = vbNo Then
Me.Undo
End If
End If
Exit_BeforeUpdate:
Exit Sub
Err_BeforeUpdate:
MsgBox Err.Number & " " & Err.Description
Resume Exit_BeforeUpdate
End Sub
Dies ist die Haupt-Daten-Eintrag-Formular [Fach - Arbeitszeittabellen-Eintrag]:
Dies ist der code, der hinter der [Fach - Arbeitszeittabelle Eintrag] form:
Option Compare Database
Private Sub cboUserName_AfterUpdate()
Forms![Specialist - Timesheet Entry].txtUN = cbousername
Forms![Specialist - Timesheet Entry].Filter = "user_full_name = '" & cbousername & "'"
Forms![Specialist - Timesheet Entry].FilterOn = True
'Forms![Specialist - Timesheet Entry].Requery
'DoCmd.Close
End Sub
Private Sub Form_Unload(Cancel As Integer)
If (VBA.Strings.Len(cbousername & "") = 0) Then
MsgBox "You must supply a user name before proceeding.", , "ERROR: Missing Info."
Cancel = True
End If
End Sub
Einmal die [Fach - Arbeitszeittabelle Eintrag] ausgewählt wird, [form_UserName] erscheint. Sie müssen wählen Sie einen Benutzernamen aus der Liste aus, und drücken Sie die "X" - Taste. Sobald die "X" - Taste ausgewählt ist, als die Dateneingabe-Formular [Fach - Arbeitszeittabelle Eintrag] wird angezeigt für einen Benutzer, geben Sie die notwendigen Felder aus. Ich bin auch auf der Suche für die Benutzer nicht haben, um drücken Sie die "X" Taste, um zu initiieren, die [Fach - Arbeitszeittabelle Eintrag] bilden. Idealerweise einmal wählt der Benutzer den Benutzernamen aus der Dropdown-Liste in dem pop-up -, möchte ich, dass das Formular automatisch schließen und erzeugen der [Fach - Arbeitszeittabelle Eintrag] bilden.
DoCmd.GoToRecord , , acNewRec
für neue Rekorde. Setzen Sie diese On Load
und wenn der Nutzer will, um den Datensatz zu speichern, müssen Sie behandeln die Yes
Teil, indem Sie versuchen, indem Sie den code in dort auch. Ich bin iffy über den Mich.Dirty code.wenn ich den vorgeschlagenen code bekomme ich einen Laufzeitfehler 2424. "Der von Ihnen eingegebene Ausdruck enthält einen Feld -, Steuerelement-oder Eigenschaftennamen, die MS Access nicht finden." Wenn ich auf "Debuggen" klicken, dieser code ist in rot hervorgehoben
If VBA.Strings.Len(txtUsername & "") = 0 Then
ich habe auch versucht, diesen code:
DoCmd.RunCommand acCmdRecordsGoToNew
und es ist das selbe Problem.der code, den Sie oben angegeben ist der gleiche code, die Sie mir in einer anderen Frage hatte ich gefragt, aber für einige Grund diese situation wirft eine Laufzeit.
Versuchen Sie, um zu Debuggen.
If VBA.Strings.Len(txtUsername & "") = 0 Then MsgBox("An erorr was caught") End If
InformationsquelleAutor JT2013 | 2014-07-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, ich habe etwas für dich hier.
Teile ich die gleiche Ansicht wie OverMind - ich bin iffy über den Mich.Dirty code. Ich glaube nicht, dass es notwendig ist. Alles, was Sie tun müssen, ist klicken Sie auf die dropdown-Liste wählen Sie einen Namen und öffnen Sie ein Formular, gefiltert mit dem ausgewählten Namen. Das gleiche gilt für das Form_BeforeUpdate-Ereignis. Du bist nicht wirklich ändern von Daten, sind Sie nur anklicken und auswählen. Ich empfehle das entfernen dieser beiden Ereignisse.
Wenn Euch das nichts ausmacht, überarbeitete ich diese ein wenig, da ich nicht die gesamte Anwendung vor mir. Versuchen Sie, die folgenden (es gibt ein paar Teile):
1.) frm_UserName
Kommentar den vorhandenen code in der
cboUserName_AfterUpdate
Veranstaltung und fügen Sie diese Zeile:Dadurch wird die
Timesheet - Specialist Entry
ausfrm_UserName
form "automatisch laden [einen leeren Datensatz] wenn dieTimesheet
form ist eröffnet" mit der Auswahl als filter.2.) Spezialist - Timesheet Eintrag
Erstellen Sie eine neue Prozedur in der Formular-Öffnen-Ereignis und fügen Sie diesen code:
Als Nächstes erstellen Sie eine neue Prozedur in der Speichern-Taste
Click
Ereignis und fügen diesen code ein:Dieser lädt automatisch einen leeren Datensatz, wenn ein neuer Datensatz gespeichert/geändert.
Ich hoffe, das hilft. Wenn Sie irgendwelche Fragen überhaupt haben, lassen Sie es mich bitte wissen. Ich würde froh sein zu helfen, sogar noch weiter. Ich habe auch eine Arbeitskopie verfügbar...
Ich dachte, die gleiche Sache, aber ich blieb so nah an der ursprünglichen UI-flow wie möglich - wollte nicht komplett neu. Sie bereits eine Menge Arbeit in es. Dies dient auch als eine gute Erfahrung.
ich habe alle der oben genannten und einige chages. Die
form_username
genannt werden solltefrm_username
und ich glaube, der Verweis auf"Username
solltetxtUserName
. Wenn ich die änderungen vorzunehmen, und klicken Sie doppelt auf dieSpecialist - Timesheet Entry
form bekomme ich ein run-time "MS Access kann das Formular 'frm_username'. Und wenn ich versuche zu Debuggen, dieser code ist in gelb: "Formen![Fach - Arbeitszeittabellen-Eintrag].Filter = "txtUserName = '" & Formulare![frm_username].cbousername.Column(1) & "'"`Antwort aktualisiert. Lassen Sie mich wissen, wenn Sie irgendwelche Fehler.
ich machte die updates und wenn ich wählen Sie einen Benutzer aus dem pop-up, das Hauptformular öffnet und so tut Sie das Dialogfeld gefragt, ob ich speichern möchte. Sobald ich auf "NEIN" bekomme ich einen Laufzeitfehler 2105 "Sie kann nicht gehen, um den angegebenen Datensatz." Diese Zeile ist gelb hinterlegt ` DoCmd.GoToRecord , , acNewRec`
InformationsquelleAutor Dan Romano