PDA

View Full Version : Problema Access e VBA....


akyra
03-03-2005, 10:05
ciao a tutti! sto facendo un programmino per la gstione di un database con Access 2003 e avrei bisogno di fare una cosettina simpatica.
avrei la necessità di scorrere i record presenti sotto una maschera e colorare una casella di testo (corrispondente al campo di un record) di un certo colore se una certa condizione è soddisfatta...

ho scritto un po' di righe in visual basic di questro tipo:


Private Sub Form_Open(Cancel As Integer)
Dim numRecord As Long

DoCmd.Maximize
numRecord = Me.Recordset.RecordCount
If numRecord > 0 Then

Me.Recordset.MoveLast
Do
Me![FatturatoMensAttaule].ForeColor = 0
If Me![FatturatoMensAttaule] < Me![FatturatoMensPrec] Then
Me![FatturatoMensAttaule].ForeColor = 255
End If

numRecord = numRecord - 1
Me.Recordset.MovePrevious
Loop While numRecord > 0
Else
MsgBox "Periodo Inesistente", vbInformation, "Attenzione"

End If


End Sub


come si può ben capire quello che fa questo codice non è altro che posizionarsi sull'ultimo record della maschera in questione, controllare se il valore di un certo campo del record ([FatturatoMensAttaule]) è minore di un altro campo ([FatturatoMensPrec]) e impostare il primo campo al colore 255 (rosso) se tale condizione è soddisfatta. Il loop prosegue finchè si non si finisco i record della maschera.

Il problema è che questo codice non colora di rosso solo i campi dei record che soddisfano quella condizione. Infatti esso colora i campi di tutti i record non appena ne trova anche solo uno che soddisfa la condizione...in poche parole mi colora tutti i record di rosso presenti nel corpo della maschera, non appena trova un record che soddisfa la condizione.

Avrei quendi bisogno di modificare il codice in modo tale che mi colori di rosso solo i campi di ciascun record che soddisfano la condizione.
Ringrazio preventivamente tutti quelli che collaboreranno alla discussione.

Brigante
03-03-2005, 10:38
La proprità Forecolor la devi associare alla TextBox o Label che viene utilizzata per visualizzare il dato del campo, non al campo stesso.

daryl74
03-03-2005, 11:05
La maschera è in visualizzazione continua o singolo record ?

Se visualizzi un record per volta non ha molto senso passare tutti i record e colorare lo sfondo del campo che ti interessa. Tanto più che se non salvi il parametro del colore di tutti i record in un campo nascosto in tutti i record il colore sarà uguale all'ultimo impostato.

Prova invece a mettere un funzione su "record corrente" che ti colora il campo a seconda del valore. In questo modo quando cambi record viene eseguita quella macro che ti colora lo sfondo ,in più sarà corretta per ogni record e dipendente dal paramentro "FatturatoMensAttaule" (e non uguale all'ultimo impostato).

Spero possa esserti utilie

Ciao

DaryL74

akyra
03-03-2005, 16:57
Originariamente inviato da daryl74
La maschera è in visualizzazione continua o singolo record ?

Se visualizzi un record per volta non ha molto senso passare tutti i record e colorare lo sfondo del campo che ti interessa. Tanto più che se non salvi il parametro del colore di tutti i record in un campo nascosto in tutti i record il colore sarà uguale all'ultimo impostato.

Prova invece a mettere un funzione su "record corrente" che ti colora il campo a seconda del valore. In questo modo quando cambi record viene eseguita quella macro che ti colora lo sfondo ,in più sarà corretta per ogni record e dipendente dal paramentro "FatturatoMensAttaule" (e non uguale all'ultimo impostato).

Spero possa esserti utilie

Ciao

DaryL74
la maschera è in visualizzazione "maschere continue" . soltanto che non riesco ad individuare l'evento "su record corrente"...nelle maschere di access 2003 non c'è...

daryl74
03-03-2005, 17:19
In questo caso la soluzione che ti ho proposto non funziona.

Guarda su www.sitocomune.com (http://www.sitocomune.com)
Scegli dal menu laterale "forms" e nell'elenco del frame di destra cerca:
"3.57 Evidenziare records specifici nelle maschere continue"
"3.26 Formattazione Condizionale nelle maschere continue."
"3.25 Evidenziare specifiche righe in Maschere Continue."
"3.10 In modalità maschere continue è possibile visualizzare un controllo colorato diversamente a seconda del suo contenuto? (2)"...

sono soluzioni per Access 97 o 2000 ma dovresti poterle adattare...

Ciao

akyra
05-03-2005, 02:07
Originariamente inviato da daryl74
In questo caso la soluzione che ti ho proposto non funziona.

Guarda su www.sitocomune.com (http://www.sitocomune.com)
Scegli dal menu laterale "forms" e nell'elenco del frame di destra cerca:
"3.57 Evidenziare records specifici nelle maschere continue"
"3.26 Formattazione Condizionale nelle maschere continue."
"3.25 Evidenziare specifiche righe in Maschere Continue."
"3.10 In modalità maschere continue è possibile visualizzare un controllo colorato diversamente a seconda del suo contenuto? (2)"...

sono soluzioni per Access 97 o 2000 ma dovresti poterle adattare...

Ciao
penso che ci siamo, domani provo la prima soluzione proposta tra le ricerche che mi hai consigliato e poi ti faccio sapere...grazie!