Ho una cartella di lavoro con diversi fogli, tutti uguli come impostazione, formati e formule, cambiano soltanto i dati.
In colonna C (da C13) riporto la lettura mensile dei contatori dell'acqua dei negozi;
in colonna D (range D13:D120) ho la seguente formula
- Codice: Seleziona tutto
=SE(E(C14<>"";C13<>"");C14-C13;"")
calcolo il consumo mensile;
in colonna E (range E13:E120) ho la seguente formula
- Codice: Seleziona tutto
=SE(C14<>"";SOMMA(D13:D14);"")
calcolo il consumo progressivo;
in colonna F (range F13:F120) ho la seguente formula
- Codice: Seleziona tutto
=SE(D14<>"";MEDIA(D13:D14);"")
calcolo la media;
in colonna G (range G13:G120) ho la seguente formula
- Codice: Seleziona tutto
=SE(E(D14<>"";D14>=50);"Invia e-mail";"")
calcola se il consumo è superiore ad un valore predefinito (50) e in caso affermativo scrive "Invia e-mail".
Il punto è questo, la macro che dovrebbe leggere se in colonna G è presente la dicitura "Invia e-mail" e trovandola, scatenare la Sub Send_active_sheet (già impostata e perfettamente funzionante!!) non funziona. In pratica se inserisco una nuova lettura in C che produce un consumo superiore a 50 in G appare la dicitura Invia e-mail e a questo punto dovrebbe partire l'e-mail... ma tutto ciò non avviene. Mi potreste aiutare a capire?
Di seguito riporto il codice, specificando che, dovendo funzionare su tutti i fogli presenti nella cartella, è stato scritto su Thisworkbook:
- Codice: Seleziona tutto
Option Explicit
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim rng As Range, Rng2 As Range, rCell As Range
Dim aRng As Range, aCell As Range
Dim LRow As Long
Const sStr As String = "Invia e-mail"
With Sh
LRow = .Cells(Rows.Count, "D").End(xlUp).Row
Set rng = Intersect(Target, .Range("D13:D" & LRow))
If Not rng Is Nothing Then
Set Rng2 = rng.Offset(0, 3)
End If
On Error GoTo 0
End With
If Not Rng2 Is Nothing Then
For Each rCell In rng.Cells
On Error Resume Next
With rCell
On Error Resume Next
Set aRng = Intersect(Rng2, .Dependents)
On Error GoTo 0
If Not aRng Is Nothing Then
For Each aCell In aRng.Cells
With aCell
If .Value = sStr Then
Call Send_Active_Sheet
On Error GoTo XIT
Application.EnableEvents = False
.Value = "e-mail inviato " & Now()
End If
End With
Next aCell
End If
End With
Next rCell
End If
XIT:
Application.EnableEvents = True
End Sub
Fiducioso di un vostro aiuto vi ringrazio anticipatamente!!!
fastbike73