Una famiglia di software per fogli di calcolo Microsoft con strumenti per l'analisi, la creazione di grafici e la comunicazione dei dati.
Ciao Massimo,
https://1drv.ms/x/s!Ahjd5nHUaqHiiEXyCZVxMi52S3tk?e=1sjC6z ecco il link. praticamente io inserisco in corrispondenza di un lavoro e di una data il colore di una risorsa e vorrei che se in quella data la persona è già impegnata mi dia un alert.
Ti ricordo che i colori possono essere differenti per colore di riempimento, motivo ecolore del motivo
Penso che ci sia un problema intrinseco con il tuo approccio perché il cambiamento di colore (o motivo) di una cella non attiva un evento gestibile in Excel. Di conseguenza, non è possibile generare direttamente un avviso quando viene inserito o modificato un colore.
Suggerirei quindi un approccio diverso: invece di inserire un colore/motivo, inserisci un codice per ogni risorsa e crea un formato condizionale per ogni risorsa. Questo formato condizionale può inserire il colore/motivo desiderato e nascondere il codice imponendo un colore del carattere bianco.
In questo modo si possono ottenere gli avvisi richiesti come segue:
- Fai clic dx sulla linguetta del foglio Program
- Seleziona l'opzione Visualizza Codice dal **** menu contestuale risultante
- Incolla il seguente codice:
'========>>
Option Explicit
'-------->>
Private Sub Worksheet_Change(ByVal Target As Range)
Dim RngLavori As Range, Rng As Range, Rng2 As Range
Const sRighe\_Lavori\_In\_Corso As String = "5:55"
Set RngLavori = Me.Range(sRighe\_Lavori\_In\_Corso)
Set Rng = Intersect(RngLavori, Target)
If Not Rng Is Nothing Then
Set Rng2 = Intersect(RngLavori, Target.EntireColumn)
If Application.CountIf(Rng2, Target.Value) > 1 Then
Call MsgBox(Prompt:="Attenzione ! La persona è già impegnata!", \_
Buttons:=vbCritical, \_
Title:="PROBLEMA")
Target.Select
End If
End If
End Sub
'<<========
Per quanto riguarda la tua funzione cellsetting, forse potresti provare la seguente versione modificata:
'-------->>
Public Function CellSetting(InRange As Range, CellRange As Range) As Long
Dim cl As Range
Dim TempCount As Long, ColorIndex As Long, pattern As Long, PatternColorIndex As Long
With CellRange.Cells(1).Interior
ColorIndex = .ColorIndex
pattern = .pattern
PatternColorIndex = .PatternColorIndex
End With
For Each cl In InRange.Cells
With cl.Interior
If .ColorIndex = ColorIndex \_
And .pattern = pattern \_
And .pattern <> xlPatternAutomatic \_
And .pattern <> xlPatternNone \_
And .PatternColorIndex = PatternColorIndex Then
TempCount = TempCount + 1
End If
End With
Next cl
CellSetting = TempCount
End Function
'<<========
===
Regards,
Norman