Condividi tramite

Access formattazione condizionale con VBA su report in anteprima di stampa

Anonimo
2019-06-20T14:13:07+00:00

Buongiorno,

avrei bisogno di un aiuto per risolvere il seguente problema.

In Access 2016 ho un report all'interno del quale voglio applicare una formattazione condizionale a un controllo associato (che indico qui come controlloA) in modo che appaia in formato grassetto se il valore di un altro controllo associato (che indico qui come controllo B) è pari a "g". Utilizzo il VBA perché la formattazione si deve applicare solo in alcuni casi.

Su evento Load del report ho inserito il codice seguente...

Dim objFrc As FormatCondition

Set objFrc = Me.controlloA.FormatConditions.Add(acExpression, acEqual, "[controlloB] = 'g' ")

With Me.controlloA.FormatConditions(0)

      .FontBold = True

End With

Il codice dovrebbe essere corretto, ho provato ad utilizzarlo su una form equivalente e funziona.

Il problema è sul report ed esattamente il seguente: se apro il report direttamente in visualizzazione "Anteprima di stampa" la formattazione condizionale non si applica, se invece lo apro prima in visualizzazione "Layout" o "Report" allora sì, ma io ho la necessità di aprirlo direttamente in anteprima di stampa... perché questo comportamento? Sapete darmi un'indicazione?

Grazie sin da ora,

Silvia

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

  1. Anonimo
    2019-06-20T14:55:30+00:00

    ciao Silvia,

    prova come segue senza formattazione condizionale :

    Private Sub Corpo_Format(Cancel As Integer, FormatCount As Integer)

    With Me

        .controlloA.FontBold = CBool(Nz(.controlloB, 0) = "G")

    End With

    End Sub

    Se controlloA e B sono nomi di fantasia come suppongo, adattali al tuo scenario.

    Facci sapere.

    Ciao, Sandro.

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento

3 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2019-06-21T10:19:11+00:00

    Ciao Sandro,

    grazie, funziona, allora in questo caso non andava su caricamento ma su apertura... grazie mille!

    Silvia

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2019-06-21T09:30:09+00:00

    ciao Silvia,

    […]

    in effetti guardando il tuo codice mi sono resa conto che bisognava dargli un "else:  controlloB.FontBold = False", ho riprovato e funziona!

    […]

    si, puoi procedere anche con il costrutto if...then...else...end if, ma meno istruzioni utilizzi meglio e', il codice e' piu' efficiente efficace, viene eseguito piu' velocemente. (corto circuito)

    […]

    Mi rimane la curiosità di capire perché nell'altro modo funzionasse solo da certe visualizzazioni, mah sarà un bug?

    […]

    nessun bug, prova nel modo che segue :

    Private Sub Report_Open(Cancel As Integer)

    With Me.controlloA

        Set objFrc = .FormatConditions.Add(acExpression, acEqual, "controlloB='G'")

        .FormatConditions(0).FontBold = True

    End With

    End Sub

    Private Sub Report_Unload(Cancel As Integer)

    Set objFrc = Nothing

    End Sub

    […]

    Silvia

    […]

    ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2019-06-21T07:55:25+00:00

    Ciao Sandro,

    sì ha funzionato, grazie mille!

    In effetti avevo provato anche su Corpo_Format inserendo una formattazione semplice ma utilizzando un if

    if controlloA = "g" Then

         controlloB.FontBold = True

    end if

    però così al primo record in cui controlloB era uguale a "g" iniziava a formattarmi in grassetto tutti i controlloA, anche per i record successivi in cui controlloB non era uguale a g... al che avevo pensato che non fosse il metodo giusto... in effetti guardando il tuo codice mi sono resa conto che bisognava dargli un "else:  controlloB.FontBold = False", ho riprovato e funziona!

    Mi rimane la curiosità di capire perché nell'altro modo funzionasse solo da certe visualizzazioni, mah sarà un bug?

    Comunque questo metodo è anche molto più stringato, quindi perfetto, grazie mille!

    Silvia

    La risposta è stata utile?

    0 commenti Nessun commento