Ошибка 2465 при попытке назначить значение набора записей для управления подчиненной формой в отчете.

Я пытаюсь заполнить 5 подформ (Fr_Rep_x) (x = от 1 до 5) в отчете (Report1) со значениями набора записей (5 разных страниц), вызвав публичную функцию 5 раз. Подчиненные формы и публичная функция вызываются в событии report_activate.

Я получаю указанную выше ошибку 2465: ошибка, определяемая приложением или объектом, в приведенной ниже строке общедоступной функции:

Reports("Report1").fr_name.Controls(Lbl_ON).Caption = rst("Order_Number")

Сообщить об активации события

Private Sub Report_Activate()
    Dim i As Integer
    For i = 1 To 5
        DoCmd.OpenForm "Fr_Rep_" & i, , , , , acHidden
        Call MORep(i, Forms!Fr_Main!NavSubform.Form!Lbox_Comp.Column(0), "00" & i & "0", Forms!Fr_Main!NavSubform.Form!Lbox_Comp.Column(3))
    Next i
End Sub

Общественная функция

Public Sub MORep(Form_num As Integer, MO_ON As Long, MO_Op As String, Mat As String)
Dim fr_name As String
fr_name = "Fr_Rep_" & Form_num

var_order = MO_ON
var_op_n = MO_Op
var_mat = Mat
var_matdes = DLookup("Material_Description", "Tbl_MO_Rev_Control", "Material = '" & var_mat & "'")
var_matrev = DLookup("MO_Rev_No", "Tbl_MO_List_Archive", "Order_Number = " & var_order)

Dim rst As DAO.Recordset
Dim dbs As DAO.Database
Set dbs = CurrentDb()
Set rst = dbs.OpenRecordset("Tbl_MO_List_Archive", Type:=dbOpenDynaset)
rst.FindFirst "[Order_Number] = " & var_order '& "*'" & "AND MO_Rev_No ='" & var_mo_rev & ""
Dim str1
Reports("Report1").fr_name.Controls(Lbl_ON).Caption = rst("Order_Number")
Reports("Report1").fr_name.Form.Lbl_OQ.Caption = rst("Order_Qty")
Reports("Report1").fr_name.Form.Lbl_Batch.Caption = rst("Batch")
Reports("Report1").fr_name.Form.Lbl_MRP.Caption = rst("MRP_Controller")
Reports("Report1").fr_name.Form.Lbl_PC.Caption = rst("Profit_Center")
Reports("Report1").fr_name.Form.Lbl_PS.Caption = rst("Production_Scheduler")
Reports("Report1").fr_name.Form.Lbl_Mat.Caption = rst("Material")
Reports("Report1").fr_name.Form.Lbl_Pr_D.Caption = Format(rst("MO_Issue_Date"), "DD-MMM-YYYY")
Reports("Report1").fr_name.Form.Lbl_Pr_T.Caption = rst("MO_Issue_Time")

Set rst = Nothing

Forms(fr_name).Controls(Lbl_Mat_D).Caption = var_matdes
Forms(fr_name).Controls(Lbl_T_Pg).Caption = DLookup("Total_Pages", "Tbl_MO_Rev_Control", "MO_Rev_No = '" & var_matrev & "'")
Forms(fr_name).Controls(Lbl_SAP).Caption = "Form # " & DLookup("SAP_Form_no", "Tbl_MO_Rev_Control", "MO_Rev_No = '" & var_matrev & "'")

Set rst = dbs.OpenRecordset("Tbl_MO_Op_Archive", Type:=dbOpenDynaset)
rst.FindFirst "[Order_Number] = " & var_order '& "*'" & "AND MO_Rev_No ='" & var_mo_rev & ""

If var_op_n = "0010" Then
    Forms(fr_name).Controls(Lbl_Ver_Drw_T).Visible = True
    Forms(fr_name).Controls(Lbl_Ver_Drw_B).Visible = True
    Forms(fr_name).Controls(Lbl_Ver_Drw_Sign).Visible = True
    Forms(fr_name).Controls(Lbl_Ver_Drw_Dt).Visible = True
    Forms(fr_name).Controls(Lbl_Pg).Caption = rst("10_Page_No")
    Forms(fr_name).Controls(Lbl_Ver_Drw_Sign).Caption = rst("10_Verif_Drw_Rev_Stamp")
    Forms(fr_name).Controls(Lbl_Ver_Drw_Dt).Caption = rst("10_Verif_Drw_Rev_Date_Stamp")
        'hide stamp labels for op 0020 to 0050
    Forms(fr_name).Controls(Lbl_FPV).Visible = False
    Forms(fr_name).Controls(Lbl_Clk).Visible = False
    Forms(fr_name).Controls(Lbl_Sign_Date).Visible = False
    Forms(fr_name).Controls(Lbl_VS_Acc).Visible = False
    Forms(fr_name).Controls(Lbl_VS_Rej).Visible = False
    Forms(fr_name).Controls(Lbl_PC_NA).Visible = False
    Forms(fr_name).Controls(Img_VS_Stamp).Visible = False
    Forms(fr_name).Controls(Lbl_Stamp_Type).Visible = False
    Forms(fr_name).Controls(Lbl_PC_Stamp).Visible = False
    Forms(fr_name).Controls(Lbl_PC_Acc).Visible = False
    Forms(fr_name).Controls(Lbl_PC_Rej).Visible = False
    Forms(fr_name).Controls(Lbl_Rej).Visible = False
ElseIf var_op_n = "0020" Then
    Forms(fr_name).Controls(Lbl_FPV).Visible = True
    Forms(fr_name).Controls(Lbl_Clk).Visible = True
    Forms(fr_name).Controls(Lbl_Sign_Date).Visible = True
    Forms(fr_name).Controls(Lbl_VS_Acc).Visible = True
    Forms(fr_name).Controls(Lbl_VS_Rej).Visible = True
    Forms(fr_name).Controls(Lbl_PC_NA).Visible = True
    Forms(fr_name).Controls(Lbl_PC_Acc).Visible = True
    Forms(fr_name).Controls(Lbl_PC_Rej).Visible = True
    Forms(fr_name).Controls(Lbl_Rej).Visible = True

    Forms(fr_name).Controls(Lbl_Ver_Drw_T).Visible = False
    Forms(fr_name).Controls(Lbl_Ver_Drw_B).Visible = False
    Forms(fr_name).Controls(Lbl_Ver_Drw_Sign).Visible = False
    Forms(fr_name).Controls(Lbl_Ver_Drw_Dt).Visible = False
    Forms(fr_name).Controls(Lbl_Pg).Caption = rst("20_Page_No")
    Forms(fr_name).Controls(Lbl_FPV).Caption = rst("20_First_Pc_Verif_Stamp")
    Forms(fr_name).Controls(Lbl_Clk).Caption = rst("20_Clock_No_Stamp")
    Forms(fr_name).Controls(Lbl_Sign_Date).Caption = rst("20_Date_Stamp")
    Forms(fr_name).Controls(Lbl_VS_Acc).Caption = rst("20_Sample_Verif_Acc_Stamp")
    Forms(fr_name).Controls(Lbl_VS_Rej).Caption = rst("20_Sample_Verif_Rej_Stamp")
    Forms(fr_name).Controls(Lbl_PC_NA).Caption = rst("20_Verif_Stamp_Type")          'user stamp not stored in 0020 op, only NA comment
    Forms(fr_name).Controls(Lbl_PC_Acc).Caption = rst("20_Pc_Comp_Acc_Stamp")
    Forms(fr_name).Controls(Lbl_PC_Rej).Caption = rst("20_Pc_Comp_Rej_Stamp")
    Forms(fr_name).Controls(Lbl_Rej).Caption = rst("20_Reject_No_Stamp")
ElseIf var_op_n = "0030" Then
    Forms(fr_name).Controls(Img_VS_Stamp).Visible = False
    Forms(fr_name).Controls(Lbl_Stamp_Type).Visible = False
    Forms(fr_name).Controls(Lbl_PC_Stamp).Visible = False
    Forms(fr_name).Controls(Lbl_Pg).Caption = rst("30_Page_No")
    Forms(fr_name).Controls(Lbl_FPV).Caption = rst("30_First_Pc_Verif_Stamp")
    Forms(fr_name).Controls(Lbl_Clk).Caption = rst("30_Clock_No_Stamp")
    Forms(fr_name).Controls(Lbl_Sign_Date).Caption = rst("30_Date_Stamp")
    Forms(fr_name).Controls(Lbl_VS_Acc).Caption = rst("30_Sample_Verif_Acc_Stamp")
    Forms(fr_name).Controls(Lbl_VS_Rej).Caption = rst("30_Sample_Verif_Rej_Stamp")
    Forms(fr_name).Controls(Lbl_PC_NA).Caption = rst("30_Verif_Stamp_Type")          'user stamp not stored in 0030 op, only NA comment
    Forms(fr_name).Controls(Lbl_PC_Acc).Caption = rst("30_Pc_Comp_Acc_Stamp")
    Forms(fr_name).Controls(Lbl_PC_Rej).Caption = rst("30_Pc_Comp_Rej_Stamp")
    Forms(fr_name).Controls(Lbl_Rej).Caption = rst("30_Reject_No_Stamp")
ElseIf var_op_n = "0040" Then
    Forms(fr_name).Controls(Lbl_Pg).Caption = rst("40_Page_No")
    Forms(fr_name).Controls(Lbl_FPV).Caption = rst("40_First_Pc_Verif_Stamp")
    Forms(fr_name).Controls(Lbl_Clk).Caption = rst("40_Clock_No_Stamp")
    Forms(fr_name).Controls(Lbl_Sign_Date).Caption = rst("40_Date_Stamp")
    Forms(fr_name).Controls(Lbl_VS_Acc).Caption = rst("40_Sample_Verif_Acc_Stamp")
    Forms(fr_name).Controls(Lbl_VS_Rej).Caption = rst("40_Sample_Verif_Rej_Stamp")
    Forms(fr_name).Controls(Lbl_PC_Stamp).Caption = rst("40_Verification_Stamp")                     'user stamp IS stored in 0040 op
    Forms(fr_name).Controls(Lbl_Stamp_Type).Caption = rst("40_Verif_Stamp_Type")                     'user stamp IS stored in 0040 op
    Forms(fr_name).Controls(Lbl_PC_Acc).Caption = rst("40_Pc_Comp_Acc_Stamp")
    Forms(fr_name).Controls(Lbl_PC_Rej).Caption = rst("40_Pc_Comp_Rej_Stamp")
    Forms(fr_name).Controls(Lbl_Rej).Caption = rst("40_Reject_No_Stamp")
ElseIf var_op_n = "0050" Then
    Forms(fr_name).Controls(Img_VS_Stamp).Visible = False
    Forms(fr_name).Controls(Lbl_Stamp_Type).Visible = False
    Forms(fr_name).Controls(Lbl_PC_Stamp).Visible = False
    Forms(fr_name).Controls(Lbl_Pg).Caption = rst("50_Page_No")
    Forms(fr_name).Controls(Lbl_FPV).Caption = rst("50_First_Pc_Verif_Stamp")
    Forms(fr_name).Controls(Lbl_Clk).Caption = rst("50_Clock_No_Stamp")
    Forms(fr_name).Controls(Lbl_Sign_Date).Caption = rst("50_Date_Stamp")
    Forms(fr_name).Controls(Lbl_VS_Acc).Caption = rst("50_Sample_Verif_Acc_Stamp")
    Forms(fr_name).Controls(Lbl_VS_Rej).Caption = rst("50_Sample_Verif_Rej_Stamp")
    Forms(fr_name).Controls(Lbl_PC_NA).Caption = rst("50_Verif_Stamp_Type")          'user stamp not stored in 0030 op, only NA comment
    Forms(fr_name).Controls(Lbl_PC_Acc).Caption = rst("50_Pc_Comp_Acc_Stamp")
    Forms(fr_name).Controls(Lbl_PC_Rej).Caption = rst("50_Pc_Comp_Rej_Stamp")
    Forms(fr_name).Controls(Lbl_Rej).Caption = rst("50_Reject_No_Stamp")
End If

If Form_num = 5 Then
    Set rst = Nothing
    Set dbs = Nothing
End If

If var_op_n = "0020" Or var_op_n = "0050" Then
    Forms(fr_name).Controls(Lbl_FPV).Top = 5250
    Forms(fr_name).Controls(Lbl_Clk).Vertical = False
    Forms(fr_name).Controls(Lbl_Clk).Top = 5250
    Forms(fr_name).Controls(Lbl_Sign_Date).Top = 5250
    Forms(fr_name).Controls(Lbl_VS_Acc).Top = 5250
    Forms(fr_name).Controls(Lbl_VS_Rej).Top = 5250
    Forms(fr_name).Controls(Lbl_PC_NA).Top = 5250
    Forms(fr_name).Controls(Lbl_PC_Acc).Top = 5250
    Forms(fr_name).Controls(Lbl_PC_Rej).Top = 5250
    Forms(fr_name).Controls(Lbl_Rej).Top = 5250
Else
    Forms(fr_name).Controls(Lbl_FPV).Top = 7250
    Forms(fr_name).Controls(Lbl_Clk).Vertical = True
    Forms(fr_name).Controls(Lbl_Clk).Top = 7250
    Forms(fr_name).Controls(Lbl_Sign_Date).Top = 7250
    Forms(fr_name).Controls(Lbl_VS_Acc).Top = 7250
    Forms(fr_name).Controls(Lbl_VS_Rej).Top = 7250
    Forms(fr_name).Controls(Lbl_PC_NA).Top = 7250
    Forms(fr_name).Controls(Lbl_PC_Acc).Top = 7250
    Forms(fr_name).Controls(Lbl_PC_Rej).Top = 7250
    Forms(fr_name).Controls(Lbl_Rej).Top = 7250
End If

Call OpNum
Call MatNum
Call MatRev
'Forms(fr_name)(Lbox_Op_List).Requery
'Forms(fr_name).Controls(Lbox_Op).Requery
Forms(fr_name).Controls(Lbl_Op).Caption = DLookup("Operation_Description", "Tbl_Ops_Desc", "MO_Rev_No = '" & var_matrev & "' AND Oper_No ='" & var_op_n & "'")

End Sub

Отчет о структуре и перемещении кода Застрял на шаге 6. Все формы имеют одинаковые элементы управления и контроля имена

пожалуйста, совет, я предполагаю, что ссылка на элемент управления подчиненной формы отчета неверна?


person Tinker    schedule 19.06.2018    source источник
comment
Пожалуйста, добавьте Option Explicit в свои модули и скомпилируйте код, возможно, вы ошиблись в именах переменных. Я так понимаю вместо fr_name.Controls должно быть fr_name.Form.Controls. Что такое Lbl_ON?   -  person Sergey S.    schedule 19.06.2018
comment
Это выглядит слишком сложным и, вероятно, ненужным. Меня озадачивает необходимость перемещать элементы управления внутри формы. Просто скройте / отобразите по мере необходимости, вы можете расположить их друг над другом, если вам действительно нужно несколько элементов управления. Также вы можете использовать свойство тега для циклического обхода наборов элементов управления и включения/изменения их.   -  person Minty    schedule 19.06.2018
comment
@Minty Я отредактировал вопрос, включив в него структуру отчета и движение кода. Мне пришлось сделать это, поскольку все подчиненные формы являются копиями друг друга с одним и тем же именем элемента управления, и в каждой подчиненной форме изменяются только значения элемента управления.   -  person Tinker    schedule 20.06.2018
comment
@ Сергей С. добавление Option Explicit останавливает код на Forms(fr_name).Controls(Lbl_Mat_D).Caption = var_matdes и требует от меня определить Lbl_Mat_D как переменную, когда на самом деле это имя элемента управления; Я исправил fr_name.Controls на «fr_name.Form.Controls», отчет появляется, но значения набора записей не назначаются ни одной из подчиненных форм.   -  person Tinker    schedule 20.06.2018
comment
@Sergey S. Lbl_ON — это имя элемента управления в форме Label OrderNumber. Я отредактировал вопрос, включив в него структуру отчета и движение кода. Все подчиненные формы являются копиями друг друга с одинаковым именем элемента управления, и в каждой подчиненной форме изменяются только значения элементов управления.   -  person Tinker    schedule 20.06.2018


Ответы (1)


Что касается вашего кода, здесь Lbl_ON не присвоено значение:

Reports("Report1").fr_name.Controls(Lbl_ON).Caption = rst("Order_Number")

Для проверки вставьте отладочную строку. Также попробуйте указать свойство Value:

Debug.Print "Lbl_ON:", Lbl_ON
Reports("Report1").fr_name.Controls(Lbl_ON).Caption = rst("Order_Number").Value

Если Lbl_ON может быть Null, управление доступом отсутствует, поэтому:

If Not IsNull(Lbl_ON) then
    Reports("Report1").fr_name.Controls(Lbl_ON).Caption = rst("Order_Number").Value
End If

Это, конечно, ничего не изменит, поэтому вы захотите исправить, что Lbl_ON не имеет значения.

person Gustav    schedule 19.06.2018
comment
Пробовал вышеописанное, но ошибка все еще возникает, отладка дает Lbl_ON: (Null), но в режиме отладки vba показывает, что rst("Order_Number").Value успешно извлек значение из таблицы - person Tinker; 20.06.2018
comment
Я отредактировал вопрос, включив в него структуру отчета и движение кода. Все подчиненные формы являются копиями друг друга с одинаковым именем элемента управления, и в каждой подчиненной форме изменяются только значения элементов управления. - person Tinker; 20.06.2018
comment
Раньше при первом управлении Subform2 возникала ошибка, теперь ошибка возникает при первом управлении subform1!... Reports("Report1").fr_name.Form.Lbl_ON.Caption = rst("Order_Number").Value или Reports("Report1").fr_name.Controls(Lbl_ON).Caption = rst("Order_Number").Value не устраняет ошибку! - person Tinker; 20.06.2018
comment
Чтобы избежать ошибки, вызванной нулевыми значениями, см., пожалуйста, мой отредактированный ответ. - person Gustav; 20.06.2018
comment
Nz не действует... Ошибка повторяется - person Tinker; 21.06.2018
comment
Это верно. Я отредактировал ответ. А вот как решить вопрос - что Lbl_ON не присвоено значение - решать вам. - person Gustav; 21.06.2018
comment
fr_name — это строковая переменная, вам также нужно обращаться к ней как .Controls(fr_name). .fr_name не может работать. @Тинкер - person Andre; 21.06.2018
comment
@Andre Это было правильно... все заработало... так и должно работать...Reports![Report1].Controls(fr_name).Form.Lbl_ON.Caption - person Tinker; 21.06.2018