2015-06-12 2 views
1

У меня возникли проблемы при попытке условно отформатировать выставку записей в отчете в форме MS Access 2007.Условное форматирование по протоколу VBA MS Access Отчет не работает

У меня есть поиск в Интернете, и я видел много стипендиатов, заявляющих, что можно выполнить визуальные изменения в одной записи с помощью кода, реализующего метод Detail_Paint() для события Paint в разделе Detail в отчете. Эти люди говорят, что нечто подобное будет работать:

Private Sub Detail_Paint() 
    val = CStr(Me.someTextBox.Value) 
    If val = "constraint" Then 
     Me.lineStrikethrough.BorderStyle = 0 
    End If 
End Sub 

Проблема заключается в том, что, хотя чтение заявление Me.someTextBox.Value возвращает значение каждой записи, когда событие Paint брошено, написание заявление Me.lineStrikethrough.BorderStyle = 0 записывает значение свойства BorderStyle для каждой линии в моем докладе, не только для одного уважающих единственной записи, значение которого я прочитал от someTextBox поля.

Может ли кто-нибудь сказать мне, почему это происходит? Если это правильное поведение (хотя мне это не кажется правильным), как я могу достичь своей цели?

Примечание: lineStrikethrough используется для выполнения зачеркивающего эффекта над записью в отчете. Если есть еще один способ сделать это, я буду рад узнать.

+0

Что такое 'num'? Я не вижу, чтобы это определялось где угодно. –

+0

Привет @MarkC. Это была опечатка. 'num' - это фактически' val'. Но не волнуйтесь, работающая версия моего кода верна. – mhkgalvez

ответ

1

Две вещи:

1 - использовать событие на печать деталях, а не на событие Paint.

Private Sub Detail_Print(Cancel As Integer, PrintCount As Integer) 
    val = CStr(Me.someTextBox.Value) 
    If val = "constraint" Then 
     Me.lineStrikethrough.BorderStyle = 0 
    End If 
End Sub 

2 - Чтобы просмотреть условное форматирование, всегда открывайте отчет в окне предварительного просмотра, а не в представлении отчета.

+0

Есть ли способ увидеть отчет в виде «Печать», когда он находится внутри формы? – mhkgalvez

+0

Я не верю, так как в режиме предварительного просмотра печати страницы выравниваются по параметрам печати (поля, размер, портрет/пейзаж) и экспортируются в другие форматы с условной вкладкой ленты. Почему бы не использовать командную кнопку, которая запускает отчет в предварительном просмотре печати: 'DoCmd.OpenReport 'rptName", acViewPreview'? – Parfait

+0

К сожалению, клиент, с которым я работаю, желает, чтобы форма была представлена ​​таким образом, с сообщением внутри формы для целей листинга. – mhkgalvez

1

Вы действительно близко! :-) В моем тестировании выяснилось, что событие Detail_Paint() позволяет вам изменить форматирование элементов управления, но изменения будут продолжены в последующих записях, пока вы не измените/не переустановите их на что-то еще.

В вашем примере кода вам просто нужно добавить еще одну строку, чтобы включить зачеркивание BorderStyle, когда условие больше не выполняется.

Private Sub Detail_Paint() 
    Val = CStr(Me.someTextBox.Value) 
    If Val = "constraint" Then 
     Me.lineStrikethrough.BorderStyle = 0 
    Else 
     Me.lineStrikethrough.BorderStyle = 1 
    End If 
End Sub 

Я нашел этот ключ на code sample on MSDN который демонстрирует условное форматирование с использованием метода Detail_Paint().