Un comando simile a Deactivate in vba

Versione Completa   Stampa   Cerca   Utenti   Iscriviti     Condividi : FacebookTwitter
Vpre
00martedì 30 agosto 2016 01:42
So che vba ha il comando Activate per i fogli Excel. A me serve un comando che fa partire l'azione quando esco da dal foglio.
Praticamente voglio fare in modo che quando lascio il foglio attivo e seleziono un'altro foglio, mi faccia ordinare alfabeticamente un elenco di nomi.
C'è qualche soluzione?
Grazie
by sal
00martedì 30 agosto 2016 06:54
Selezione fogli
Ciao Vpre, esiste proprio l'evento "Deactivate" cioè quando passi ad un altro foglio.

puoi inserire l'ordinamento dei dati proprio in quell'evento del foglio.

ricorda che ogni foglio ha il suo evento "Deactivate".

Ciao By Sal [SM=x423051]

Vpre
00mercoledì 31 agosto 2016 03:02
Grazie!
Ho trovato l'evento Deactivate. Ma mi da errore sulla macro che voglio eseguire
Qualcuno riesce a capire perchè?
Allego il file
Grazie
GiuseppeMN
00mercoledì 31 agosto 2016 06:47
Buona giornata, Vpre.

@Vpre, chiede:


Qualcuno riesce a capire perchè?



Sinceramente, no!  


Ma, potresti provare con il File in allegato; a prima vista sembra funzionare.




A disposizione.

Buon Lavoro e buona serata.

Giuseppe
by sal
00mercoledì 31 agosto 2016 07:26
Deactivate
Ciao vpre, ed un saluto a Giuseppe.

la tua macro non funziona in quanto appena cambi foglio l'"ActiveSheet", non è quello di partenza ma prende immediatamente il nome di quello scelto.

quindi ci vuole un poco di escamotage per risolvere il problema.

ecco la macro che funziona.

Private Sub Worksheet_Deactivate()
Dim cella As Range
Dim sh
Application.ScreenUpdating = False
Application.EnableEvents = False
sh = ActiveSheet.Name
Sheets("FIORDALISO").Select

ActiveSheet.Unprotect "passwordprotezionesheets1"
For Each cell In Range("D7:I66")
If cell.Value = "" Then
cell.ClearContents
End If
Next
    Range("d7:I66").Select
    Selection.Sort Key1:=Range("D7"), Order1:=xlAscending

Range("a1").Select

   ActiveSheet.Protect "passwordprotezionesheets1", DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowFormattingCells:=True, AllowSorting:=True, AllowFiltering:=True
Sheets(sh).Select
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub


come vedi ho aggiunto delle righe ed una variabile.

la prima cosa che si fa è Bloccare Eventi e schermo, poi prendere il nome del Nuovo foglio con

sh = activesheet.name


poi si seleziona il foglio di partenza, il blocco dello schermo, serve per non vedere il saltellamento dello schermo, in quanto il primo passaggio si sposta sul foglio "riepilogo" o altro, ora riportando di nuovo il focus sul foglio di partenza "Fiordaliso".

avendo gli eventi bloccati con:

Application.EnableEvents = False


quando seleziono "Fiordaliso" con sheets("FIORDALISO").select, non parte Deactivate, a questo punto sono posizionato sul foglio per eseguire la macro di sprotezione ordinamento etc..

il blocco degli eventi serve perche alla fine della macro dopo aver riprotetto il foglio fiordaliso, dobbiamo passare al nuovo foglio, e questo farebbe ripartire di nuovo l'evento "Deactivate" se non fosse bloccato andrebbe in Loop, quando si è selezionato il nuovo foglio con

Sheets(sh).select


allora si possono sboccare sia gli eventi che lo schermo.

spero che la spiegazione sia stata chiara, bisogna vedere il flusso del codice è capire in ogni momento cosa succede o viene attivato.

allego anche il file.

Ciao By Sal [SM=x423051]

Vpre
00giovedì 1 settembre 2016 05:07
Grazie bysal! Sei davvero molto bravo!
Questa è la versione 'lo-fi' del Forum Per visualizzare la versione completa clicca qui
Tutti gli orari sono GMT+01:00. Adesso sono le 02:20.
Copyright © 2000-2024 FFZ srl - www.freeforumzone.com