Ora passiamo ai menu, dopo la lunga digressione.
Avevo visto che il far comparire o meno un menu dipende dalla funzione campoConMenu
'Al servizio della precedente: identifica se un campo debba dare origine a un menu
Function campoConMenu(campo As Range) As Boolean
Dim valore As String 'determina il valore che c'è nella prima cella della fila
valore = Cells(campo.Row, 1).FormulaR1C1
If campo.Row > 3 And campo.Row < 35 Then
If campo.Column = 4 And valore <> "" Then campoConMenu = True
On Error Resume Next
If campo.Column = 2 And festivo(valore) Then campoConMenu = True
End If
End Function
Come la si può modificare in relazione alle denominazioni di campi che abbiamo fatto?E qui mi serve il modo di determinare se una cella appartiene a un range o no.
Trovo la funzione Match...
La devo studiare.
Eccola! Intersect
La sintassi è
Intersect(range, range)che restituisce un range, che sarebbe il range di intersezione fra i due ranges.
In caso di non intersezione restituisce Nothing.
E quindi io ci scrivo, per determinare se una cella cliccata appartiene a un range, questa funzione:
Function CellaDiRange(cella As Range, campo As Range) As Boolean
If Intersect(cella, campo) Is Nothing = False Then CellaDiRange = True
End Function
che funziona perfettamente! L'ho testata così:
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
If IsDate(Sh.Name) = False Then Exit Sub
Cancel = True
MsgBox CellaDiRange(Target, Range("TurnoNotte"))
Exit Sub
If campoConMenu(Target) Then
Set Bersaglio = Target
showMenu
End If
End Sub
(l'Exit Sub, che uso spesso per testare, interrompe il flusso del programma al punto che mi interessa senza rischiare di confondermi le idee con quello che viene dopo).
Nessun commento:
Posta un commento