2016-06-09 3 views
3

Моя цель состоит в том, чтобы все командные кнопки в моем главном меню открывали форму справа на новую запись для записи. Тем не менее, у меня уже есть код, который отлично работает, поэтому все формы открываются справа на новую запись, и я могу перейти к предыдущим записям. ЗА ИСКЛЮЧЕНИЕМ для одного. Я дважды и тройной проверил это против других кодов, и нет никаких различий. По какой-то причине эта форма (я просто назовем ее «Форма» для этого вопроса) открывается первой, а не новой. Ниже приведен код, я использую это не работает, (хотя это так же, как другие мои те, которые делают работу.)Открытая форма новой записи в VBA

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 

Несомненно, это легко исправить, но я в растерянности ,

+4

«Разрешить добавления» = да? Что-нибудь еще, что предотвращает новую запись (запрос позволяет добавить)? – BitAccesser

+2

Вы пытались явно вызвать объект? 'DoCmd.GoToRecord, stDocName, acNewRec' – MoondogsMaDawg

+0

@Hans Почему вы удалили? Я думаю, что важно показать людям лучший способ сделать это. 'DoCmd.GoToRecord acDataForm, stDocName, acNewRec' более читабельна, и вы не попадаете в ловушку, если форма по какой-либо причине не активна. – BitAccesser

ответ

2

С DoCmd.GoToRecord Method раздел справки ...

Если оставить ObjectType и ObjectName аргументы пустые (константа по умолчанию, acActiveDataObject, предполагается, что для objecttype), принимается активный объект .

Обычно DoCmd.OpenForm stDocName должен сделать stDocName активный объект, который будет означать, GoToRecord должны быть затем применены против этой формы. И вы указали, что это происходит с вашими другими формами.

Однако, поскольку он не работает в этом случае дают GoToRecord значения для обоих ObjectType и Objectname аргументы:

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

Один озадачивает Дело в том, что stLinkCriteria пустая строка. Поэтому представляется нецелесообразным включать это, когда вы вызываете OpenForm. Но я не вижу, как это влияет на результат GoToRecord.

+0

Хотя ваша концепция лучше, она также работает без objectname (проверена с 2007).Похоже, что форма становится активной, когда она открывается. – BitAccesser

Смежные вопросы