Codice su chiusura foglio



  • 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