› Sviluppare funzionalita su Microsoft Office con VBA › ALLARME DATA SCADUTA CON MACRO
-
AutoreArticoli
-
Buongiorno a tutti,
ho una tabella Excel dove all'interno ci sono delle date di scadenza (colonne: H e J), io vorrei che la macro mi confrontasse le date presenti nelle colonne con la data odierna collocata nella cella N4 e ad ogni apertura del file mi segnalasse tramite text box se la data di scadenza è => alla data odierna, ed inoltre un tasto per interrompere l'allert ed un'altro per riattivare la macro, in allegato il file di esempio.
Grazie per il Vs,. prezioso aiuto.
Allegati:
You must be logged in to view attached files.Lo scopo del forum è insegnare a fare e non fare per altri, allega un xlsm con i tuoi tentativi di risoluzione e verrai aiutato
Hai ragione Patel, mi spiego meglio vorrei trasferire la routine anche alla colonna con range di celle: (J26:J42) con rispettivi msg box e colorando le celle con la data scaduta con sfondo rosso.
Public Sub Data() Dim sh As Worksheet Dim rng As Range Dim c As Range Dim d As Range Set sh = ThisWorkbook.Worksheets("Controllo") With sh Set rng = .Range("J5:J21") For Each c In rng If Date - CDate(c.Value) = 0 Then MsgBox c.Offset(0, -1).Value & "-" & " Attenzione Controllo Scaduto!" End If Set c = Nothing Next End With Set sh = Nothing Set rng = Nothing End SubAllegati:
You must be logged in to view attached files.Buonasera Alfredo,
mi indichi l'istruzione che contestualmente al msg box mi indica la cella? basta magari che si posiziona sopra.
Ciao
Prova a modificare il codice in questo modo
`'.... With sh Set rng = .Range("J5:J21,J26:J42") For Each c In rng If Date - CDate(c.Value) = 0 Then MsgBox c.Offset(0, -1).Value & "-" & " Attenzione Controllo Scaduto!" & vbLf & "cella " & c.Address End If Set c = Nothing Next End With '....`Ciao,
Mario
Buongiorno Mario,
come faccio ad impostare manualmente il numero di giorni prima della scadenza; potrei utilizzare una cella di riferimento in cui scrivo a quanti giorni prima voglio essere avvertito? ed inoltre, Mario, se in una cella non è presente una data mi va in loop 🙁
Grazie.
Massimiliano
Ciao Max (non ti offendi, vero! Così è molto più breve
)Mi sono attenuto al codice pubblicato dove non c'è alcun riferimento all'inserimento di un numero di giorni nè se la cella della data fosse vuota.
Per controllare se la cella è vuota può inserire una condizione subito dopo l'inizio del ciclo For Each
per es. If c = "" then .... e metti quello che vorresti facesse in questo caso
Per il numero di giorni puoi fare come da te proposto.
Ciao,
Mario
Buonasera Mario,
Puoi tranquillamente chiamarmi Max, avrei bisogno del tuoi aiuto per capire quale istruzione utilizzare per usare una cella in cui inserire il numero di giorni da io deve partire il mio allert ( inserisco il valore 3 - il messaggio mi apparirà 3 giorni prima della scadenza.
Grazie.
Buonasera Mario,
Puoi tranquillamente chiamarmi Max, avrei bisogno del tuo aiuto per capire quale istruzione utilizzare per usare una cella in cui inserire il numero di giorni da cui deve partire il mio allert ( inserisco il valore 3 - il messaggio mi apparirà 3 giorni prima della scadenza.
Grazie.
SE ho capito:
Public Sub Data() Dim sh As Worksheet Dim rng As Range Dim c As Range Dim d As Range Set sh = ThisWorkbook.Worksheets("Controllo") With sh Set rng = .Range("J5:J21,J26:J42") For Each c In rng giorni = DateDiff("d", sh.Range("k4"), c) 'differenza giorni tra le date(sh.Range("k4") 'contiene la data da confrontare If giorni > 3 Then 'se è maggiore di 3 c.Interior.ColorIndex = 3 ' colora la cella di rosso MsgBox c.Offset(0, -1).Value & "-" & " Attenzione Controllo Scaduto! fra giorni " & giorni End If Set c = Nothing Next End With Set sh = Nothing Set rng = Nothing End Subprova cosi
Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
Sempre il mare, uomo libero, amerai!
( Charles Baudelaire )Ciao
Scegli una cella vuota (io ho scelto L2) ed inserisci il numero di giorni che vuoi. Poi modifica la tua macro così
Public Sub Data() Dim sh As Worksheet Dim rng As Range Dim c As Range Dim d As Range Dim gg as Integer Set sh = ThisWorkbook.Worksheets("Controllo") gg = Cells(2, 12).Value With sh Set rng = .Range("J5:J21") For Each c In rng If c.Value <> "" Then If Date + gg >= CDate(c.Value) Then MsgBox c.Offset(0, -1).Value & "-" & " Attenzione Controllo Scaduto!" & vbLf & "cella " & c.Address End If End If Set c = Nothing Next End With Set sh = Nothing Set rng = Nothing End SubPer avere un immediato riscontro nella cella L2 inserisci 5 e modifica la data in J5 come 8-dic-21 (modifica anche la formattazione della cella per una migliore visibilità)
Fai sapere. Ciao,
Mario
Buonasera a Karma e Mario,
che ringrazio per il loro prezioso aiuto, nelle due soluzioni, ho trovato quello di Mario più intuitiva ( quella di Karma mi da un errore sul messaggio nella parte del calcolo dei giorni; praticamente credo che mi conti le date future 🙂
Comunque ho fatto una sorta di fusion dei due codici.
Max
Public Sub Data() Dim sh As Worksheet Dim rng As Range Dim c As Range Dim d As Range Dim gg As Integer Set sh = ThisWorkbook.Worksheets("Controllo") gg = Cells(2, 12).Value With sh Set rng = .Range("J5:J21,J26:J42") For Each c In rng If c.Value <> "" Then If Date + gg >= CDate(c.Value) Then If giorni = gg Then 'se è maggiore di 3 c.Interior.ColorIndex = 3 ' colora la cella di rosso MsgBox " Attenzione Controllo Scaduto!" & vbLf & "cella " & c.Address End If End If End If Set c = Nothing Next End With Set sh = Nothing Set rng = Nothing End Sub -
AutoreArticoli
