Открытие формы из отчета - PullRequest
       6

Открытие формы из отчета

0 голосов
/ 30 апреля 2018

У меня есть следующие строки кода в 2 разных функциях VBA в модуле, они обе имеют одну и ту же цель - открыть форму для определенной записи;

stLinkCriteria = "[ID]=" & Reports![Rpt_Manufacture].[ID]
DoCmd.OpenForm stDocName, , , stLinkCriteria

и

stLinkCriteria = "[ID]=" & Forms![frmManufactureList]![frm_Products].[ID]
DoCmd.OpenForm stDocName, , , stLinkCriteria

Как я могу изменить это, чтобы у меня была только одна функция, которую я могу вызывать из отчетов или форм, и она откроет форму для определенной записи. Я попробовал меня! версия в отчетах, но я получаю ключевое слово «Неправильное использование мной», которое, как мне кажется, связано с тем, что я не могу использовать его из модуля.

ОБНОВЛЕНИЕ № 1 Основываясь на ответе Томаса Дж, приведенного ниже, я использовал этот код;

Option Compare Database

Public Function CmdOpenProductDetails(ByRef theObject As Object)
On Error GoTo Err_CmdOpenProductDetails

    Dim stDocName As String
    Dim stLinkCriteria As String

    stDocName = "FrmProductDetails"

    stLinkCriteria = "[ProductID]=" & theObject![ProductID]
    DoCmd.OpenForm stDocName, , , stLinkCriteria

Exit_CmdOpenProductDetails:
    Exit Function

Err_CmdOpenProductDetails:
    MsgBox Err.Description
    Resume Exit_CmdOpenProductDetails

End Function

А из формы и отчета для названий продуктов у меня есть событие onClick, которое гласит:

=CmdOpenProductDetails()

Однако, если я нажимаю на название продукта в форме, я получаю сообщение об ошибке;

Экспресс при клике, который вы ввели в качестве настройки свойства события выдал следующую ошибку. Введенное вами выражение имеет Функция содержит неверное количество аргументов. (Выражение может не приводит к имени макроса, UDF или Event Proc) (там может быть была ошибка при оценке функции).

Если я щелкаю из отчета, я получаю сообщение об ошибке;

MS Access не может найти объект 'CmdOpenProductDetails (). Удостовериться Вы сохранили его и правильно набрали.

1 Ответ

0 голосов
/ 30 апреля 2018

Передайте форму byref в подпункте

что-то вроде

Public Sub Open_Form(ByRef theForm As Form)

    Dim stLinkCriteria As String

    stLinkCriteria = "[ID]=" & theForm![ID]
    DoCmd.OpenForm theForm, , , stLinkCriteria

End Sub


Private Sub TestIt()

        Open_Form Forms![frmManufactureList]![frm_Products]

End Sub

Обратите внимание, что вам, возможно, придется немного его настроить, потому что я не знаю точного контекста. Может быть, у вас есть подчиненная форма, поэтому вы должны вместо нее передать основную форму

Но идея есть


ОБНОВЛЕНИЕ после предложения Эрика:

Вы можете передать форму или отчет как объект, чтобы он работал для обоих

Public Sub Open_Form_or_Report(ByRef theObject As Object)

    Dim stLinkCriteria As String


    stLinkCriteria = "[ID]=" & theObject![ID]


    If TypeOf theObject Is Form Then

        DoCmd.OpenForm theObject , , , stLinkCriteria

    ElseIf TypeOf theObject Is Report Then
        DoCmd.OpenReport theObject , , , stLinkCriteria

    Else
        MsgBox "Error :  the type should be a Form or a Report"

    End


End Sub


Private Sub TestIt()

        Open_Form_or_Report Forms![frmManufactureList]![frm_Products]

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...