2016-08-02 6 views
1

Ich habe einen Bericht, der Einzahlungen, mit der DepositID als Hyperlink aufgeführt. Wenn Sie auf Einzahlungs-ID klicken, wird das Einzahlungsformular für diesen bestimmten Datensatz geöffnet. Das Formular öffnet sich jedoch zu einem neuen Datensatz anstelle desjenigen, auf den der Benutzer klickt. Ich denke, es liegt daran, dass ich einen weiteren Codecode habe, der OnLoad des Formulars ausführt, das in einen neuen Datensatz übergeht, und möglicherweise nach Ausführung des OnClick-Codes ausgeführt wird.Access VBA - Offenes Formular zu bestimmten Datensatz von Bericht

OnClick von DepositID aus dem Bericht:

DoCmd.OpenForm "DepositForm", acNormal, "", "[DepositID]= " & [DepositID] 

OnLoad der Form:

DoCmd.GoToRecord , , acNewRec 

Ist der OnLoad Code nach dem Code OnClick ausgeführt wird, und effektiv den angegebenen Datensatz aus dem Bericht zeigt ? Nicht sicher, wie zu beheben ist.

+2

Es gibt eine schnelle und einfache Möglichkeit, über die Möglichkeiten des Druck-Debugging zu überprüfen! Haben Sie versucht, eine 'Debug.Print'Here '' oder eine 'MsgBox" Here "' in jedem Ihrer Eventhandler zu platzieren? Geben Sie ihnen verschiedene Nachrichten und Sie werden sehen können, welche wann und in welcher Reihenfolge ausgelöst werden. Wenn OnLoad nach OnClick ausgelöst wird, können Sie es sehen. – Mikegrann

+0

Am sichersten ist die Reihenfolge für das Öffnen des Formulars "Öffnen> Laden> Größe ändern> Aktivieren> Aktuell". Sie könnten den "Criteria" -Teil Ihres OpenForm-Aufrufs entfernen und einfach die "DepositID" an das Ende dieser Anweisung (als offene Argumente) verschieben. Dann überprüfen Sie einfach auf "Open" für offene Argumente - wenn nicht vorhanden zu neuen Datensatz. –

Antwort

2

Ich würde AddNewRecord nicht in Ihrem OnLoad-Ereignis verwenden.

Wenn Sie das Formular für beide bearbeiten/hinzufügen Zwecke verwenden, sollten Sie zwei Befehlsschaltflächen, die das Formular öffnen - eine für jeden Zweck

diese Zeile entfernen von Form_Load

DoCmd.GoToRecord , , acNewRec 

Verwenden der Befehl bearbeiten Sie jetzt genau haben wie - oder fügen Sie EditMode

DoCmd.OpenForm "DepositForm", acNormal, "", "[DepositID]= " & [DepositID], acFormEdit 

eine neue Schaltfläche hinzufügen neuer Datensätze zu speichern, wie in:

DoCmd.OpenForm "DepositForm", acNormal, , , acFormAdd 
+0

Dies ist eine perfekte Lösung! – user646464