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 FunctionCome 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 Functionche 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