Tvinge en arbeidsbok for å lukke etter Inaktivitet

August 7  by Eliza

Dave lurer på om han kan tvinge en arbeidsbok for å lukke etter en viss tid, forutsatt at det ikke brukes i. På kontoret hans folk åpne arbeidsbøker som er på serveren og deretter glemme at de er åpne. Når det skjer, kan ingen andre redigere dem, så han ønsker å tvinge arbeidsbøker for å lukke om igjen uten tilsyn i 60 minutter.

Det er mulig å gjøre dette ved hjelp av makroer, men du kan egentlig ikke ønsker å gjøre det fra en virksomhet eller brukerorientert perspektiv. For eksempel, la oss si at en bruker har tre arbeidsbøker åpne på sitt system, slik at sammenligninger kan gjøres mellom dem. Det er mulig å bli "bundet opp" med to av arbeidsbøker for en god stund, med den tredje være den som utløser en nedleggelse. Excel VBA er ikke veldig diskriminerende-når en arbeidsbok er lukket, er det vanligvis en som har fokus på det nåværende tidspunkt.

Videre, hva gjør du med ulagrede endringer når du lukker? Hvis du lagrer dem, kjører du inn i problemet som kanskje brukeren ikke har til hensikt å redde dem. Hvis du ikke lagrer dem, det motsatte problemet oppstår, kanskje det var en masse data som trengs for å bli frelst. Du kan ikke ha den avsluttende prosedyre ber om informasjon skal bli frelst; som ville holde arbeidsbok bundet opp like sikkert som å holde den åpen (og ubrukt) ville.

En mulig løsning er å bare dele arbeidsboken. Hvis du aktiverer deling (som diskutert i andre ExcelTips), da flere personer kan ha samme arbeidsbok åpne samtidig. Hvis en av dem forlater den åpen, så ingen andre blir skadelidende fordi de fortsatt kan åpne den og eventuelt gjøre endringer i arbeidsboken.

Hvis du bestemmer deg for å gå den makrobaserte rute, så løsningen er ganske enkel. Du trenger noen form for tidsur struktur (lett implementert gjennom bruk av OnTime metoden) og noen måte å sjekke for å se om noen gjør noe i arbeidsboken.

For å starte, legge til følgende kode til en standard makro modul. Legg merke til at det er tre rutiner som skal legges:

Dim nedetid som Date

Sub SetTimer ()
Nedetid = Nå + TIMEVALUE ("1:00:00")
Application.OnTime EarliestTime: = nedetid, _
Fremgangsmåte: = "shutdown", program: = True
End Sub

Sub StopTimer ()
On Error Resume Next
Application.OnTime EarliestTime: = nedetid, _
Fremgangsmåte: = "shutdown", program: = False
End Sub

Sub Nedleggelse ()
Application.DisplayAlerts = False
Med Thisworkbook
.Saved = True
.close
Avslutt med
End Sub

Disse tre rutiner er ganske grei. De to første henholdsvis slå på timeren og slå den av. Legg merke til at disse rutinene utnytte dødtid variabel, som blir erklært ute av hvilken som helst av de rutiner. På denne måten kan innholdet kan benyttes i flere rutiner.

Den tredje rutine, nedleggelse, er den som faktisk lukker arbeidsboken. Det er bare påkalles hvis OnTime metode går ut, på slutten av en time. Det stenger arbeidsboken uten å lagre eventuelle endringer som kan ha blitt gjort.

De neste rutiner (det er fire av dem) trenger å bli tilsatt til Thisworkbook objektet. Åpne VBA Editor og dobbeltklikk på Thisworkbook objekt i Prosjekt Explorer. I koden vinduet som Excel åpner, plasserer disse rutinene:

Private Sub Workbook_Open ()
Call SetTimer
End Sub

Private Sub Workbook_BeforeClose (Avbryt Som Boolean)
Ring StopTimer
End Sub

Private Sub Workbook_SheetCalculate (ByVal Sh Som Object)
Ring StopTimer
Call SetTimer
End Sub

Private Sub Workbook_SheetSelectionChange (ByVal Sh Som Object, _
ByVal Target As Excel.Range)
Ring StopTimer
Call SetTimer
End Sub

De to første rutiner utløses når arbeidsboken åpnes, og når den er lukket; de starter tidtakeren og slå den av. De to andre rutiner utføres automatisk når et regneark beregnes på nytt eller når noen gjør et utvalg i arbeidsboken. Begge er gode indikatorer på at noen bruker arbeidsboken (det er ikke inactively åpen). De stoppe tidtakeren og deretter starte den på nytt, slik at én time nedtellingen starter over.

Det er en ulempe med å bruke et sett med makroer som disse: du effektivt eliminere Excel Angre evne. Når en makro kjøres, Angre stabelen automatisk utryddet av Excel. Siden makroer kjører med hver endring gjort i arbeidsboken, kan personens endringer ikke være ugjort. (Det er ingen måte å komme seg rundt denne ulempen.)

ExcelTips er din kilde for kostnadseffektiv Microsoft Excel trening. Dette tipset (2281) gjelder for Microsoft Excel 97, 2000, 2002, og 2003. Du kan finne en versjon av dette tipset for Båndet av Excel (Excel 2007 og senere) her: Tvinge en arbeidsbok for å lukke etter Inaktivitet.