Una famiglia di software per fogli di calcolo Microsoft con strumenti per l'analisi, la creazione di grafici e la comunicazione dei dati.
Ciao Vladimiro,
ok, ho capito.
Entrando nel merito della tua demo e della ComboBox, ed eseguendo in progressione le seguenti scelte di numeri ottengo il seguente risultato:
Scelgo il n.4 e lampeggia.
Scelgo il n.5, pur restando lo sfondo rosso, non lampeggia più, mentre, se scelgo ad esempio il n.10 e poi ritorno sul n.5 allora comincia a lampeggiare.
Scelgo il n.6 e lampeggia.
Scelgo il n.7, pur restando lo sfondo verde, non lampeggia più, mentre, se scelgo ad esempio il n.2 e poi ritorno sul n.7 allora comincia a lampeggiare.
In definitiva ho capito che solo ritornando sullo sfondo grigio, delle volte anche per due volte consecutive, oppure alternando i numeri da cui si ottengono i due colori di sfondo, riesco ad ottenere poi la cella lampeggiante sia nel rosso che nel verde.
A questo punto credo che solo tu puoi riuscire a capirne il motivo.
Se poi non si riesce a fare nulla, pazienza... già è tanto per me quello che sei riuscito ad ottenere.
Credo che il tuo problema sia legato ad un problema di temporizzazione: quando si verifica un problema, il codice viene avviato prima che l'operazione precedente sia terminata.
Pertanto, prova qualcosa del genere:
Nel modulo di codice del foglio di interesse, sostituisci il codice con la seguente versione:
'========>>
Option Explicit
'-------->>
Private Sub ComboBox1_Change()
Const sDestRng As String = "C7:F7"
Set destRng = Me.Range(sDestRng)
Me.ComboBox1.LinkedCell = "C3"
Select Case Me.ComboBox1.Value
Case Is <= 3
destRng.Interior.Color = 14277081
myColor = 14277081
Exit Sub
Case Is >= 6
destRng.Interior.Color = 5287936
myColor = 5287936
Case Else
destRng.Interior.Color = 255
myColor = 255
End Select
With ActiveSheet.ComboBox1
.Enabled = False
.Visible = False
End With
Call StartIt
End Sub
'<<========
Nel modulo di codice standard,, sostituisci il codice esistenti con:
'=========>>
Option Explicit
Public RunWhen As Double
Public RunWhen2 As Double
Public Const cRunIntervalSeconds = 1
Public Const cRunWhat = "Blink"
Public Const cRunWhat2 = "StopIt"
Public Const dColor As Double = 255
Public Const dColor2 As Double = 5287936
Public Const sFormula As String = "=AND($F$3>3,$F$3<6)"
Public Const sFormula2 As String = "=$F$3>=6"
Public srcRng As Range
Public destRng As Range
Public myColor As Double
Public theColor As Double
'--------->>
Public Sub Blink()
destRng.Interior.Color = theColor
Call StartIt
End Sub
'--------->>
Public Sub StartIt()
With ActiveSheet.ComboBox1
.Enabled = False
.Visible = False
End With
theColor = IIf(theColor = myColor, -4142, myColor)
RunWhen = Now + TimeSerial(0, 0, 1)
RunWhen2 = Now + TimeSerial(0, 0, 6)
On Error Resume Next
Application.OnTime EarliestTime:=RunWhen, _
Procedure:=cRunWhat, _
Schedule:=True
Application.OnTime EarliestTime:=RunWhen2, _
Procedure:=cRunWhat2, _
Schedule:=True
On Error GoTo 0
End Sub
'--------->>
Public Sub StopIt()
On Error Resume Next
Application.OnTime EarliestTime:=RunWhen, _
Procedure:=cRunWhat, _
Schedule:=False
Application.OnTime EarliestTime:=RunWhen2, _
Procedure:=cRunWhat2, _
Schedule:=False
Call SetColor
destRng.Interior.Color = myColor
On Error Resume Next
Application.OnTime EarliestTime:=Now + TimeSerial(0, 0, 3), _
Procedure:="ShowCombo", _
Schedule:=True
End Sub
'-------->>
Public Sub ShowCombo()
With ActiveSheet.ComboBox1
.Enabled = True
.Visible = True
End With
End Sub
'-------->>
Public Sub SetColor()
Select Case srcRng.Value
Case Is <= 3
destRng.Interior.Color = 14277081
Case Is >= 6
destRng.Interior.Color = 5287936
Case Else
destRng.Interior.Color = 255
End Select
On Error Resume Next
Application.OnTime EarliestTime:=RunWhen, _
Procedure:=cRunWhat, _
Schedule:=False
End Sub
'-------->>
Public Sub LinkIt()
Dim SH As Worksheet
Dim oleObj As OLEObject
Const sFoglio As String = "Foglio1"
Set SH = ThisWorkbook.Sheets(sFoglio)
Set oleObj = SH.OLEObjects("ComboBox1")
oleObj.LinkedCell = "C3"
End Sub
'<<========
Potresti scaricare il mio file di prova Vladimiro20201002.xlsm
===
Regards,
Norman