Confronto celle



  • Confronto celle
    di Peghi data: 11/07/2012

    Salve a tutti, mi sono appena iscritto a questo utilissimo forum perchè desidero apprendere qualcosa di vba per excel.
    avrei da sottoporvi un quesito (sicuramente banale per gli esperti) al quale non riesco a trovare soluzione. in pratica vorrei scrivere un codice che, alla chiusura del foglio excel, esegua il confronto su due celle, es: a1 = g10, e se il confronto restituisce vero, ossia i due valori coincidono, il foglio si chiude con salvataggio dati, altrimenti dovrebbe uscire un msgbox che esorta ad effettuare un controllo dei dati inseriti.
    spero di essere stato chiaro e confido nella vs esperienza.



  • di Harrybosch data: 11/07/2012

    Ciao peghi
    devi sfruttare l'evento "beforeclose"; il codice va inserito nel thisworkbook.

    ti ho messo anche i commenti.
    ciao, vanni
     
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    
    'se il contenuto di a1 del foglio1 è uguale al contenuto di g10 allora..
    If Sheets("Foglio1").Range("a1") = Sheets("Foglio1").Range("g10") Then
    'salvo la cartella e chiudo
    ThisWorkbook.Save
    'altrimenti
    Else
    'messaggio di avviso
    MsgBox "Attenzione! Controlla i dati inseriti"
    'imposto la condizione a vero (Boolean assume vero o falso) e quindi non chiudo
    Cancel = True
    'se volessi selezionare la cella di controllo
    Sheets("Foglio1").Range("a1").Select
    End If
    
    End Sub
    



  • di Peghi data: 12/07/2012

    Mitico
    funziona a meraviglia.
    ho dovuto sostituire sheets.("foglio1") con foglio1.

    grazie infinite.

    ps: il msgbox si può personalizzare graficamente, tipo mettendo una x rossa o cose del genere?



  • di Harrybosch data: 12/07/2012

    Ciao peghi
    ti mostro un paio di esempi, dove il secondo ti darebbe anche la scelta di chiudere comunque il foglio senza salvare i cambiamenti.

    nel msgbox si possono usare diverse variabili; fino al 5 sono pulsanti, il resto sono icone di avviso:
    0 oppure vbokonly
    1 oppure vbokcancel
    2 oppure vbabortretryignore
    3 oppure vbyesnocancel
    4 oppure vbyesno
    5 oppure vbretrycancel
    16 oppure vbcritical
    32 oppure vbquestion
    48 oppure vbexclamation
    64 oppure vbinformation
    anche combinate fra loro come nell'esempio che ti ho postato (vbcritical + 1)
    fai un pò di prove per verificarne il loro utilizzo.

    altrimenti, invece di un msgbox, puoi mostrare un userform che allora puoi personalizzare in tutte le maniere, pure con le immagini.

    ciao vanni
     
    Sub avviso_con_X()
    MsgBox "Dati non corrispondenti", vbCritical + vbOKOnly, "ATTENZIONE!"
    End Sub
    
    
    Sub box_con_scelta()
    risposta = MsgBox("Dati non corrispondenti" & vbCrLf & _
    "Vuoi uscire senza salvare?", VbYesNo + 16 , "ATTENZIONE!")
    If risposta = vbYes Then
    Else
    cancel = true
    MsgBox "operazione annullata"
    End If
    End Sub
    
    
    che inserito nel "BeforeCLose" diventerebbe così:
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    
    If Sheets("Foglio1").Range("a1") = Sheets("Foglio1").Range("g10") Then
    ThisWorkbook.Save
    Else
    
    'assegno una variabile al pulsante che premerò
    risposta = MsgBox("Dati non corrispondenti" & vbCrLf & _
    "Vuoi uscire senza salvare?", vbYesNo + 16, "ATTENZIONE!")
    'se la risposta è positiva, quindi se premo SI...
    If risposta = vbYes Then
    'esco dalla cartella senza salvare
    ThisWorkbook.Saved = True
    'altrimenti
    Else
    'se premo NO non esco dalla cartella
    Cancel = True
    End If
    
    Sheets("Foglio1").Range("a1").Select
    End If
    End Sub



  • di Harrybosch data: 12/07/2012

    Scusa, la seconda macro che ho scritto prima era un pò confusa (mannaggia al copia e incolla!).
    questa era la versione giusta.
    ciao, vanni
     
    Sub box_con_scelta()
    
    risposta = MsgBox("Dati non corrispondenti" & vbCrLf & _
    "Vuoi uscire senza salvare?", VbYesNo + 16 , "ATTENZIONE!")
    
    If risposta = vbYes Then
    	MsgBox "Hai premuto SI"
    Else
    	MsgBox "Hai premuto NO"
    End If
    
    End Sub



  • di Peghi data: 17/07/2012

    Grazie mille e scusate il ritardo