Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

A2K: formattazione condizionale da Codice

308 views
Skip to first unread message

Ganimede

unread,
May 17, 2009, 4:46:36 AM5/17/09
to
Ciao,

in Access 2000 si può lavorare da codice sulla formattazione
condizionale?

Grazie.

Alessandro Baraldi

unread,
May 18, 2009, 2:02:19 AM5/18/09
to

Si.

@Alex

Ganimede

unread,
May 18, 2009, 4:53:25 AM5/18/09
to
Ciao,

> > in Access 2000 si può lavorare da codice sulla formattazione
> > condizionale?
>
> > Grazie.
>
> Si.
>
> @Alex

Sai dove posso trovare qualche esempio per Access 2000 ? vorrei
comporre run-time la formula (quella del tuo esempio) e scegliere il
colore (lo prenderei da una mia tabella di impostazioni).

Grazie.

Ganimede Dignan.

Alessandro Baraldi

unread,
May 18, 2009, 6:39:04 AM5/18/09
to
...

> Sai dove posso trovare qualche esempio per Access 2000 ? vorrei
> comporre run-time la formula (quella del tuo esempio) e scegliere il
> colore (lo prenderei da una mia tabella di impostazioni).
>
> Grazie.
>
> Ganimede Dignan.

Nell'Help o nel Visualizzatore Oggetti trovi tutto...!

Questo è l'Insieme delle Formattazioni, come sai al massimo sono 3:
Class FormatConditions
Membro di Access

Questa è la Classe della Singola Formattazzione:
Class FormatCondition
Membro di Access

Ovviamente hai a disposizione tutte le proprietà utili... nel tuo caso
sarà Expression1/2....

Ciao
@Alex

Ganimede

unread,
May 18, 2009, 7:56:55 AM5/18/09
to

Ma in Access 2000 ? me lo confermi? ... mi pareva di aver letto che in
A2K fossero solo in lettura.

Bye.

Alessandro Baraldi

unread,
May 18, 2009, 9:38:01 AM5/18/09
to
...

> Ma in Access 2000 ? me lo confermi? ... mi pareva di aver letto che in
> A2K fossero solo in lettura.
>
> Bye

Purtroppo non posso confermarlo... non ho mai usato A2000... è anche
possibile che tu abbia ragione, ma te ne accorgi dall'Help che
verranno definite in sola lettura... oppure banalmente facendo una
prova...

@Alex

Roberto da Parma

unread,
May 18, 2009, 6:41:37 PM5/18/09
to

"Alessandro Baraldi" <ik2...@libero.it> ha scritto nel messaggio
news:6c63a01a-b694-4d81...@s21g2000vbb.googlegroups.com...

...
> Ma in Access 2000 ? me lo confermi? ... mi pareva di aver letto che in
> A2K fossero solo in lettura.
>
> Bye

Purtroppo non posso confermarlo... non ho mai usato A2000... � anche


possibile che tu abbia ragione, ma te ne accorgi dall'Help che
verranno definite in sola lettura... oppure banalmente facendo una
prova...

@Alex

In che senso solo lettura?
In ogni caso la formattazione condizionale la puoi fare tranquillamente da
VBA
.formatcondition(0)
.formatcondition(1)
.formatcondition(2)

L'help ...ti aiuta...in quanto help... :-)

Ciao

--

Roberto da Parma


Alessandro Baraldi

unread,
May 19, 2009, 2:11:50 AM5/19/09
to
....

> In che senso solo lettura?
> In ogni caso la formattazione condizionale la puoi fare tranquillamente da
> VBA
> .formatcondition(0)
> .formatcondition(1)
> .formatcondition(2)
>
> L'help ...ti aiuta...in quanto help... :-)
>
> Ciao
>
> --
>
> Roberto da Parma

Leggi bene quello che è stato chiesto...
Quanto hai suggerito è ovviamente da manuale, ma lui ha esplicitato il
suo dubbio in merito alla versione A2000.... sulla quale ricordo
anch'io ci fosse qualche inghippo, ma non avendo la certezza.....

In pratica chiede conferma sulla possibilità di usare in R/W tale
proprietà con A2000.

Spero di aver chiarito...

@Alex

Roberto da Parma

unread,
May 19, 2009, 3:26:00 PM5/19/09
to

"Alessandro Baraldi" <ik2...@libero.it> ha scritto nel messaggio
news:d009820c-bb24-4cbd...@q14g2000vbn.googlegroups.com...

....
> In che senso solo lettura?
> In ogni caso la formattazione condizionale la puoi fare tranquillamente da
> VBA
> .formatcondition(0)
> .formatcondition(1)
> .formatcondition(2)
>
> L'help ...ti aiuta...in quanto help... :-)
>
> Ciao
>
> --
>
> Roberto da Parma

Leggi bene quello che � stato chiesto...
Quanto hai suggerito � ovviamente da manuale, ma lui ha esplicitato il


suo dubbio in merito alla versione A2000.... sulla quale ricordo
anch'io ci fosse qualche inghippo, ma non avendo la certezza.....

In pratica chiede conferma sulla possibilit� di usare in R/W tale
propriet� con A2000.

Spero di aver chiarito...

@Alex

Sono sicurissimo che in ac2003 la risposta � SI.
Per ac2000 con certezza non ti saprei dire...ma basterebbe che l'interessato
controllasse nelle librerie di ac2000
...nel frattempo ho fatto un paio di ricerche e qui sembrerebbe che la
funzione ci sia

http://bytes.com/groups/ms-access/520981-format-condition-confusion

Basta che comunque faccia una prova di scrittura del codice e con un debug
scopre subito l'arcano.
In linea di massima ti direi che pu�.

Karl Donaubauer

unread,
May 20, 2009, 3:06:03 PM5/20/09
to
Roberto da Parma wrote:
> "Alessandro Baraldi ha scritto:

> ....
>> In che senso solo lettura?
>> In ogni caso la formattazione condizionale la puoi fare
>> tranquillamente da VBA
>> .formatcondition(0)
>> .formatcondition(1)
>> .formatcondition(2)
> ...
> In pratica chiede conferma sulla possibilit� di usare in R/W tale
> propriet� con A2000.
> ...

> Per ac2000 con certezza non ti saprei dire...
> ...

> In linea di massima ti direi che pu�.

S�. Lo faccio tante volte con A00.

--
cu
Karl
*********
Access FAQ: www.donkarl.com/it


Ganimede

unread,
May 24, 2009, 9:37:17 AM5/24/09
to
Ciao a tutti,

grazi per i suggerimenti ricevuti fino ad ora.

Oggi ho fatto qualche esperimento con Access 2000.

arc_frm è il form principale e arc_sub_frm è il subform (modalità
foglio dati), il codice che riporto è nell'evento caricamento del form
principale:

Dim ctl As Access.Control
For Each ctl In Forms!arc_frm!arc_sub_frm.Controls
Select Case ctl.ControlType
Case acTextBox, acComboBox, acListBox
With ctl
.FormatConditions.Delete
.FormatConditions.Add acExpression, , GetRecNum(Forms!
arc_frm!arc_sub_frm.Form) Mod 2 <> 0
.FormatConditions(0).BackColor = getobj("descrizione",
"impostazione", "obj", "actbckcolor", "16777215")
End With
End Select
Next ctl

Risulatato? si colorano tutte le righe, come mai? Ho anche provato a
specificare ogni controllo di arc_sub_frm


Dim ctl As Access.Control
For Each ctl In Forms!arc_frm!arc_sub_frm.Controls
Select Case ctl.ControlType
Case acTextBox, acComboBox, acListBox
With ctl
.FormatConditions.Delete
.FormatConditions.Add acFieldHasFocus
.FormatConditions(0).BackColor = getobj("descrizione",
"impostazione", "obj", "actbckcolor", "16777215")

End With
End Select
Next ctl

Questo invece funziona perfettamente.

Vorrei anche combinare le due cose insieme... posso? come?

In pratica vorrei un colore di sfondo quando il campo è attivo e delle
righe alternate per le righe sempre... ovviamente i colori sono
differenti.

La funzione getobj restituisce il codice del colore prendendolo da una
tabella di impostazioni che l'utente riempie a proprio piacere, (se
poi il campo è vuoto ci passo un defualt, che è il numero che vedete).
Ovvio che la stessa funzione è usata per reperire tutte le altre
impostazioni della applicazione.

Grazie.
Ganimede Dignan.

Ganimede

unread,
May 25, 2009, 6:49:19 AM5/25/09
to
Alessando... aiutami :-(

Grazie.

Karl Donaubauer

unread,
May 25, 2009, 3:03:57 PM5/25/09
to
Ganimede wrote:
> ...
> arc_frm � il form principale e arc_sub_frm � il subform (modalit�
> foglio dati), il codice che riporto � nell'evento caricamento del form

> principale:
>
> Dim ctl As Access.Control
> For Each ctl In Forms!arc_frm!arc_sub_frm.Controls
> Select Case ctl.ControlType
> Case acTextBox, acComboBox, acListBox
> With ctl
> .FormatConditions.Delete
> .FormatConditions.Add acExpression, , GetRecNum(Forms!
> arc_frm!arc_sub_frm.Form) Mod 2 <> 0
> .FormatConditions(0).BackColor = getobj("descrizione",
> "impostazione", "obj", "actbckcolor", "16777215")
> End With
> End Select
> Next ctl
> ...

Direi che il problema � GetRecNum(). --> Posta la funzione.
Suppongo che si tratta di una funzione che ti d� il numero del
record corrente quindi al caricamento sempre del primo record,
non di ogni record. Se � cos�, la formattazione dev'essere sempre
la stessa.

--
HTH

Ganimede

unread,
May 26, 2009, 2:40:15 PM5/26/09
to
Ciao,

> Direi che il problema è GetRecNum(). --> Posta la funzione.

è la solita preso dal sito di Alessandro:

Public Function GetRecNum(ByRef Frm As Form) As Long

On Error GoTo erh

With Frm.RecordsetClone
If Not ((.BOF = True) And (.EOF = True)) Then
.Bookmark = Frm.Bookmark
GetRecNum = .AbsolutePosition + 1
End If
End With

ext:
Exit Function

erh:
GetRecNum = 0
Resume ext

End Function

http://www.alessandrobaraldi.it/DettaglioFaq.asp?IdFAQ=81

> Suppongo che si tratta di una funzione che ti dà il numero del


> record corrente quindi al caricamento sempre del primo record,

> non di ogni record. Se è così, la formattazione dev'essere sempre
> la stessa.

Deve... nel senso che dovrei metterla in un altro evento?

Grazie.

Karl Donaubauer

unread,
May 26, 2009, 3:43:07 PM5/26/09
to
Ganimede wrote:
>> Direi che il problema � GetRecNum(). --> Posta la funzione.
>
> � la solita preso dal sito di Alessandro:

>
> Public Function GetRecNum(ByRef Frm As Form) As Long
>
> On Error GoTo erh
>
> With Frm.RecordsetClone
> If Not ((.BOF = True) And (.EOF = True)) Then
> .Bookmark = Frm.Bookmark
> GetRecNum = .AbsolutePosition + 1
> End If
> End With
>
> ext:
> Exit Function
>
> erh:
> GetRecNum = 0
> Resume ext
>
> End Function
>
> http://www.alessandrobaraldi.it/DettaglioFaq.asp?IdFAQ=81
>
>> Suppongo che si tratta di una funzione che ti d� il numero del

>> record corrente quindi al caricamento sempre del primo record,
>> non di ogni record. Se � cos�, la formattazione dev'essere sempre

>> la stessa.
>
> Deve... nel senso che dovrei metterla in un altro evento?

No, devi avere presente il numero in ogni record.
Creati una casella di testo (puoi impostare Visibile a No)
nella sezione detaglio della sottomaschera. Chiama la
casella "txtNr" e imposta l'Origine controllo a:

=GetRecNum(Forms!arc_frm!arc_sub_frm.Form)

Poi cambia la riga di codice con Add a:

FormatConditions.Add acExpression, , "txtNr Mod 2 <> 0"

Ganimede

unread,
May 30, 2009, 5:53:20 AM5/30/09
to
Ciao,

> No, devi avere presente il numero in ogni record.
> Creati una casella di testo (puoi impostare Visibile a No)
> nella sezione detaglio della sottomaschera. Chiama la
> casella "txtNr" e imposta l'Origine controllo a:
>
> =GetRecNum(Forms!arc_frm!arc_sub_frm.Form)
>
> Poi cambia la riga di codice con Add a:
>
>  FormatConditions.Add acExpression, , "txtNr Mod 2 <> 0"

Ottimo, ha funzionato alla grande, sei stato utilissimo.

Mi rimane una cosa ora... combinare le due formatcondition, così non
funziona:

Dim ctl As Access.Control
For Each ctl In Forms!arc_frm!arc_sub_frm.Controls
Select Case ctl.ControlType
Case acTextBox, acComboBox, acListBox
With ctl
.FormatConditions.Delete

.FormatConditions.Add acExpression, , "zeb Mod 2 <> 0"


.FormatConditions(0).BackColor = getobj("descrizione",

"impostazione", "obj", "colorzebrafrm", "16777215")
.FormatConditions.Add acFieldHasFocus
.FormatConditions(1).BackColor = getobj("descrizione",


"impostazione", "obj", "actbckcolor", "16777215")
End With
End Select
Next ctl

Cosa sbaglio?

Grazie.
Ganimede Dignan.

Karl Donaubauer

unread,
May 30, 2009, 6:24:04 AM5/30/09
to
Ganimede wrote:
> ...
> Mi rimane una cosa ora... combinare le due formatcondition, cos� non

> funziona:
>
> Dim ctl As Access.Control
> For Each ctl In Forms!arc_frm!arc_sub_frm.Controls
> Select Case ctl.ControlType
> Case acTextBox, acComboBox, acListBox
> With ctl
> .FormatConditions.Delete
> .FormatConditions.Add acExpression, , "zeb Mod 2 <> 0"
> .FormatConditions(0).BackColor = getobj("descrizione",
> "impostazione", "obj", "colorzebrafrm", "16777215")
> .FormatConditions.Add acFieldHasFocus
> .FormatConditions(1).BackColor = getobj("descrizione",
> "impostazione", "obj", "actbckcolor", "16777215")
> End With
> End Select
> Next ctl
>
> Cosa sbaglio?

Soprattutto che con "non funzione" dai la descrizione pi� popolare,
esatta e espressiva.

In caso che riceveresti l'errore 7968 per un tipo invalido della FC
(o simile in italiano), prova di cambiare l'ordine delle condizioni:
Prima (0) quella con acFieldHasFocus, dopo (1) quella con acExpression.

Ganimede

unread,
May 30, 2009, 9:54:03 AM5/30/09
to

> In caso che riceveresti l'errore 7968 per un tipo invalido della FC
> (o simile in italiano), prova di cambiare l'ordine delle condizioni:
> Prima (0) quella con acFieldHasFocus, dopo (1) quella con acExpression.

Funziona!!! Grazie 1000.

Un'ultima cosa... vorrei evitare di scrivere lo stesso codice per 20
form... per creare una function riutilizzabile dovrei passargli il
valore di form!sub_form, come posso fare ?

Grazie.

Dim ctl As Access.Control
For Each ctl In Forms!arc_frm!arc_sub_frm.Controls
Select Case ctl.ControlType
Case acTextBox, acComboBox, acListBox
With ctl
.FormatConditions.Delete

.FormatConditions.Add acFieldHasFocus


.FormatConditions(0).BackColor = getobj("descrizione",

"impostazione", "obj", "actbckcolor", "16777215")


.FormatConditions.Add acExpression, , "zeb Mod 2 <> 0"

.FormatConditions(1).BackColor = getobj("descrizione",

"impostazione", "obj", "colorzebrafrm", "16777215")

Karl Donaubauer

unread,
May 30, 2009, 1:27:16 PM5/30/09
to
Ganimede wrote:
> ...

> Un'ultima cosa... vorrei evitare di scrivere lo stesso codice per 20
> form... per creare una function riutilizzabile dovrei passargli il
> valore di form!sub_form, come posso fare ?
>
> Dim ctl As Access.Control
> For Each ctl In Forms!arc_frm!arc_sub_frm.Controls
> Select Case ctl.ControlType
> Case acTextBox, acComboBox, acListBox
> With ctl
> .FormatConditions.Delete
> .FormatConditions.Add acFieldHasFocus
> .FormatConditions(0).BackColor = getobj("descrizione",
> "impostazione", "obj", "actbckcolor", "16777215")
> .FormatConditions.Add acExpression, , "zeb Mod 2 <> 0"
> .FormatConditions(1).BackColor = getobj("descrizione",
> "impostazione", "obj", "colorzebrafrm", "16777215")
> End With
> End Select
> Next ctl

Se p.e. crei una procedura in un modulo standard:

Public Sub procFC (frm As Form)

Dim ctl As Access.Control
For Each ctl In frm.Controls
...

Che puoi chiamare con

procFC Forms!arc_frm!arc_sub_frm.Form

Ganimede

unread,
May 31, 2009, 7:42:55 AM5/31/09
to
Ciao

> Che puoi chiamare con
>
> procFC Forms!arc_frm!arc_sub_frm.Form

Grazie.

0 new messages