lunedì 22 settembre 2014

Determinazione dell'appartenenza di una cella a un range: metodo Intersect.

Bene.
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