Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 23
  1. #1
    Moderatore di Hardware L'avatar di teo1964
    Registrato dal
    Feb 2006
    Messaggi
    6,138

    [Excel] Chiudere un foglio in automatico

    In azienda abbiamo un file in excel che viene consultato da diversi utenti tramite accesso all'area comune del disco di rete mentre modificato solo da pochi.
    Il problema è che spesso gli utenti aprono il file, si dimenticano di chiuderlo ed escono dall'ufficio, quindi fino al loro rientro non è possibile modificare il file in quanto apribile solo in sola lettura.

    E' possibile creare una macro che dopo un tot tempo che il file è stato aperto lo chiuda automaticamente ? La possibilità anche di inserire un camnpo con una forma di countdown da mettere in un angolo del foglio sarebbe il massimo !!

    Solo due cose sono infinite: l'universo e la stupidità umana, ma non sono sicuro della prima - Albert Einstein

  2. #2
    Ciao Teo,
    non conosco molto bene i timer di excel quindi non escludo che questa soluzione si possa perfezionare.

    Il codice è composto da due parti che vanno posizionate in punti diversi:

    codice:
    Private Sub Workbook_Open()
       Application.OnTime Now + TimeValue("00:10:00"), "Chiudi"
       Application.OnTime Now, "Countdown"
    End Sub
    
    ---------------------------
    
    Dim fine
    Private Sub Countdown()
       fine = Now + TimeValue("00:10:00")
       Visualizza
    End Sub
    Private Sub Visualizza()
       Sheets(1).[C2] = fine - Now()
       Application.OnTime Now + TimeValue("00:00:01"), "Visualizza"
    End Sub
    Private Sub Chiudi()
       ThisWorkbook.Save
       Application.Quit
    End Sub
    La prima sub intercetta l'evento di apertura del foglio e fa partire dopo 10 minuti la routine Chiudi e subito la routine Countdown.

    Sulla Chiudi c'è poco da dire: salva e chiude.

    La Countdown invece ricalcola l'orario di fine rieseguendo la somma dei dieci minuti (non sono riuscito a passarglielo come parametro) e poi chiama la Visualizza che visualizza il countdown e richiama se stessa ogni secondo.

    Nota che la variabile fine deve essere definita fuori dalle sub per essere globale e poter essere utilizzata sia dalla Countdown che dalla Visualizza.

    La cosa quindi è abbastanza semplice, ci sono però alcuni punti di attenzione.

    Il primo è che, dopo aver aperto l'editor con ALT+F11, devi individuare nell'albero dei progetti i punti esatti in cui inserire i due codici.

    La prima parte la devi mettere nel foglio ThisWorkbook all'interno della cartella Microsoft Excel Oggetti e la seconda parte nella cartella Moduli nel foglio Modulo1 (o in un altro se già ce ne sono, fai un po' di prove). Se non hai la cartella moduli la puoi inserire col tasto destro.

    Occhio che per aprire i fogli, ad esempio ThisWorkbook, devi cliccarci sopra due volte, non è come l'esplora risorse di windows.

    Un'altra cosa a cui badare è che nelle opzioni di Excel --> Centro Protezione --> Impostazioni centro protezione --> Opzioni privacy non sia checkata la casella Rimuovi le informazioni ... altrimenti l'Application.Quit fa comparire un messaggio e si ferma in attesa di una risposta.

    E infine alla casella dove inserire il countdown devi dare il formato personalizzato mm.ss

    Fai sapere come va. Ciao
    La democrazia rappresentativa ha fatto il suo tempo, è ora di passare alla democrazia diretta.
    www.beppegrillo.it

  3. #3
    Originariamente inviato da NonCeLaFaccio+
    Un'altra cosa a cui badare è che nelle opzioni di Excel --> Centro Protezione --> Impostazioni centro protezione --> Opzioni privacy non sia checkata la casella Rimuovi le informazioni ... altrimenti l'Application.Quit fa comparire un messaggio e si ferma in attesa di una risposta.
    Meglio fare così:

    codice:
    Private Sub Chiudi()
       Application.DisplayAlerts = False
       ThisWorkbook.Save
       Application.Quit
    End Sub
    Così gli avvisi si disattivano alla chiusura.

  4. #4
    Originariamente inviato da ibernet
    Meglio fare così:
    ...
    Così gli avvisi si disattivano alla chiusura.
    Eh, sì, decisamente meglio , grazie, non conosco bene questo argomento.
    E non ho neanche mai capito come funziona l'albero dei progetti del vba, per esempio qui in ufficio non sono riuscito a far funzionare quella macro perché non riesco a posizionarla nel punto giusto. Spero che Teo sia più fortunato
    La democrazia rappresentativa ha fatto il suo tempo, è ora di passare alla democrazia diretta.
    www.beppegrillo.it

  5. #5
    Moderatore di Hardware L'avatar di teo1964
    Registrato dal
    Feb 2006
    Messaggi
    6,138
    Grazie 1000 ad entrambi.
    Provo appena possibile sul file e vi faccio sapere.
    Solo due cose sono infinite: l'universo e la stupidità umana, ma non sono sicuro della prima - Albert Einstein

  6. #6
    ho modificato il codice proposto sopra così:

    codice:
    Private Sub Countdown()
       Sheets(1).[c2] = TimeValue("00:10:00")
       Visualizza
    End Sub
    Private Sub Visualizza()
    Dim TempoRimanente As Date
       TempoRimanente = ActiveSheet.Range("C2")
       Sheets(1).[c2] = TempoRimanente - TimeValue("00:00:01")
       Application.OnTime Now + TimeValue("00:00:01"), "Visualizza"
    End Sub
    Private Sub Chiudi()
       Application.DisplayAlerts = False
       ThisWorkbook.Save
       Application.Quit
    End Sub
    così funziona

  7. #7
    Originariamente inviato da ibernet
    così funziona
    Beh, anche il mio funzionava, eh
    La democrazia rappresentativa ha fatto il suo tempo, è ora di passare alla democrazia diretta.
    www.beppegrillo.it

  8. #8
    nu perchè dava errore di parametro mancante, nella prima funzione valorizzavi la variabile "fine" ma nella sub visualizza non riporti il valore. di conseguenza la funzione va in debug.

    Forse mi è sfuggito qualcosa?

  9. #9
    Mah, la variabile fine era globale proprio per poter essere usata sia nella Countdown che nella Visualizza e a me non dà quell'errore, forse dipende dalla configurazione dei singoli excel.
    Comunque anche la tecnica di utilizzare la stessa C2 come variabile globale è altrettanto valida.
    La democrazia rappresentativa ha fatto il suo tempo, è ora di passare alla democrazia diretta.
    www.beppegrillo.it

  10. #10
    non ho ben capito come fa a funzionare la variabile in questo modo.
    Quando termino la funzione countdown e passo a visualizza la variabile da vuoto.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.