Avatar billede brilleabe Nybegynder
15. maj 2004 - 14:39 Der er 26 kommentarer og
1 løsning

Fejl ved Workbook_Open

Jeg har et ark som indeholder makroer som køre automatisk med 30 min. mellemrum hele døgnet. Jeg gerne vil have at arket køre mere end een dag ad gangen. Derfor har jeg indsat:

Call Workbook_Open

lige inden 'end sub' i Workbook_Open.

Problemet er at nu fejler arket når det åbnes:

Run-time error '28':
Out of stack space

Nogen bud på hvordan jeg kommer af med dette problem ?
Avatar billede jkrons Professor
15. maj 2004 - 14:44 #1
Problemet er, at du lader makroen kalde sig selv i en uendelig lykke. Det vil medføre at du løber tør for stack plads ret hurtigt.

Jeg kan ikke lige gennemskue hvad det er du prøver at opnå, så umiddelbart har jeg ingen forsalg til, hvordan, det kan løses.
Avatar billede kabbak Professor
15. maj 2004 - 15:01 #2
I Workbook open

Private Sub Workbook_Open()
StartProc
End Sub

I et modul


Public RunWhen As Double
Public Const cRunWhat = "Proc"

Sub StartProc()
RunWhen = Now + TimeSerial(0, 30, 0)
Application.OnTime earliesttime:=RunWhen, procedure:=cRunWhat, _
    schedule:=True

End Sub

Sub Proc()
' din kode der skal køre hver halve time

  Call StartProc ' starter en ny igen, om en halv time
End Sub

Sub StopTimer()
'Her stoppes den automatiske makro, hvis det er nødvendig
  On Error Resume Next
  Application.OnTime earliesttime:=RunWhen, _
      procedure:=cRunWhat, schedule:=False
End Sub
Avatar billede brilleabe Nybegynder
15. maj 2004 - 15:13 #3
LIdt mere forklaring:
Jeg har en makro som jeg kører 24 gange i døgenet via Application.OnTime osv. i 'ThisWorkbook'

når jeg åbner arket kører makroen 24 gange - og så stopper den. Derfor har jeg (jfr http://www.eksperten.dk/spm/312783) indsat 'call Workbook_Open' inden End Sub i ThisWorkbook. Ups....
Jeg kan nu se at jeg måske skal indsætte det i den makro som jeg kalder og ikke i ThisWorkbook.

Jeg tester lige - så vender jeg tilbage!
Avatar billede brilleabe Nybegynder
25. maj 2004 - 18:42 #4
Jeg kan stadig ikke få det til at funke. Det eneste jeg vil ha' er at min:

Application.OnTime TimeValue("20:00:00"), "RunUpdate"

kører HVER dag klokken 2000 og ikke bare første gang. (jeg har mange Application.OnTime TimeValue("xx:00:00"), "RunUpdate" i min workbook_open)
Avatar billede brilleabe Nybegynder
25. maj 2004 - 18:58 #5
Jeg har flere

Application.OnTime TimeValue("xx:xx:00"), "xxxxxxx"

Der er nogen rutiner som skal køre hvert 15 min og andre kun en til to gange pr døgn.
Avatar billede kabbak Professor
25. maj 2004 - 19:21 #6
sub RunUpdate()

Din nuværende kode

Application.OnTime TimeValue("20:00:00"), "RunUpdate" ' kald til næste gang
end sub
Avatar billede kabbak Professor
25. maj 2004 - 19:22 #7
Hvis du altid kalder den igen ved slut af koden, er den klar næstegang
Avatar billede brilleabe Nybegynder
25. maj 2004 - 20:01 #8
dvs til slut i mine moduler skal jeg skrive:

call workbook_open

?

Det er det jeg har forsøgt - den fejler..
Måske har jeg sat den ind det forkerte sted ???
Avatar billede kabbak Professor
25. maj 2004 - 20:06 #9
nej du skal bruge
Application.OnTime TimeValue("20:00:00"), "RunUpdate" ' kald til næste gang
Avatar billede brilleabe Nybegynder
25. maj 2004 - 20:21 #10
Vil det sige jeg skal skrive

application.OnTime TimeValue("20:00:00"), "RunUpdate"
application.OnTime TimeValue("21:00:00"), "RunUpdate"
application.OnTime TimeValue("22:00:00"), "RunUpdate"
application.OnTime TimeValue("23:00:00"), "RunUpdate" osv osv osv..

i slutningen af mine moduler ?
Avatar billede kabbak Professor
25. maj 2004 - 20:52 #11
Sub RunUpdate()
RunWhen = Now + TimeSerial(0, 0, 2) 'TimeSerial(Timer, Minutter, sekunder)
' lægger en time til den værdi klokken har


'
din kode

Application.OnTime TimeValue(RunWhen), "RunUpdate"

End Sub
Avatar billede brilleabe Nybegynder
26. maj 2004 - 00:36 #12
JEG har sat den i gang - så er jeg spendt på at se om det virker.
Avatar billede brilleabe Nybegynder
29. maj 2004 - 08:49 #13
Hej igen kabbak,

jeg har prøvet at lave en test med RunWhen og det virker når jeg kun har een makro som jeg gerne vil køre. Men problemet er lidt at det drejer sig om flere makroer som skal køre på forsklellige tidspunkter. Et par af dem skal kun køre 1-2 gange i døgnet på FASTE tidspunkter og et par andre hver halve time. Det er vigtigt at de køre på faste klokkeslet hver dag.

Måden med at skrive:

application.OnTime TimeValue("20:00:00"), "RunUpdate"
application.OnTime TimeValue("21:00:00"), "RunUpdate"
application.OnTime TimeValue("22:00:00"), "RunUpdate"
application.OnTime TimeValue("23:00:00"), "RunUpdate" osv osv osv..

i This Workbook er meget overskuelig og præcis (selv om det er mange linier).
Er det overhovdet muligt at gøre det på den måde eller skal jeg opgive og bruge RunWhen osv. ?
Avatar billede bak Forsker
29. maj 2004 - 14:23 #14
En ide... Opret et ekstra ark hvor du laver hele køreplanen med makronavn i kolonne A og kørselstidspunkt i kolonne B.
Sorter efter kørselstidspunkt.

Brug så en makro som denne

Public Række as Long  'husk at få denne linie med

Sub ScheduleNext()
rk = ThisWorkbook.Sheets("Ark1").Range("A1").End(xlDown).Row
If rk = række Then række = 1 Else række = række + 1
makro = ThisWorkbook.Sheets("Ark1").Range("A" & række).Value
tid = ThisWorkbook.Sheets("Ark1").Range("B" & række).Text
Application.OnTime tid, makro
End Sub

i bunden af de makroer du nu vil kalde indsætter du så denne linie

ScheduleNext

Nu vil hver makro på arket blive kørt på det kørselstidspunkt du har angivet og når den sidste er kørt startes automatisk forfra.
Avatar billede bak Forsker
29. maj 2004 - 14:25 #15
PS.. fordelen ved denne metode er at du ikke "behøver" at hardkode alle makroer og tidspunkter, men hurtigt kan tilføje nye.
Avatar billede brilleabe Nybegynder
29. maj 2004 - 15:05 #16
Det her sted er simpelhen for cool (læs: brugerene)!
Jeg kan ikke nå at teste i dag, men jeg vender tilbage i løbet af weekenden.
Avatar billede brilleabe Nybegynder
30. maj 2004 - 09:49 #17
>>bak,

Hvor skal jeg indsætte denne linie:
Public Række as Long  'husk at få denne linie med

Og når jeg starter arket - skal jeg så køre ScheduleNext() for at 'starte' timeren ?
Avatar billede bak Forsker
30. maj 2004 - 10:42 #18
I ThisWorkBook kan du sætte denne sub for at starte på næstkommende tidspunkt:

Private Sub Workbook_Open()
Dim x, y As Long
' find NU-tidspunkt
x = Now() - Date
'gå skemaet igennem og find den næste/første tid, der skal køres en makro
With ThisWorkbook.Sheets("Ark1")
    For y = 1 To .Range("A1").End(xlDown).Row
        If x <= .Range("B" & y) Then
            Række = y
            'sæt 1. tid og makro
            ScheduleNext
            Exit Sub
        End If
    Next
End With
End Sub

I et almindeligt modul indsætter du så denne:

Sub ScheduleNext()
Dim rk As Long, Makro As String, Tid
With ThisWorkbook.Sheets("Ark1")
    rk = .Range("A1").End(xlDown).Row
    If rk = Række Then Række = 1 Else Række = Række + 1
    Makro = .Range("A" & Række).Value
    Tid = .Range("B" & Række).Text
End With
Application.OnTime Tid, Makro
End Sub


hvis du giver en email-adr sender jeg et eksempel.
Avatar billede bak Forsker
30. maj 2004 - 10:44 #19
Glemte lige 
Public Række As Long  'husk at få denne linie med

indsættes øverst i det alm. modul  (declarations)
Avatar billede brilleabe Nybegynder
30. maj 2004 - 10:52 #20
pc@privat.dk
Avatar billede bak Forsker
30. maj 2004 - 10:52 #21
der skal lige byttes to linier for at det skal være helt korrekt

Sub ScheduleNext()
Dim rk As Long, Makro As String, Tid
With ThisWorkbook.Sheets("Ark1")
    rk = .Range("A1").End(xlDown).Row
    Makro = .Range("A" & Række).Value
    Tid = .Range("B" & Række).Text
    Application.OnTime Tid, Makro
    If rk = Række Then Række = 1 Else Række = Række + 1
End With
End Sub
Avatar billede bak Forsker
30. maj 2004 - 10:54 #22
sendt
Avatar billede brilleabe Nybegynder
30. maj 2004 - 12:33 #23
modtaget - testet - virker

Fantastisk. Hvis i begge smider et svar, så skal jeg fordele lidt point.
Avatar billede bak Forsker
30. maj 2004 - 12:40 #24
ok
Avatar billede kabbak Professor
30. maj 2004 - 19:06 #25
giv dem til bak, han fuldførte ;-))
Avatar billede brilleabe Nybegynder
31. maj 2004 - 08:58 #26
De er afleveret til bak, men i skal bægge ha' mange tak for indsatsen.
Avatar billede bak Forsker
31. maj 2004 - 17:25 #27
Velbekomme
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