Avatar billede tonnypoulsen Nybegynder
25. juli 2003 - 10:28 Der er 23 kommentarer og
1 løsning

Autoluk af Excel

Vi er på jobbet, flere brugere af det samme Excel ark, og til tider glemmer folk at de har åbnet filen, så vi andre kun kan se filen som read only.

Derfor kunne jeg godt tænke mig at filen bliver gemt og lukket, hvis der ikke er blevet ændret noget efter 10 min.

Kan det lade sig gøre ?.
Avatar billede kabbak Professor
25. juli 2003 - 10:50 #1
sættes i ThisWorkbook modul

Private Sub Workbook_Open()
Call LukTid
End Sub

Sættes i hver ark modul

Private Sub Worksheet_Change(ByVal Target As Range)
Call LukTid
End Sub

Sættes i selvstændig modul

Sub Luk()
    ActiveWorkbook.Save
    ActiveWindow.Close
End Sub

Public Sub LukTid()
Application.OnTime TimeValue(Now() + TimeValue("00:15:00")), "Luk" ' lukker om 15 min fra nu.
End Sub
Avatar billede kabbak Professor
25. juli 2003 - 10:54 #2
Nb. har ikke testet på flerbruger, så jeg ved ikke om den lukker på alle.
Avatar billede bak Forsker
25. juli 2003 - 11:30 #3
Kabbak -> måske en detajle, men hvs du kører luktid fra Workbook_Open, skal du så ikke annulere den OnTime du satte der, når du kører Worksheet_Change.
(vil regnearket ikke ellers lukkes efter 15 min. uanset om der arbejdes eller ej ??)
Avatar billede kabbak Professor
25. juli 2003 - 11:51 #4
luktid fra Workbook_Open gør at den lukker, hvis der ikke er sket noget i 15 min.

Luktid fra Worksheet_Change, gør at hver gang der er en ændring sættes OnTime til nu + 15 min
Avatar billede bak Forsker
25. juli 2003 - 12:28 #5
Ikke helt enig kabbak, en ny OnTime sletter ikke (automatisk) en gammel, men giver 2 stk ontime, der begge kører.
Avatar billede bak Forsker
25. juli 2003 - 12:43 #6
Jeg ville gøre sådan:

Disse 2 Sub's indsættes begge i ThisWorkBook
Private Sub Workbook_Open()
'1. lukketid
LukkeTid = Now + TimeValue("00:10:00")
'Sæt 1. lukketid ind i OnTime
Application.OnTime LukkeTid, "LukFil"
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
'Annullerer forrige OnTime
If LukkeTid > 0 Then Application.OnTime LukkeTid, "LukFil", , False
'Sæt nu lukketid
LukkeTid = Now + TimeValue("00:10:00")
'sæt ny OnTime
Application.OnTime LukkeTid, "LukFil"
End Sub


og Denne i et standard modul

Public LukkeTid  'Global variabel til at holde forrige ontime

Sub LukFil()
LukkeTid = 0
'Gem og luk filen
ThisWorkbook.Close savechanges:=True
End Sub
Avatar billede kabbak Professor
25. juli 2003 - 12:43 #7
Jeg har altid troet at en ny OnTime slettede den gamle, har du noget info herom.
Avatar billede bak Forsker
25. juli 2003 - 12:46 #8
Det troede jeg såmænd også en gang, indtil jeg kom til at sætte den ind i en større løkke :-)

Info: Nej
Erfaring : Ja :-)
Avatar billede bak Forsker
25. juli 2003 - 13:30 #9
Hov.. Jeg glemte lige at skrive at når man vil annulere en OnTime skal man bruge nøjagtig det samme klokkeslet og MakroNavn til dette.
Det er derfor at jeg bruger den globale variabel LukkeTid til at holde forrige tid/klokkeslet i.
False er afbryderen.

Application.OnTime LukkeTid, "LukFil", , False
Avatar billede tonnypoulsen Nybegynder
28. juli 2003 - 02:53 #10
Jeg kan ikke få det til at virke.
Udløbstiden er fra man åbner filen, ændringer har ikke indflydelse på tiden.

Jeg har forsøgsvis lagt følgende kode i en command button. Det kunne jo være at jeg havde lagt koden det forkerte sted, så jeg syntes lige det skulle afprøves.
Private Sub CommandButton1_Click()
If LukkeTid > 0 Then Application.OnTime LukkeTid, "LukFil", , False
LukkeTid = Now + TimeValue("00:15:00")
Application.OnTime LukkeTid, "LukFil"
End Sub
Aktivering af knappen, ændre heller ikke på tiden.

Hvad kan der være galt?.

Tillægs spørgsmål.
Kan man overfører lukketiden til en celle eller en tekstbox?.
Hvad er koden for at åbne en workbook?.
Avatar billede kabbak Professor
28. juli 2003 - 08:40 #11
Kan man overfører lukketiden til en celle eller en tekstbox?.
Sheets("Ark1").Range("A1") = "Lukker Kl." & LukkeTid
Tekst1.tekst = LukkeTid
Avatar billede kabbak Professor
28. juli 2003 - 08:43 #12
Åbne en fil ( Workbook )

Workbooks.Open Filename:="C:\Div excel\1205.xls"
Avatar billede tonnypoulsen Nybegynder
28. juli 2003 - 14:19 #13
Det med at åbne en workbook fungerer fint. Jeg havde tænkt mig at lave en workbook med tekst, der gør opmærksom på at de er blevet smidt af.

Hvor skal jeg placerer koden for at vise lukketid, skal det have sit eget modul?.
Avatar billede kabbak Professor
28. juli 2003 - 15:35 #14
Disse 2 Sub's indsættes begge i ThisWorkBook
Private Sub Workbook_Open()
'1. lukketid
LukkeTid = Now + TimeValue("00:10:00")
'Sæt 1. lukketid ind i OnTime
Application.OnTime LukkeTid, "LukFil"
call Besked
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
'Annullerer forrige OnTime
If LukkeTid > 0 Then Application.OnTime LukkeTid, "LukFil", , False
'Sæt nu lukketid
LukkeTid = Now + TimeValue("00:10:00")
'sæt ny OnTime
Application.OnTime LukkeTid, "LukFil"
call Besked
End Sub


og Denne i et standard modul

Public LukkeTid  'Global variabel til at holde forrige ontime

Sub LukFil()
LukkeTid = 0
'Gem og luk filen
ThisWorkbook.Close savechanges:=True
End Sub

Sub Besked()
' skriver lukketiden i Ark1 celle A1, ret selv
Sheets("Ark1").Range("A1") = "Lukker Kl." & LukkeTid' hvis du vil vise det i en celle
End Sub
Avatar billede kabbak Professor
28. juli 2003 - 15:36 #15
nb. jeg har føjet en sub mere til din kode bak, og kaldt den fra de andre
Avatar billede tonnypoulsen Nybegynder
29. juli 2003 - 01:17 #16
Så virker det hele. Jeg havde glemt Public Lukketid, et væsentligt stykke kode.

Overførsel af lukketiden til en celle virker også, lige som jeg spurgte om. Det var nu en nedtælling jeg havde i tankerne, men det kunne jeg jo bare have skrevet.

Bak: altid rart med et vågent øje, der holder øje med tingene. Hvis du lægger et svar, så kan i få 30 point hver.

Kabbak: hvis ikke du har gættet det, skal det bruges til turnusplanen, som du tidligere har hjulpet med. Planen for fremtiden, er at lave turnusplanen som en web side. Så hvis du også er skrap til hjemmeside programering, så kan du tjene lidt flere point ved at svare på de samme spørgsmål igen, dog i et andet forum.
Avatar billede tonnypoulsen Nybegynder
29. juli 2003 - 05:14 #17
Jeg har forsøgt mig med følgende kode.

Sub Besked()
Do
Sheets("Sheet1").Range("A1") = LukkeTid - Now
Loop
End Sub

Så går Excel helt i selvsving. Der kommer ganske vist en nedtælling i celle A1, men der kommer også timeglas i stedet for markøren, så man ikke kan foretage sig noget.

Hvad går der galt?.
Hvordan kommer man ind i Visual Basic når Excel er gået i selvsving?.
Avatar billede kabbak Professor
29. juli 2003 - 09:03 #18
du stopper den med Ctrl+Break
Selvsving er når en kode køre hele tiden.
Avatar billede kabbak Professor
29. juli 2003 - 09:04 #19
Nb, jeg har ikke forstand på hjemmeside programmering, desværre.
Avatar billede kabbak Professor
29. juli 2003 - 09:09 #20
Sub Besked()
'Do
Sheets("Sheet1").Range("A1") = LukkeTid - Now
'Loop det er her den går i selvsving den bliver aldrig færdig.
End Sub
Avatar billede tonnypoulsen Nybegynder
29. juli 2003 - 15:51 #21
I stedet for det loop jeg har lavet til nedtællingen, hvad kunne jeg så bruge?.
Skal det laves så den kun loopér hver sekund, eller er det noget helt andet jeg skal have fat i?.
Avatar billede bak Forsker
31. juli 2003 - 14:12 #22
tonny-> kabbak har fortjent dem alle for at have hjulpet dig helt i mål... :-)
Avatar billede tonnypoulsen Nybegynder
31. juli 2003 - 16:39 #23
Som befalet, Kabbak for alle pointene.

Tak til jer begge to, for hjælpen.
Avatar billede kabbak Professor
31. juli 2003 - 21:11 #24
selv tak Tonny , det er noget af et projekt du er i gang med ;-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester