#vba #database-design #ms-access-2016
Вопрос:
Я знаю, что у меня был аналогичный пост, но он был закрыт до того, как был решен. Теперь у меня есть больше информации, которая может помочь. Весь код находится в модуле vba отчета. Поэтому я пытаюсь вызвать объект формы с кодом отчета
Код:
Do.Cmd.OpenForm “FormOne”, acNormal
Forms!FormOne.Visible = False
If Forms!FormOne.Form!Authorization.Value = 1 Then
Me.Label1.Caption = “Report A Details”
ElseIf Forms!FormOne.Form!Authorization.Value = 2 Then
Me.Label1.Caption = “Report B Details”
End If
End Sub
Та часть, где я открываю форму и делаю ее невидимой, работает. Оператор If/Else не работает, но и не выдает никаких ошибок. Я также попытался заменить второе (!) на (.), но произошло то же самое.
Поскольку вопрос был напечатан на iPad, мои цитаты выглядят как умные цитаты.
Комментарии:
1. Попробуй с
Forms!FormOne!Authorization.Value
.2. @Gustav Я только что попробовал это, но это не сработало. Спасибо!
3. Форма используется для взаимодействия с пользователем. Отчет, по сути, является объектом, доступным только для чтения. Открытие невидимой формы из кода отчета и использование значений свойств формы для задания свойств отчета кажется обратным. Обычно вы отображаете форму, ждете, пока пользователь нажмет кнопку или что-то еще, затем открываете отчет и задаете свойства отчета в коде формы.
4. @NicholasHunter Я на самом деле загрузил код в событие Report_Load. Я понимаю, о чем вы говорите, я попробую сделать это таким образом. Знаете ли вы, как ссылаться на объект отчета в форме? В значительной степени у меня есть отчет, в котором есть два подотчета. На основе определенного значения в форме я хочу, чтобы заголовок заголовка отчета изменился.
Ответ №1:
Я бы предпочел задать заголовок с помощью свойства OpenArgs отчета. Вот событие нажатия кнопки вашей формы.
Private Sub Command1_Click()
Dim args As Variant
If Me.Authorization.Value = 1 Then
args = "Report A Details"
ElseIf Me.Authorization.Value = 2 Then
args = "Report B Details"
End If
DoCmd.OpenReport "Report1", acViewPreview, OpenArgs:=args
End Sub
а вот отчет об открытом мероприятии
Private Sub Report_Open(Cancel As Integer)
If Not IsNull(Me.OpenArgs) Then
Me.Label1.Caption = Me.OpenArgs
End If
End Sub
Комментарии:
1. Большое вам спасибо, что перезвонили мне. Я попробую сделать это сейчас.
2. Таким образом, отчет по-прежнему открывается, но метки не меняются. Теперь у меня уже есть текст внутри метки, которой я хочу манипулировать (Label1), может ли это быть проблемой? Если я удалю текст в представлении дизайна отчета, метка тоже исчезнет.
3. Или отчет уже нужно открыть, чтобы внести изменения? В этом случае мы вызвали acViewPreview после оператора If/Else.
4. В моем примере предполагается, что отчет называется Report1, а элемент управления, который вы пытаетесь изменить, — это метка под названием Label1. Вам нужно убедиться, что метка достаточно широкая, чтобы на ней отображался необходимый текст. Не имеет значения, каков заголовок метки во время разработки, потому что во время выполнения он будет заменен содержимым свойства OpenArgs отчета. Заголовок метки не изменится, если вы не откроете отчет, выполнив команду Command_Click1 sub. Вам нужно настроить его на выполнение при нажатии кнопки в форме.