Сравнение значения в поле отчета Access с запросом с использованием VBA

#ms-access #vba #ms-access-2013

#ms-access #vba #ms-access-2013

Вопрос:

В настоящее время у меня есть отчет, в котором перечислены шаги для различных задач и отслеживается количество ревизий. Каждая страница — это одна задача со всеми ее этапами. В конце отчета приведена история изменений, в которой будет перечислено, что было изменено для обновления количества изменений. У меня есть два запроса к отчету: один для генерации данных отчета, а другой для генерации истории изменений.

Что мне нужно сделать, так это показать, какие задачи имеют изменения в них. Я хочу сделать это, сравнив идентификатор задачи на каждой странице отчета с идентификатором задачи, найденным в запросе истории изменений.

Я пробовал несколько вариантов dlookups и dcounts, но безуспешно. Всякий раз, когда я отслеживаю код, он продолжает рассматривать его как false и завершает его.

 If DLookup("[Task_ID]", "[qry_revision_history_conversions]") = [Reports]![rpt_WI_Book].[Report]![Task] Then
[Reports]![rpt_WI_Book].[Report]![Rev_Change].Visible = False
  

Вероятно, мне не хватает чего-то действительно простого, но, похоже, я не могу понять это.

Вот код, который я использовал, чтобы заставить его работать.

 Dim LookupTask As Variant
Dim lngRed As Long, lngYellow As Long, lngWhite As Long
lngRed = RGB(255, 0, 0)
 lngBlack = RGB(0, 0, 0)
 lngYellow = RGB(255, 255, 0)
 lngWhite = RGB(255, 255, 255)

LookupTask = DLookup("[Task_ID]", "[qry_task_check]", [Reports]![rpt_WI_Book].[Report]![Text474])

If LookupTask = [Reports]![rpt_WI_Book].[Report]![Text474] Then
    [Reports]![rpt_WI_Book].[Report]![Text474].BackColor = lngYellow

Else
[Reports]![rpt_WI_Book].[Report]![Text474].BackColor = lngWhite
End If
  

Комментарии:

1. У вас нет критериев в вашем DLookUp() , поэтому он всегда будет возвращать первый TaskId запроса. Кроме того, выравниваются ли типы данных? Является ли элемент управления вложенного отчета, Задача , целым числом, подобным id?

Ответ №1:

Не уверен, какие именно поля находятся в вашей таблице, но, возможно, я могу предположить, что вы пытаетесь сопоставить TaskId с полем задачи отчета?

Из документов DLookup

если вы не указываете значение для критериев, функция DLookup возвращает случайное значение

Используйте свои критерии внутри DLookup, а затем проверьте значение Null:

 Dim LookupTask as Variant

LookupTask = DLookup("[Task_ID]", "[qry_revision_history_conversions]", "[Task_ID] = " amp; [Reports]![rpt_WI_Book]![Task])

If Not IsNull(LookupTask) Then
    [Reports]![rpt_WI_Book]![Rev_Change].Visible = False
End If
  

Комментарии:

1. Я попробовал этот код, и это не помогло. Я должен был уточнить подробнее, но поле задачи в отчете генерируется отдельным запросом, и в каждом разделе отчета будет указана каждая задача. Выполняемый мной запрос может содержать всего один идентификатор задачи или несколько в зависимости от того, был ли он недавно изменен. Из-за этого я хочу, чтобы изображение отображалось только в том случае, если в qry_revision_history_conversions отображается только идентификатор задачи.

2. Вы правы — вы должны включить эти важные детали в свой вопрос

3. Вы смогли направить меня в правильном направлении, но мне просто нужно было создать дополнительный запрос и внести некоторые коррективы, и теперь он запущен и работает. Кроме того, это также помогает не страдать от лихорадки во время работы.

4. Хорошая работа — вы всегда можете опубликовать обновленный код в своем вопросе или в другом ответе, чтобы другие могли воспользоваться редактированием — Ха — ты меня опередил!