Stellar Blade Un'esclusiva PS5 che sta facendo discutere per l'eccessiva bellezza della protagonista. Vieni a parlarne su Award & Oscar!

Excel Forum Per condividere esperienze su Microsoft Excel

Codici VBA e avvisi pop up

  • Messaggi
  • OFFLINE
    Giu Pe
    Post: 1
    Registrato il: 19/04/2021
    Età: 38
    Utente Junior
    2019
    00 19/04/2021 22:31
    Salve, sono nuovo del forum e soprattutto sono novello nell'uso VBA
    Spiego il mio problema: ho un file con più fogli di lavoro, alcuni di questi fogli contengono date. Mi serve che se sono presenti date di oggi, arrivi un avviso. Ora, sono riuscito a costruire un codice per un foglio e funziona.
    Il problema ora è che mi serve lo stesso meccanismo anche per un altro foglio dello stesso file: cioè che arrivi un avviso (con contenuto messaggio diverso) anche se in questo secondo foglio sono presenti date di oggi.

    Non so come si possano "unire" le due cose
    Help

    Posto i due codici "gemelli" che ho fatto
  • OFFLINE
    Giu Pe
    Post: 4
    Registrato il: 19/04/2021
    Età: 38
    Utente Junior
    2019
    00 19/04/2021 22:37
    Private Sub Workbook_Open()
    Dim rg As Range
    Dim c As Range
    Dim ur As Integer
    Dim uc As Integer
    Dim nomefoglio As String
    Dim trov As Boolean
    
    nomefoglio = ActiveSheet.Name
    Application.ScreenUpdating = False
    Sheets("SCADENZE").Activate
    ur = Sheets("SCADENZE").Range("D65000").End(xlUp).Row
    uc = Sheets("SCADENZE").Cells(11, Columns.Count).End(xlToLeft).Column
    Set rg = Sheets("scadenze").Range(Cells(11, 7), Cells(ur, uc))
    trov = False
    For Each c In rg
        If IsDate(c) Then
            If c = Date Then
                trov = True
                Exit For
            End If
        End If
    Next
    If trov = True Then
        Sheets(nomefoglio).Select
        MsgBox "Ci sono contratti in scadenza"
    End If
    Application.ScreenUpdating = True
    End Sub
    [Modificato da by sal 20/04/2021 07:45]
  • OFFLINE
    Giu Pe
    Post: 5
    Registrato il: 19/04/2021
    Età: 38
    Utente Junior
    2019
    00 19/04/2021 22:38
    Private Sub Workbook_Open()
    Dim rg As Range
    Dim c As Range
    Dim ur As Integer
    Dim uc As Integer
    Dim nomefoglio As String
    Dim trov As Boolean
    
    nomefoglio = ActiveSheet.Name
    Application.ScreenUpdating = False
    Sheets("COLLOQUI").Activate
    ur = Sheets("COLLOQUI").Range("D65000").End(xlUp).Row
    uc = Sheets("COLLOQUI").Cells(11, Columns.Count).End(xlToLeft).Column
    Set rg = Sheets("COLLLOQUI").Range(Cells(11, 7), Cells(ur, uc))
    trov = False
    For Each c In rg
        If IsDate(c) Then
            If c = Date Then
                trov = True
                Exit For
            End If
        End If
    Next
    If trov = True Then
        Sheets(nomefoglio).Select
        MsgBox "Ci sono COLLOQUI DA FARE"
    End If
    Application.ScreenUpdating = True
    End Sub
    [Modificato da by sal 20/04/2021 07:46]
  • OFFLINE
    tanimon
    Post: 1.382
    Registrato il: 27/06/2011
    Utente Veteran
    excel 2007
    00 20/04/2021 10:38
    ciao Giu,
    non hai allegato un file di esempio ed a colpo d'occhio i codici mi sembrano corretti a parte quello del foglio COLLOQUI
    (vedi nota di seguito) e qualche istruzione superflua, quindi dovrai fare tu le modifiche necessarie [SM=g27811]


    usa Option Explicit in testa all'evento Workbook_Open, per evitare proprio quel tipo di errore

    duplica le variabili per ogni foglio che dovrai processare:
    esempio
    dim rg ' per il foglio COLLOQUI (ricorda che si scrive con solo 2 "L")
    dim rg1 ' per il foglio SCADENZE
    dim rg2... dim rg3... e così via per OGNI variabile e per OGNI foglio

    nell'evento Workbook_Open ed uno dopo l'altro,
    crea un ciclo For Each per ogni foglio, facendo attenzione ad imputare le sue variabili corrette e relativo messaggio

    ciao
    Frank
    [Modificato da tanimon 20/04/2021 11:05]







    Stretta la foglia, larga la via, dite la vostra che ho detto la mia.
    Excel 2007 forse anche 2013 ... 2021 ... 365 e future...
  • OFFLINE
    Giu Pe
    Post: 6
    Registrato il: 19/04/2021
    Età: 38
    Utente Junior
    2019
    00 23/04/2021 22:21
    Anzitutto grazie per la risposta
    Purtroppo sono alle prime armi di VBA quindi non ho ben compreso il da farsi...ho provato con la duplicazione delle variabili ma ho fatto un disastro
    Non sono capace di andare oltre [SM=g27819]
    Singolarmente riesco a farle funzionare ma nel metterle insieme mi esce fuori un disastro

    Posto un file esempio
  • OFFLINE
    tanimon
    Post: 1.386
    Registrato il: 27/06/2011
    Utente Veteran
    excel 2007
    10 23/04/2021 22:49
    Re:
    Giu Pe (vPLv210419), 19/04/2021 22:31:

    Salve, sono nuovo del forum e soprattutto sono novello nell'uso VBA


    Posto i due codici "gemelli" che ho fatto






    sicuro di averli fatti tu?

    a me sembra ti siano stati passati da
    https://www.forumexcel.it/forum/threads/avviso-pop-up-alla-data-specifica.48206/

    in effetti erano un pò "elaborati" per essere fatti da un "novello nell'uso di vba"


    Saluti.
    Frank







    Stretta la foglia, larga la via, dite la vostra che ho detto la mia.
    Excel 2007 forse anche 2013 ... 2021 ... 365 e future...
  • ABCDEF@Excel
    10 23/04/2021 23:50
    In base a questo allegato, valido solo se le date sono in formatto GG/MM/AAAA e non gg/mese
    Cancella quella scritta e metti questa
    Option Explicit
    Private Sub Workbook_Open()
    Dim Ur As Long, r As Object, rig As Long
    Ur = Sheets("colloqui").Range("A" & Rows.Count).End(xlUp).Row
    Sheets("colloqui").Columns("a:a").AutoFit
    Set r = Sheets("colloqui").Range("A1:A" & Ur).Find(Date, LookIn:=xlValues, LookAt:=xlWhole)
        If Not r Is Nothing Then
            rig = r.Row
            Sheets("colloqui").Activate
            Cells(rig, 1).Activate
            MsgBox "Ci sono COLLOQUI DA FARE, in riga " & rig
        End If
    Ur = Sheets("Scadenze").Range("A" & Rows.Count).End(xlUp).Row
    Sheets("Scadenze").Columns("a:a").AutoFit
    Set r = Sheets("Scadenze").Range("A1:A" & Ur).Find(Date, LookIn:=xlValues, LookAt:=xlWhole)
        If Not r Is Nothing Then
            rig = r.Row
            Sheets("Scadenze").Activate
            Cells(rig, 1).Activate
            MsgBox "Ci sono contratti in scadenza, in riga " & rig
        End If
    Set r = Nothing
    End Sub
    
  • OFFLINE
    Giu Pe
    Post: 7
    Registrato il: 19/04/2021
    Età: 38
    Utente Junior
    2019
    00 24/04/2021 21:25
    Re: Ti ringrazio
    ABCDEF@Excel, 23/04/2021 23:50:

    In base a questo allegato, valido solo se le date sono in formatto GG/MM/AAAA e non gg/mese
    [Modificato da Giu Pe 24/04/2021 21:26]
  • OFFLINE
    ciuffo..
    Post: 1
    Registrato il: 04/05/2010
    Città: NOVELLARA
    Età: 57
    Utente Junior
    2016
    00 01/05/2021 15:43
    Info su file
    Scusate se mi intrufolo in questo post ma questo file mi potrebbe essere utile però avrei bisogno di visualizzare invece che solo una riga in scadenza tutte le righe scadute o antecedenti alla data attuale ho provato a are delle modifiche ma non mi raccapezzo
    grazie in anticipo a chi mi aiuterà
  • ABCDEF@Excel
    00 03/05/2021 10:21
    Suggerisco di aprire un nuovo Post e di spiegare bene quello che desideri.

    Ps. Ripensando al post precedente (in base alle informazioni fornite), mi sono chiesto cosa serve il VBA?
    Non sarebbe meglio usare una FC per colorare le date nelle celle...???
    [Modificato da ABCDEF@Excel 03/05/2021 10:22]
  • 15MediaObject5,00210 2