Modica di celle senza immissione
Hai un problema con Excel? 
Modica di celle senza immissione
di ottomila (utente non iscritto) data: 21/08/2013 20:37:29
Scusate, forse ho postato una discussione fuori posto. La riformulo qui.
Sono un appassionato del VBA ormai sugli...anta ma seguo con piacere il Vostro forum e mi congratulo per la Vostra professionalità da veri maestri. Il mio problema (non so se è mai stato proposto) è il seguente: avrei bisogno di far cambiare il risultato in una cella di Excel, agento sui valori di altre due tramite una Barra di scorrimento o Casella di selezione. In sostanza metto nella cella [B2] un numero (comandato dalla Barra di scorrimento) e in [B3] un altro. La cella [B8] è quella che deve cambiare al variare delle prime due. Ho provato con l'evento [Worksheet_Change] ma non funziona; praticamente questo evento agisce dopo aver immesso manualmente il dato nella o nelle celle interessate. Ho provato anche con l'evento [Worksheet_SelectionChange] ma funziona solo se clicco in una cella del foglio. In tutti e due i casi devo sempre agire manualmente sulle celle.
Avete qualche idea di come si potrebbe fare (a parte la Formattazione condizionale)?
Vi allego il codice di esempio per capire meglio.
Grazie e complimenti per il sito.
Sub Worksheet_Change(ByVal Target As Range)
Dim ris As String
Set Tsv = [B2]: Set Tirr = [B3]
If Tsv >= Tirr Then
sufficiente ris
Else
insufficiente ris
End If
Worksheets(1).[B8] = ris
End Sub
Sub sufficiente(ByRef ris As String)
ris = "SUFFICIENTE"
With Worksheets(1).[B8].Font
.ColorIndex = 1 'colore nero
.Bold = True 'Grassetto
With Worksheets(1).[B8].Interior
.ColorIndex = 4
End With
End With
End Sub
Sub insufficiente(ByRef ris As String)
ris = "INSUFFICIENTE"
With Worksheets(1).[B8].Font
.ColorIndex = 49 'colore
.Bold = True 'imposta il Grassetto
With Worksheets(1).[B8].Interior
.ColorIndex = 6
End With
End With
End Sub |
Modica di celle senza immissione
di ottomila (utente non iscritto) data: 21/08/2013 20:43:18
Dimenticavo: Vi ho mandato il file in questione e mi sono anche iscritto
Grazie ancora ed attendo un Vostro cortese riscontro.
di paolomath data: 22/08/2013 00:12:18
Ciao,
prova a vedere se così va bene (vedi allegato).
Bye
di Grograman data: 22/08/2013 08:59:57
Non essendo un grande amante dei controlli di modulo io propongo invece la versione con scrollbar di tipo Activex di cui allego codice a seguire
Private Sub ScrollBar1_Change()
Application.EnableEvents = 0
Dim Cella As Range
With Me
Set Cella = .Range("B8")
With Cella
.Offset(-6, 0) = Me.ScrollBar1.Value
If .Offset(-6, 0) >= .Offset(-5, 0) Then
.Value = "SUFFICIENTE"
.Interior.ColorIndex = 4
.Font.ColorIndex = 1
Else
.Value = "INSUFFICIENTE"
.Interior.ColorIndex = 6
.Font.ColorIndex = 49
End If
End With
Set Cella = Nothing
End With
Application.EnableEvents = 1
End Sub
|
di ottomila (utente non iscritto) data: 22/08/2013 09:36:19
Ciao ragazzi, inutile ripetere che siete dei veri professionisti del VBA Complimenti!
Pur inchinandomi alla vostra intelligenza, desidererei capire (se non chiedo troppo) da paolomath come lavora il codice modificato ed in particolare la "macro1" che hai inserito, da chi e come viene richiamata.
Ho verificato sia il codice di paolomath che quello di Grograman: sono due sistemi diversi di lavoro.
La differenza (secondo la mia modesta conoscenza) è che con la Barra di scorrimento dei moduli è più facile impostare i parametri ed i controlli sulle celle. Il codice proposto da Grograman è molto più semplice, ma include maggiori parametri di [Offset] delle celle, a rischio che se si spostano i valori nelle celle nel foglio di lavoro, si dovrebbe metter mano a più parametri del codice VBA.
Siete in ogni caso dei veri guru! Grazie
di paolomath data: 22/08/2013 10:03:47
Troppo buono
Solitamente cerco solo di adattare il codice inserito da in originale per capire dove può essere migliorato/cambiato.
Nel codice ho inserito la variabile Controllo per verificare se la modifica è effettuata dalla Scrollbar o da modifica della cella B3, altrimenti rischi di scatenare + Worksheet_Change.
La macro1 è assegnata alla Scrollbar (tasto destro -> Assegna macro)
@Grograman: il codice non lavora su modifica della cella B3.
di Grograman data: 22/08/2013 10:27:18
Private Sub ScrollBar1_Change()
Me.Range("B2") = Me.ScrollBar1.Value
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Call Me.Cicabum
End Sub
Sub Cicabum()
Application.EnableEvents = 0
Dim Cella As Range
With ActiveSheet
Set Cella = .Range("B8")
With Cella
'.Offset(-6, 0) = ActiveSheet.ScrollBar1.Value
If .Offset(-6, 0) >= .Offset(-5, 0) Then
.Value = "SUFFICIENTE"
.Interior.ColorIndex = 4
.Font.ColorIndex = 1
Else
.Value = "INSUFFICIENTE"
.Interior.ColorIndex = 6
.Font.ColorIndex = 49
End If
End With
Set Cella = Nothing
End With
Application.EnableEvents = 1
End Sub
|
Modica di celle senza immissione
di ottomila (utente non iscritto) data: 22/08/2013 11:35:07
Ciao Grograman, ho visto che hai modificato il codice VBA, ma io l'ho ancora di più accorciato: ho messo la sub "Cicabum" dentro il [Worksheet_Change]. Ho fatto male?
Bene, direi che avete risolto alla grande il... compito a casa...
A parte gli scherzi Vi ringrazio molto e ci sentiremo presto per un altro grattacapo.
Ciao ragazzi e buona giornata.
P.S. Ci sono moderatori della classe 1953?
di Grograman data: 22/08/2013 11:42:52
Eheh no hai fatto benissimo, io sono pigro e pur di non spostare il codice ho aggiunto solo il "call cicabum"
di filip (utente non iscritto) data: 22/08/2013 16:57:57
ahah perche' hai postato la tua richiesta sul post di mark?
di ottomila (utente non iscritto) data: 23/08/2013 10:13:37
Ciao filip, se ti riferisci a me ho sbagliato...stanza! Capita ai novellini
Ciao.
di Vecchio Frac data: 23/08/2013 11:38:03
cit. "P.S. Ci sono moderatori della classe 1953?"
---> Io sono nato nel 1968.
Vuoi Approfondire?