2016-06-09 22 views
3

Mein Ziel ist es, alle Befehlsschaltflächen in meinem Hauptmenü öffnen ein Formular direkt auf einen neuen Datensatz für die Eingabe. Allerdings habe ich bereits einen Code, der perfekt funktioniert, so dass alle Formulare direkt zu einem neuen Eintrag geöffnet werden, und ich kann immer noch zu vorherigen Einträgen navigieren. AUSSER für einen. Ich habe dies doppelt und dreifach gegen die anderen Codes überprüft, und es gibt keine Unterschiede. Aus irgendeinem Grund öffnet diese eine Form (ich nenne sie nur "Form" für den Zweck dieser Frage) die erste Aufzeichnung, anstatt eine neue. Unten ist der Code ich benutze das nicht funktioniert (obwohl es das gleiche wie meine anderen diejenigen ist, die Arbeit zu tun.)Formular zu einem neuen Datensatz in VBA öffnen

Private Sub Command13_Click() 
On Error GoTo Err_Command13_Click 

    Dim stDocName As String 
    Dim stLinkCriteria As String 

    stDocName = "Form" 
    DoCmd.OpenForm stDocName, , , stLinkCriteria 
    DoCmd.GoToRecord , , acNewRec 

Exit_Command13_Click: 
    Exit Sub 

Err_Command13_Click: 
    MsgBox Err.Description 
    Resume Exit_Command13_Click 

End Sub 

Sicherlich ist dies eine einfache Lösung, aber ich bin ratlos .

+4

Ist 'Allow Additions' = ja? Alles andere, was einen neuen Datensatz verhindert (Abfrage erlaubt Hinzufügen)? – BitAccesser

+2

Haben Sie versucht, das Objekt explizit aufzurufen? 'DoCmd.GoToRecord, stDocName, acNewRec' – MoondogsMaDawg

+0

@Hans Warum haben Sie gelöscht? Ich denke, es ist wichtig, den Menschen den besten Weg zu zeigen. 'DoCmd.GoToRecord acDataForm, stDocName, acNewRec' ist besser lesbar und Sie werden nicht gefangen, wenn das Formular aus irgendeinem Grund nicht aktiv ist. – BitAccesser

Antwort

2

Vom DoCmd.GoToRecord Methode Hilfethema ...

Wenn Sie die Objekttyp und objektname Argumente leer (die Standard konstant lassen, acActiveDataObject, für angenommen wird, Objekttyp), wird das aktive Objekt angenommen.

Normalerweise sollte DoCmd.OpenForm stDocNamestDocName das aktive Objekt machen, die GoToRecord bedeuten würde, sollte dann gegen diese Form angewendet werden. Und du hast angegeben, dass das mit deinen anderen Formen geschieht.

Da es in diesem Fall nicht funktioniert, gibt GoToRecord Werte sowohl für die Objekttyp und objektname Argumente:

DoCmd.OpenForm stDocName, , , stLinkCriteria 
'DoCmd.GoToRecord , , acNewRec 
DoCmd.GoToRecord acDataForm, stDocName, acNewRec 

Eines rätselhafter Punkt ist, dass stLinkCriteria eine leere Zeichenfolge ist. Es scheint also nicht sinnvoll zu sein, wenn Sie OpenForm anrufen. Aber ich kann nicht sehen, wie sich das auf das Ergebnis von GoToRecord auswirkt.

+0

Obwohl Ihr Konzept besser ist, funktioniert es auch ohne den Objektnamen (getestet mit 2007).Scheint so, als ob das Formular beim Öffnen aktiv wird. – BitAccesser

Verwandte Themen