Avatar billede hubertus Seniormester
23. oktober 2006 - 19:05 Der er 7 kommentarer og
2 løsninger

Handling på fastsatte tidspunkter.

Hvordan får man Excel til via en VBA kode, at udfører en handling på foruddefineret tidspunkter?
mvh. Hubertus
Avatar billede kabbak Professor
23. oktober 2006 - 19:12 #1
Fra hjælpen

OnTime Method
See AlsoApplies ToExampleSpecificsSchedules a procedure to be run at a specified time in the future (either at a specific time of day or after a specific amount of time has passed).

expression.OnTime(EarliestTime, Procedure, LatestTime, Schedule)
expression    Required. An expression that returns an Application object.

EarliestTime    Required Variant. The time when you want this procedure to be run.

Procedure    Required String. The name of the procedure to be run.

LatestTime    Optional Variant. The latest time at which the procedure can be run. For example, if LatestTime is set to EarliestTime + 30 and Microsoft Excel is not in Ready, Copy, Cut, or Find mode at EarliestTime because another procedure is running, Microsoft Excel will wait 30 seconds for the first procedure to complete. If Microsoft Excel is not in Ready mode within 30 seconds, the procedure won’t be run. If this argument is omitted, Microsoft Excel will wait until the procedure can be run.

Schedule    Optional Variant. True to schedule a new OnTime procedure. False to clear a previously set procedure. The default value is True.

Remarks
Use Now + TimeValue(time) to schedule something to be run when a specific amount of time (counting from now) has elapsed. Use TimeValue(time) to schedule something to be run a specific time.

Example
This example runs my_Procedure 15 seconds from now.

Application.OnTime Now + TimeValue("00:00:15"), "my_Procedure"
       
This example runs my_Procedure at 5 P.M.

Application.OnTime TimeValue("17:00:00"), "my_Procedure"
       
This example cancels the OnTime setting from the previous example.

Application.OnTime EarliestTime:=TimeValue("17:00:00"), _
    Procedure:="my_Procedure", Schedule:=False
Avatar billede hubertus Seniormester
24. oktober 2006 - 17:03 #2
Hej Kabbak
Jeg kan desværre ikke få den til at virke i den sammenhæng jeg skal bruge den. Mit behov er at få udført en handlign på 3 forskellige klokkeslet: kl. 08.00, kl 11.00 og kl. 15.00
hvordan vil den vbakode se ud? og hvor skal koden placeres?
mvh. Hubertus
Avatar billede kabbak Professor
24. oktober 2006 - 17:22 #3
Hvis det er samme makro der skal køres, så skulle dette virke

Denne i ThisWorkbook modulet, såstarter den når mappen åbnes

Private Sub Workbook_Open()
Dim Tid As Date
    Select Case Time()
    Case Is < TimeValue("08:00:00"): Tid = TimeValue("08:00:00")
    Case Is < TimeValue("11:00:00"): Tid = TimeValue("11:00:00")
    Case Is < TimeValue("15:00:00"): Tid = TimeValue("15:00:00")
    Case Else
        Tid = TimeValue("08:00:00")
    End Select
    Application.OnTime Tid, "my_Procedure" ' ret "my_Procedure" til dim makroes navn
End Sub

Og din nuværende makro i et modul

Public Sub my_Procedure()
    Dim Tid As Date
    '--------------------------------------------------Din nuværende kode starter -----------
   
   
   
    '          din nuværende kode
   
   
   
   
    '--------------------------------------------------Din nuværende kode slutter -----------
   
    Select Case Time()
    Case Is < TimeValue("08:00:00"): Tid = TimeValue("08:00:00")
    Case Is < TimeValue("11:00:00"): Tid = TimeValue("11:00:00")
    Case Is < TimeValue("15:00:00"): Tid = TimeValue("15:00:00")
    Case Else
        Tid = TimeValue("08:00:00")
    End Select
    Application.OnTime Tid, "my_Procedure"

End Sub
Avatar billede hubertus Seniormester
25. oktober 2006 - 18:38 #4
Hej Kabbak - vil du knytte nogle kommentarer til din kode. F.eks. hvorfor optræder case sætningen i såvel thisworkbook og i et modul?.
Er proceduren my_procedure rekursiv?
Avatar billede kabbak Professor
25. oktober 2006 - 18:53 #5
proceduren my_procedure , kan omdøbes til hvad det skal være, bare du husker at også  at rette i  Application.OnTime Tid, "my_Procedure"

Der er 2 kald:

1.
den i hisWorkbook modulet er for første start, da vi ikke ved hvad tiden er, er vi nødt til at tjekke, hvornår den kan starte første geng.

2.
Den i modulet er for at sætte starten næste gang og da vi stadigvæk ikke kender tiden, så tjekkes igen.
Avatar billede hubertus Seniormester
25. oktober 2006 - 19:13 #6
ok, men er der så en timer der passer tiden?
Min kode består af mange subrutiner. Hvis jeg blot sætter et procedurekald ind der hvor du skriver den nuværende kode, hvad skal så trigge proceduren?
Avatar billede hubertus Seniormester
25. oktober 2006 - 19:17 #7
Hovedformålet med regnearket er at brugerne skal indtaste oplysninger via en userform. ovenstående kode skal så med faste mellemrum gemme/sende regnearket til en extern mailkonto. dvs. min primære kode har intet med ovennævnte kode at gøre. den skal blot kører i baggrunden - gør det en forskel?
Avatar billede kabbak Professor
25. oktober 2006 - 21:31 #8
Application.OnTime , holder selv øje med tiden, så den kører når tiden er indtruffet og kører uafhængig af anden kode
Avatar billede hubertus Seniormester
27. oktober 2006 - 06:25 #9
Den virker perfekt - tak for hjælpen.
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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