Здесь делается предложение на 100% УДАЛИТЬ параметр из запроса. Это не только решает вашу проблему, но и означает, что вы можете использовать запрос для кода, других форм и не разбить весь ваш дизайн, потому что одна глупая форма не открыта (отсюда ОЧЕНЬ причина вашего вопроса).
Итак, удалите параметры из запроса. Это также означает, что вашему отчету теперь не понадобится какая-то уже открытая форма. И снова, если какая-то глупая форма не открыта, почему ваш отчет не работает?
Итак, удалите параметр. Теперь в вашей форме, открывающей отчет, он может пропустить фильтр, и еще раз использовать то, что называется предложением «где». Это предложение «где» разработано в MS-доступе, чтобы решить проблему необходимости заранее знать, какие параметры и фильтры вам нужны. Это происходит во время выполнения, и, таким образом, МНОГИЕ РАЗНЫЕ формы могут вызывать и открывать этот отчет.
Теперь в форме, которая вызывает и открывает форму, вы идете:
Docmd.OpenReport "rptSuppliers",acViewPreview, , _
"SupplierCode = " & me.SupplierCode
Итак, в приведенном выше параметре создается на лету. Большим преимуществом является то, что завтра у вас может быть другая форма, открывающая тот же отчет и, возможно, фильтр по регионам.
В случае НЕТ, когда предложение передается, и пользователь просто открывает форму, тогда никакие фильтры не будут использоваться, и никаких запросов не будет, и все записи будут показаны. Это, вероятно, ваш лучший подход.
Однако, если по какой-то странной причине вы по-прежнему считаете ДЕЙСТВИТЕЛЬНО необходимым иметь какое-то сообщение с отчетом, когда одна глупая форма просто не открывается, поместите следующий код в событие открытия форм.
If CurrentProject.AllForms("form1").IsLoaded = False Then
Me.Filter = "SupplierID = " & InputBox("Enter Supplier ID")
Me.FilterOn = True
End
Однако я бы действительно приложил усилия, чтобы избежать жесткого кодирования некоторых глупых имен форм в событии открытия отчетов. Мало того, что это означает жесткие зависимости кодирования какой-то глупой формы, которая теперь присоединена к отчету, но если вы позже скопируете этот отчет или даже скопируете оригинальную форму (или даже переименуете любой из этих объектов), вам придется зайдите в приложение и поищите, а теперь найдите места, которые вы, как разработчик, ввели зависимости. Такой подход может существенно увеличить затраты на обслуживание приложения и поэтому должен быть рекомендован.
Итак, здесь предлагается сбросить параметр запроса. Просто предоставьте форму или некоторую систему подсказок для запуска отчетов. Эти формы должны запрашивать у пользователя информацию, которую вы хотите отфильтровать. Или, как в вашем случае, эту информацию предоставляет связанная форма и ее текущая запись. Прелесть этой системы в том, что в отчете нет никакой депандансности.
Любая форма или даже любой код в будущем могут свободно передавать pramaeter, и он не будет ограничиваться SupplierID, но может быть любым типом фильтра или параметра, который вы пожелаете.
Имейте в виду, что, возможно, пользователь может не захотеть, чтобы эта форма была открыта, и, возможно, ему не нужна подсказка. С вашим дизайном и вопросом пользователь будет вынужден ввести значение параметра даже при запуске отчета без каких-либо открытых форм и не хочет, чтобы ему предлагали просмотреть все повторные записи в этом отчете.