Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Blocco chiusura o salvataggio a seguito controllo valori

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Blocco chiusura o salvataggio a seguito controllo valori

Postdi nima » 27/03/21 16:32

Buongiorno a tutti,
rifacendomi a un vecchio mio post viewtopic.php?f=26&t=106426&p=623313#p623313 dove ho chiesto un vostro aiuto, ho un problema simile su altro file per non dire uguale che non riesco a risolvere :oops: :oops: .
In pratica prima di salvare o di poter chiudere il file di excel devo fare dei controlli su dei volari inseriti, una volta che i valori inseriti sono corretti si può salvare o chiudere il file.
Nel "Private Sub Workbook_BeforeClose(Cancel As Boolean)" e nel "Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)" ho richiamato questa macro:


Codice: Seleziona tutto
Sub controllo_prima_della_chiusura()
' Controllo_prima_della_chiusura

Dim I As Long
Sheets("TURNI da STAMPARE").Select

    For I = 8 To 30

        If Cells(I, 4).Value = Cells(5, 8) Or Cells(I, 5).Value = Cells(5, 8).Value Then
               
                If Cells(I, 6) = "S" Or Cells(I, 6) = "Si" Then

                    MsgBox (Cells(I, 2) & " è in salto non può essere in " & Cells(I, 6))
                    Cells(I, 6).Select
                    Cancel = True
         
                End If

         End If
       
    Next I
   
End Sub



.....che chiaramente non funziona altrimenti non sarei qui a chidere un supporto.
Mi potreste indicare dove stà l'inghippo?
Per evitare la chiusura il comando non è: Cancel = True
Per evitare il salvataggio qual'è il comando?


Grazie!!!
nima
Utente Junior
 
Post: 18
Iscritto il: 14/01/16 16:38

Sponsor
 

Re: Blocco chiusura o salvataggio a seguito controllo valori

Postdi Anthony47 » 27/03/21 16:45

....che chiaramente non funziona altrimenti non sarei qui a chidere un supporto.
Mi potreste indicare dove stà l'inghippo?
Sono anni che ci proviamo ma non siamo ancora riusciti a capire, guardando il codice di una macro che non fa una certa cosa, quale e' quella "certa cosa" che invece avrebbe dovuto fare.

Quindi per sperare in una risposta dovresti dire quali controlli vorresti fare... Magari aiutandoti con uno screenshot che fa vedere come sono i tuoi dati (Per le istruzioni su come allegare una immagine: viewtopic.php?f=26&t=103893&p=605488#p605488 )

Per evitare la chiusura il comando non è: Cancel = True
Per evitare il salvataggio qual'è il comando?
Con "Cancel = True" si evita che l'operazione proceda, sia in una Sub Workbook_BeforeClose che in una Sub Workbook_BeforeSave

Ti aspettiamo...
Avatar utente
Anthony47
Moderatore
 
Post: 17658
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Blocco chiusura o salvataggio a seguito controllo valori

Postdi nima » 27/03/21 17:17

Buongiorno Anthony47,
rileggendo il mio post in effetti non mi sono spiegato a sufficienza.
La macro che ho scritto esegue bene i controlli che deve fare e in modo corretto confronta i valori inseriti di conseguenza nei casi specifici fà apparire il msg box con su scritto il relativo avviso.
Una volta però premuto il pulsante "OK" nel msg box confermando quindi la lettura dell'avviso, il programma excel prosegue con la funzione salva (attivata tramite il relativo tasto) o la chiusura del file (attivata tramite la X rossa in alto a dx).
Come se la funzione "Cancel = True" (come dici tu: evita che l'operazione proceda) non funzioni.
Spero di essere stato chiaro altrimenti potrei allegare un file di prova.... se preferisci.
Grazie!
nima
Utente Junior
 
Post: 18
Iscritto il: 14/01/16 16:38

Re: Blocco chiusura o salvataggio a seguito controllo valori

Postdi Anthony47 » 27/03/21 19:35

Allora proviamo cosi':
1) trasforma il tuo codice in una Function, e mettila in un "modulo standard" del vba:
Codice: Seleziona tutto
Function controllo_prima_della_chiusura(ByRef Dummy) As Boolean
' Controllo_prima_della_chiusura

Dim I As Long
With ThisWorkbook.Sheets("TURNI da STAMPARE")
    For I = 8 To 30
        If .Cells(I, 4).Value = .Cells(5, 8) Or .Cells(I, 5).Value = .Cells(5, 8).Value Then
                If .Cells(I, 6) = "S" Or .Cells(I, 6) = "Si" Then
                    MsgBox (.Cells(I, 2) & " è in salto non può essere in " & .Cells(I, 6))
                    'Cells(I, 6).Select
                    controllo_prima_della_chiusura = True
                    Exit For
                End If
         End If
    Next I
End Function


Poi dalle tue Workbook_BeforeClose e Workbook_BeforeSave chiama questa funzione in questo modo:
Codice: Seleziona tutto
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If controllo_prima_della_chiusura(1) Then
    Cancel = True
End If
End Sub

Fai sapere...
Avatar utente
Anthony47
Moderatore
 
Post: 17658
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Blocco chiusura o salvataggio a seguito controllo valori

Postdi nima » 27/03/21 20:20

Anthony47..... non ci sono parole.
Sono giorni che stavo provando e girando sul web per trovare una soluzione ma non trovavo la soluzione.
Funziona tutto come previsto, solo nella function mancava "End With" prima dell' End function.... ma questo è solo di contorno non è sostanza.
Ho ripristinato la riga dove indicavo "Cells(I, 6).Select" per facilitare chi compila il foglio perchè sarà indirizzato nella cella dove è l'errore.
Se puoi ed hai tempo, vorrei sapere per quale motivo la mia soluzione non funzionava giusto per non incorrere nello stesso errore una prossima volta.
Grazie!
nima
Utente Junior
 
Post: 18
Iscritto il: 14/01/16 16:38

Re: Blocco chiusura o salvataggio a seguito controllo valori

Postdi Anthony47 » 27/03/21 21:47

Eh, l'End With me lo sono mangiato mentre editavo il codice che avevo usato per prova...

Essenzialmente il tuo codice non funzionava perche' il "Cancel" che tu settavi True nella tua macro era una variabile che viveva all'interno della tua macro; mentre il Cancel da settare e' un "argomento" della macro di evento. Insomma sono cose diverse che vivono in mondi diversi.
Configurando il tuo codice come Funzione posso gestire in risultato del check all'interno della macro di evento e manipolare l'argomento giusto.

Ho ripristinato la riga dove indicavo "Cells(I, 6).Select" per facilitare chi compila il foglio
Il mio codice non seleziona il foglio "TURNI da STAMPARE", quindi questo semplice ".Select" seleziona una cella nel foglio corrente, qualsiasi esso sia.
Aggiungi invece questa Application.GoTo:
Codice: Seleziona tutto
                If .Cells(I, 6) = "S" Or .Cells(I, 6) = "Si" Then
                    MsgBox (.Cells(I, 2) & " è in salto non può essere in " & .Cells(I, 6))
                    Application.Goto .Cells(I, 6)                                        '<<< QUESTA
                    controllo_prima_della_chiusura = True
                    Exit For
                End If
Avatar utente
Anthony47
Moderatore
 
Post: 17658
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Blocco chiusura o salvataggio a seguito controllo valori

Postdi nima » 28/03/21 14:37

Buongiorno Anthony,
penso di aver capito la differenza fra "variabile" e "argomento" .... In questo caso ho solo ripreso una macro simile ( per non dire uguale) da altro file dove, anche in quello, prima di chiudere viene eseguito un controllo fra due celle che devono avere lo stesso valore altrimenti blocca la chiusura.... mi rimane sempre il dubbio cmq perchè in uno funziona e nell'altro no :-? :-? ...

Si effettivamente nel tuo codice non viene selezionato il foglio "TURNI da STAMPARE", questa volta ho omesso io quel passaggio che in realtà è nel codice definitivo.

Vorrei chiederti una cortesia per un'altro dubbio: in excel è possibile nidificare nella stessa cella più funzioni "O(logico1; [logico2]; ...)" oppure "E(logico1; [logico2]; ...)"... come si può tradurre ciò in vba? Con "IF" "THEN" nidificati?

PS: Sempre in questo file, nel foglio "TURNI da STAMPARE", devo mettere un tasto che mi permetta con una macro di fare una stampa virtuale in .pdf della pagina visualizzata con un determinato nome in una determinata cartella. Sto leggendo sempre tue discussioni del 2015 e 2012.... spero di farcela altrimenti ti dovrò disturbare ;).

Grazie comunque per la tua celere risposta e aiuto indispensabile! :)
nima
Utente Junior
 
Post: 18
Iscritto il: 14/01/16 16:38

Re: Blocco chiusura o salvataggio a seguito controllo valori

Postdi Anthony47 » 28/03/21 22:38

Piu' che la differenza tra variabile e argomento devi guardare l'ambito di validita' di una variabile: https://docs.microsoft.com/en-us/office ... visibility

Sempre in questo file, nel foglio "TURNI da STAMPARE", devo mettere un tasto che mi permetta con una macro di fare una stampa virtuale in .pdf della pagina visualizzata con un determinato nome in una determinata cartella. Sto leggendo sempre tue discussioni del 2015 e 2012.... spero di farcela altrimenti ti dovrò disturbare
Molte cose sono cambiate dal 2015.. guarda ad esempio questa discussione "piu' recente": viewtopic.php?f=26&t=111730

Utilizza il comando SalvaCome + formato Pdf, che in pratica e' una stampante.

Quanto agli If puoi annidarli, come pure puoi usare funzioni quali Or ed And (ed altre); esempi:
Codice: Seleziona tutto
If a > b Then
    If (a > c And a > b) Or (c > a And b < d) Then
        '...
    End If
Else
    '...
End If

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17658
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "Blocco chiusura o salvataggio a seguito controllo valori":


Chi c’è in linea

Visitano il forum: Nessuno e 53 ospiti