Bloccare msg box



  • Bloccare msg box
    di tommy270881 data: 02/05/2015 19:03:37

    Buona sera a tutti ringrazio anticipatamente chi leggerà il mio post.
    Ho inserito il seguente codice di Vba.
    Sostanzialmente al verificarsi della condizione nella cella D26 l'utente dovrebbe essere avvisato.
    Tuttavia qualcosa non funzione. Non so come interrompere il messaggio. Vorrei che questo apparisse una sola volta e non ripetutamente ogni volta che si clicca in una cella diversa.
    Sicuramente il codice dovrebbe essere modificato con qualche ulteriore evento. Ma non ho proprio idea di dove mettere mano.
    Inoltre la cartella di lavoro si compone di quasi 50 fogli. Se la condizione si verifica nella medesima cella nel foglio 2 la macro è valida o deve essere denominata come public?
    Grazie ancora.
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Range("D26") = "" Then Exit Sub
    If Range("D26") = "1 - Spese di trasporto erroneamente addebitate." Then
    Exit Sub
    Else
    MsgBox "ciao"
    End If
    
    End Sub



  • di Textomb data: 02/05/2015 20:15:32

    la routine che hai inserito non è molto chiara. Non si capisce bene cosa vorresti ottenere.
    L'evento selectionChange si verifica ogni volta che sul foglio di lavoro avviene un evento. Quindi ogni volta che selezioni una cella si scatena l'evento.
    Dovresti esprimere meglio qual obiettivo vuoi raggiungere. Magari allega il tuo file senza dati sensibili in modo che possiamo darti una mano.



  • di tommy270881 data: 03/05/2015 12:36:17

    Provvedo ad allegare il file. Premetto che è ancora in costruzione. Sto cercando di farmi le ossa con alcuni dei codici che sono riportati nel moduli del Vba.
    La Macro oggetto del post è stata inserita all'interno del foglio 2(1).
    Tradotta la macro dovrebbe operare nel modo seguente:
    - Ha riferimento la selezione D26:D35 in cui è stata inserita la convalida dati.
    - Alla selezione di ciascuna delle possibilità offerte all'utente dovrebbe poi comparire un messaggio descrittivo sotto forma di MsgBox. Ho tanti messaggi descrittivi quante sono le opzioni (quindi 11)
    - Una volta chiusa la finestra del MsgBox questa non dovrebbe più essere visualizzata (salvo il caso in cui venga successivamente modificata la scelta sulla stessa cella). Nel mio caso il MsgBox è visualizzato ogni volta che clicco su una cella.
    C'e poi una seconda macro che dovrebbe attivarsi sempre sulla stessa selezione. Riporto anche questa.
    Sostanzialmente l'effetto voluto è il seguente.
    - Se nella selezione D26:D35 spunto la casistica 5 allora devono essere scoperte le righe dalla 39 alla 42 altrimenti nulla.
    Grazie ancora tante.


     
    Sub pro()
        If Range("D26") = "5 - Mancato riconoscimento dello sconto commerciale per particolari promozioni" Then
            Rows("39:42").EntireRow.Hidden = False
        Else
            Rows("39:42").EntireRow.Hidden = True
        End If
    End Sub



  • di Textomb data: 04/05/2015 12:26:53

    Il ragionamento che esponi, sempre se ho ben capito, potrebbe essere esitato inserendo nel foglio 1 l'evento Worksheet_Change.
    Ovviamente va eliminato quello che attualmente è sotto l'evento Worksheet_SelectionChange...
    Per cui potresti scrivere una cosa del genere:
     
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Not Intersect(Range("d26:d32"), Target) Is Nothing Then
            MsgBox (Target.Value)
        End If
        
        If Target.Value = "5 - Mancato riconoscimento dello sconto commerciale per particolari promozioni" Then
            Rows("39:42").EntireRow.Hidden = False
        Else
            Rows("39:42").EntireRow.Hidden = True
        End If
    
    End Sub



  • di tommy270881 data: 07/05/2015 18:26:34

    Ti ringrazio per la risposta cortese.
    Ho risolto con il codice riportato nel modulo sottostante utilizzando l'operatore or per nascondere o visualizzare le righe di mio interesse.
    Sicuramente è molto grossolano ma funziona :).
    Grazie ancora tante.
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    ' Condizioni per la la cella D26
    'Inserisce la funzione se al verificarsi della condizione 5
        If Range("D26") = "5 - Sconto commerciale per particolari promozioni." _
        Or Range("D27") = "5 - Sconto commerciale per particolari promozioni." _
        Or Range("D28") = "5 - Sconto commerciale per particolari promozioni." _
        Or Range("D29") = "5 - Sconto commerciale per particolari promozioni." _
        Or Range("D30") = "5 - Sconto commerciale per particolari promozioni." _
        Or Range("D31") = "5 - Sconto commerciale per particolari promozioni." _
        Or Range("D32") = "5 - Sconto commerciale per particolari promozioni." _
        Or Range("D33") = "5 - Sconto commerciale per particolari promozioni." _
        Or Range("D34") = "5 - Sconto commerciale per particolari promozioni." _
        Or Range("D35") = "5 - Sconto commerciale per particolari promozioni." _
        Then
            Rows("39:42").EntireRow.Hidden = False
        Else
            Rows("39:42").EntireRow.Hidden = True
        End If
    ' Inserisce la funzione se al verificarsi della condizione 6
        If Range("D26") = "6 - Reso su vendite per merce danneggiata." _
        Or Range("D27") = "6 - Reso su vendite per merce danneggiata." _
        Or Range("D28") = "6 - Reso su vendite per merce danneggiata." _
        Or Range("D29") = "6 - Reso su vendite per merce danneggiata." _
        Or Range("D30") = "6 - Reso su vendite per merce danneggiata." _
        Or Range("D31") = "6 - Reso su vendite per merce danneggiata." _
        Or Range("D32") = "6 - Reso su vendite per merce danneggiata." _
        Or Range("D33") = "6 - Reso su vendite per merce danneggiata." _
        Or Range("D34") = "6 - Reso su vendite per merce danneggiata." _
        Or Range("D35") = "6 - Reso su vendite per merce danneggiata." _
        Then
            Rows("43:50").EntireRow.Hidden = False
        Else
            Rows("43:50").EntireRow.Hidden = True
        End If
    'Inserisce la funzione se al verificari della condizione 7
        If Range("D26") = "7 - Reso su vendite per merce non ordinata." _
        Or Range("D26") = "7 - Reso su vendite per merce non ordinata." _
        Or Range("D27") = "7 - Reso su vendite per merce non ordinata." _
        Or Range("D28") = "7 - Reso su vendite per merce non ordinata." _
        Or Range("D29") = "7 - Reso su vendite per merce non ordinata." _
        Or Range("D30") = "7 - Reso su vendite per merce non ordinata." _
        Or Range("D31") = "7 - Reso su vendite per merce non ordinata." _
        Or Range("D32") = "7 - Reso su vendite per merce non ordinata." _
        Or Range("D33") = "7 - Reso su vendite per merce non ordinata." _
        Or Range("D34") = "7 - Reso su vendite per merce non ordinata." _
        Or Range("D35") = "7 - Reso su vendite per merce non ordinata." _
        Then
            Rows("51:58").EntireRow.Hidden = False
        Else
            Rows("51:58").EntireRow.Hidden = True
        End If
    'Inserisce la funzione se al verificari della condizione 8
        If Range("D26") = "8 - Reso su vendite per merce mai ritirata dal cliente." _
        Or Range("D27") = "8 - Reso su vendite per merce mai ritirata dal cliente." _
        Or Range("D28") = "8 - Reso su vendite per merce mai ritirata dal cliente." _
        Or Range("D29") = "8 - Reso su vendite per merce mai ritirata dal cliente." _
        Or Range("D30") = "8 - Reso su vendite per merce mai ritirata dal cliente." _
        Or Range("D31") = "8 - Reso su vendite per merce mai ritirata dal cliente." _
        Or Range("D32") = "8 - Reso su vendite per merce mai ritirata dal cliente." _
        Or Range("D33") = "8 - Reso su vendite per merce mai ritirata dal cliente." _
        Or Range("D34") = "8 - Reso su vendite per merce mai ritirata dal cliente." _
        Or Range("D35") = "8 - Reso su vendite per merce mai ritirata dal cliente." _
        Then
            Rows("59:62").EntireRow.Hidden = False
        Else
            Rows("59:62").EntireRow.Hidden = True
        End If
    'Inserisce la funzione se al verificari della condizione 10
        If Range("D26") = "10 - Errata fatturazione rispetto alla ragione sociale del cliente." _
        Or Range("D27") = "10 - Errata fatturazione rispetto alla ragione sociale del cliente." _
        Or Range("D28") = "10 - Errata fatturazione rispetto alla ragione sociale del cliente." _
        Or Range("D29") = "10 - Errata fatturazione rispetto alla ragione sociale del cliente." _
        Or Range("D30") = "10 - Errata fatturazione rispetto alla ragione sociale del cliente." _
        Or Range("D31") = "10 - Errata fatturazione rispetto alla ragione sociale del cliente." _
        Or Range("D32") = "10 - Errata fatturazione rispetto alla ragione sociale del cliente." _
        Or Range("D33") = "10 - Errata fatturazione rispetto alla ragione sociale del cliente." _
        Or Range("D34") = "10 - Errata fatturazione rispetto alla ragione sociale del cliente." _
        Or Range("D35") = "10 - Errata fatturazione rispetto alla ragione sociale del cliente." _
        Then
            Rows("63:68").EntireRow.Hidden = False
        Else
            Rows("63:68").EntireRow.Hidden = True
        End If
    'Inserisce la funzione se al verificari della condizione 13
        If Range("D26") = "13 - Reso su vendite per autorizzazione dell'Ufficio Commerciale." _
        Or Range("D26") = "13 - Reso su vendite per autorizzazione dell'Ufficio Commerciale." _
        Or Range("D27") = "13 - Reso su vendite per autorizzazione dell'Ufficio Commerciale." _
        Or Range("D28") = "13 - Reso su vendite per autorizzazione dell'Ufficio Commerciale." _
        Or Range("D29") = "13 - Reso su vendite per autorizzazione dell'Ufficio Commerciale." _
        Or Range("D30") = "13 - Reso su vendite per autorizzazione dell'Ufficio Commerciale." _
        Or Range("D31") = "13 - Reso su vendite per autorizzazione dell'Ufficio Commerciale." _
        Or Range("D32") = "13 - Reso su vendite per autorizzazione dell'Ufficio Commerciale." _
        Or Range("D33") = "13 - Reso su vendite per autorizzazione dell'Ufficio Commerciale." _
        Or Range("D34") = "13 - Reso su vendite per autorizzazione dell'Ufficio Commerciale." _
        Or Range("D35") = "13 - Reso su vendite per autorizzazione dell'Ufficio Commerciale." _
        Then
            Rows("69:76").EntireRow.Hidden = False
        Else
            Rows("69:76").EntireRow.Hidden = True
        End If
    End Sub