Codice su chiusura foglio
Hai un problema con Excel? 
Codice su chiusura foglio
di Toscanaccio (utente non iscritto) data: 14/09/2016 12:42:36
Salve a tutti!
Ho un file con 2 fogli. Ho creato la macro (nel form del codice VBA) "Foglio2" che partendo dal foglio 1 aperto mi sovrappone in un riquadro il foglio 2 ed al contempo mi riduce il foglio 1 come se avessi cliccato su "ripristina finestra" in alto a dx tasto grigio sulla barra con i menù a discesa (di stato?).
Vorrei che quando chiudo il foglio 2 cliccando sulla X rossa della banda blu il foglio 1 tornasse alle dimensioni originali, quindi come se cliccassi il tasto "ingrandisci".
Ho provato a mettere
Sub Auto_close()
ActiveWindow.WindowState = xlMaximized
End Sub
Su foglio2 (non su modulo2), ma non funziona
In pratica: non voglio che si chiuda il file, ma solo la finestra del foglio 2 e che il foglio 1 che era sotto al foglio 2 ridiventi "grande".
Ringrazio anticipatamente chi mi vorrà aiutare,
Massimo
Sub foglio2()
'
' foglio2 Macro
' Macro registrata il 14/09/2016 da MC
'
'
ActiveWindow.NewWindow
Sheets("Foglio2").Select
ActiveWindow.WindowState = xlNormal
With ActiveWindow
.Width = 207
.Height = 197.25
End With
With ActiveWindow
.Top = 18.25
.Left = 390.25
End With
End Sub |
di Toscanaccio (utente non iscritto) data: 14/09/2016 16:24:25
Ho provato anche a chiamare la routine sia
Private Sub Worksheet_close che
Private Sub Window_close
inserendola sempre nel foglio2, ma ugualmente senza successo
Massimo
di Marius44 data: 14/09/2016 19:55:01
Ciao Toscanaccio
dovresti ormai sapere che è sempre meglio allegare un file.
Premesso che nella tua macro non vedo nulla che possa "minimizzare" il Foglio1, se può andarti bene avrei trovato questo sotterfugio:
Sistema la tua macro come quella postata sotto (la prima); poi aggiungi nello stesso Modulo la seconda macro e associala ad un pulsante che metterai nel Foglio2
Fai sapere. Ciao,
Mario
Sub foglio2()
Sheets("Foglio1").Select '<== riga aggiunta
ActiveWindow.WindowState = xlMinimized '<== riga aggiunta
ActiveWindow.NewWindow
Sheets("Foglio2").Select
ActiveWindow.WindowState = xlNormal
With ActiveWindow
.Width = 207
.Height = 197.25
End With
With ActiveWindow
.Top = 18.25
.Left = 390.25
End With
End Sub
Sub Ripristina()
ActiveWindow.Close
Windows("Cartel1").Activate
ActiveWindow.WindowState = xlMaximized
End Sub
|
di Toscanaccio (utente non iscritto) data: 15/09/2016 10:40:51
Grazie per lòa risposta Marius 44.
Hai ragione spesso è difficile descrivere bene ciò che si chiede.
Allego un doc con 2 screenshots in modo da capire meglio.
Lo screen 1 è la situazione di partenza con il foglio 1 massimalizzato.
Lo screen 2 è come si presenta dopo l'esecuzione della mia macro sub foglio 2().
In realtà è proprio come desidero che mi si presenti con il foglio 2 che si sovrappone al foglio 1 che fa da sfondo. In realtà il foglio 1 appare come se avessi pigiato il bott. 1
quello che chiedo è che pigiando il bottone 3 non solo si chiuda il foglio 2, ma si ritorni alla situazione dello screen 1 che , a farlo manualmente, avviene dopo aver pigiato il bottone 2.
Per questo avevo usato un'auto_close da mettere su foglio 2, affinchè chiudendo il 2 mi massimalizzi automaticamente l'1.
Non ho ritenuto necessario mandarti il file di excel, credendo che così sia sufficiente, ma se vuoi svuoto il file e te lo mando.
Grazie, Massimo
di Marius44 data: 15/09/2016 16:57:51
Ciao Massimo
ti posto 3 routine. Possono essere inserite tutte nel Modulo di Foglio1
La prima catturare la scritta nella cella N1 e rimanda alla macro relativa.
La seconda (Mostra2) richiama il nuovo Foglio2 alla misura che tu hai dato
La terza riporta le cosa allo stato orginale (chiude Foglio2 e mostra Foglio1 massimizzato).
Come devi usarle?
Molto semplice: se nella cella N1 di Foglio1
- digiti 1, ti viene mostrato il Foglio2 ridotto e Foglio1 è leggermente più piccolo;
- digiti 3 il Foglio2 (nuovo) viene eliminato e Foglio1 viene massimizzato.
Ho lasciato vuoto (ho messo uno Stop) la digitazione di 2; potresti utilizzarlo per altri scopi oppure puoi toglierlo.
Prova e fai sapere. Ciao,
Mario
'Da inserire nel Modulo di Foglio1
Private Sub Worksheet_Change(ByVal Target As Range)
If Range("N1") = "" Then
Exit Sub
ElseIf Range("N1") = 1 Then
Call Mostra2
ElseIf Range("N1") = 2 Then
Stop
ElseIf Range("N1") = 3 Then
Call Chiude2
End If
End Sub
'--------------------------------------------
Sub Mostra2()
ActiveWindow.NewWindow
Sheets("Foglio2").Select
ActiveWindow.WindowState = xlNormal
With ActiveWindow
.Width = 207
.Height = 197.25
.Top = 18.25
.Left = 390.25
End With
End Sub
'-------------------------------------
Sub Chiude2()
Windows("Cartel1:2").Activate
ActiveWindow.WindowState = xlNormal
ActiveWindow.Close
ActiveWindow.WindowState = xlMaximized
Selection.ClearContents
End Sub |
di Toscanaccio (utente non iscritto) data: 16/09/2016 13:45:49
Ciao Mario: Perfetto, grazie.
Chiedo solo se è possibile avviare la tua sub Chiude2 pigiando il pulsante di chiusura del foglio 2 (il n° 3 dello screen2 che ho allegato, per capirsi).
Grazie ancora,
Massimo
di Marius44 data: 16/09/2016 14:59:40
Ciao Massimo
come puoi vedere le due macro sono "lanciate" dall'evento Change di Worksheet(1). Tieni presente che il Foglio2 non entra nel gioco delle macro. Tutto l'ambaradan è nel Foglio1.
Non credo si possa fare quello che chiedi (spero che qualcuno mi smentisca, così imparo qualcosa anch'io).
Ciao,
Mario
Vuoi Approfondire?