auto save stopt niet

Status
Niet open voor verdere reacties.

edwin13387

Gebruiker
Lid geworden
12 jun 2015
Berichten
46
Beste lezer,

Ik heb een auto-save lopen, deze doet presies wat je verwacht:
Hij slaat het bestand op, om de X sec.

Code:
Public RunWhen As Double
Public Const cRunIntervalSeconds = 300 ' 5 minutes
Public Const cRunWhat = "SaveFile"  ' the name of the procedure to run

Sub Auto_Open()

'  sub automatically ran upon opening the file
RunWhen = Now + TimeSerial(0, 0, cRunIntervalSeconds)
    Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, _
    Schedule:=True
End Sub


Sub SaveFile()
'   check whether file is readonly, if so do nothing, else save file
If Workbooks("blend log.xlsm").ReadOnly = False Then
       
    Workbooks("blend log.xlsm").Save
    End If
    Auto_Open  ' Reschedule the procedure
End Sub

Sub Stop_Timer()

'  sub automatically ran upon closing the file
    On Error Resume Next
    Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, _
    Schedule:=False
End Sub

Deze werkt goed, start bij opstarten en sluit bij Excel afsluiten.
Daar zit echter het probleem, indien het bestand i.p.v. excel sluit blijft deze draaien. Hierbij wordt het bestand na 5 min. geopend, en blijft het dus draaien.
Hoe kan ik dit aanpassen, de macro moet stoppen bij het sluiten van dat bestand.
 
Dat staat al in je code:
Code:
Sub Stop_Timer()

[COLOR="#FF0000"]'  sub automatically ran upon closing the file[/COLOR]
    On Error Resume Next
    Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, _
    Schedule:=False
End Sub

Roep die Sub dus aan in de deze sectie:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
 
Zo iets?

Beste Edmoor,

Bedankt voor de snelle reactie, zoals je wel zal verwachten ben ik hier niet in thuis.
Als ik het goed begrijp als volgt schrijven:

Code:
Public RunWhen As Double
Public Const cRunIntervalSeconds = 300 ' 5 minutes
Public Const cRunWhat = "SaveFile"  ' the name of the procedure to run

Sub Auto_Open()

'  sub automatically ran upon opening the file
RunWhen = Now + TimeSerial(0, 0, cRunIntervalSeconds)
    Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, _
    Schedule:=True
End Sub


Sub SaveFile()
'   check whether file is readonly, if so do nothing, else save file
If Workbooks("blend log.xlsm").ReadOnly = False Then
       
    Workbooks("blend log.xlsm").Save
    End If
    Auto_Open  ' Reschedule the procedure
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)

'  sub automatically ran upon closing the file
    On Error Resume Next
    Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, _
    Schedule:=False
End Sub

Als dit klopt, voor mijn beeldvorming:
De vorige sub werdt dus niet gestart, echter bij het sluiten van Excel sluit alles.
Workbook_BeforeClose word automatisch gestart bij het sluiten van een workbook, en hoeft dus niet geroepen te worden.
Waar is dan dat (cancel as boolean) dan nog voor?
 
Als je een werkboek sluit wordt de sectie Workbook_BeforeClose uitgevoerd. Daarin kan je dus de code zetten om de timer te stoppen.
Mocht je om welke reden dan ook het sluiten van het werkboek willen afbreken dan kan je er de regel Cancel = True in opnemen.
 
toch weer geopend

Hallo,

Zoals bovenstaand in de module geplaatst, maar ik krijg na afsluiten nog steeds de vraag het bestand weer te openen.
(dit omdat hij read-only is, en dus eerst een waarschuwing komt)
Hadden de andere subs ook private gemoeten?

(er is nog een 2e module, met andere code. deze start echter bij druk op een knop)

mvg
Edwin
 
Plaats anders je bestand eens.
 
bestand

Hallo,

@edmoor
Hierbij het bestand, in module autosave draait dit stukje.
Het stuk uit deze module wat ik weg gelaten heb was eigenlijk een 2e sub, maar dat lukte me niet.
Bekijk bijlage blend log.xlsm

@SNB
Dank je, de site wel vaker bekeken, maar ging in veel opzichten boven mijn pet.
Nu is het zeker handig; wat ik hierboven aangeef dat me niet lukte, moet nu wel lukken denk ik.
De manier hoe je hem echter uitlegt, ,,false toevoegen, staat niet in deze sub.
Kan hoe het hier geschreven staat wel? Schedule:=False

mvg
Edwin
 
Laatst bewerkt:
Hallo,

Even onder de aandacht brengen, de macro stopt nog niet.
Iemand die de vragen kan beantwoorden?

mvg
Edwin
 
In je bestand staat niet wat ik in #4 vertelde.
 
Goede morgen,

In het bestand, module autosave, staat de code zoals in #3 beschreven.
Dit is niet goed begrijp ik van je.

Had ik de code als in #1 moeten behouden en een extra sub moeten maken met enkel een call er in?
Dus:
Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean) 
call Stop_Timer

Kun je dit bevestigen voordat ik het er in zet?
Het bestand is al in gebruik, en continue de mensen van het werk houden geeft wat frustraties.

mvg
Edwin
 
Dat zou de timer moeten stoppen op het moment dar het werkboek wordt gesloten inderdaad.
 
Goede morgen,

Geplaatst, maar de auto safe blijft lopen.
dit staat er nu in deze module:
Code:
Public RunWhen As Double
Public Const cRunIntervalSeconds = 300 ' 15 minutes
Public Const cRunWhat = "SaveFile"  ' the name of the procedure to run

Sub Auto_Open()

'  sub automatically ran upon opening the file
RunWhen = Now + TimeSerial(0, 0, cRunIntervalSeconds)
    Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, _
    Schedule:=True
End Sub


Sub SaveFile()


' vernieuwd samples op lab
Dim Sh As Worksheet, Wb As Workbook, SampleRij As Integer, InvulRij As Integer
    InvulRij = 6
    Application.ScreenUpdating = False
Set Wb = Workbooks("blend log.xlsm")
    With Wb.Worksheets("Lab samples")
        .UsedRange.Offset(3).ClearContents   'oude gegevens verwijderen
        For Each Sh In Wb.Sheets
            If Not (Sh.Name = "Algemeen" Or _
                    Sh.Name = "Lab samples") Then
                SampleRij = 4
                Do Until Sh.Cells(SampleRij, 7) = ""
                    If Sh.Cells(SampleRij, 10) <> "" And Sh.Cells(SampleRij, 11) = "" And Sh.Cells(SampleRij, 12) = "" And Sh.Cells(SampleRij, 13) = "" Then
                        .Cells(InvulRij, 2) = Sh.Name
                        .Cells(InvulRij, 3) = Sh.Cells(SampleRij, 6)
                        .Cells(InvulRij, 4) = Sh.Cells(SampleRij, 10)
                        .Cells(InvulRij, 5) = Sh.Cells(SampleRij, 15)
                        InvulRij = InvulRij + 1
                    End If
                    SampleRij = SampleRij + 1
                Loop
            End If
            InvulRij = InvulRij + 1
        Next Sh
    End With
    Application.ScreenUpdating = True
    
'   check whether file is readonly, if so do nothing, else save file
If Workbooks("blend log.xlsm").ReadOnly = False Then
       
    Workbooks("blend log.xlsm").Save
    End If
    Auto_Open  ' Reschedule the procedure
End Sub

Sub Stop_Timer()

'  sub automatically ran upon closing the file
    On Error Resume Next
    Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, _
    Schedule:=False
End Sub

Private Sub Workbook_BeforeClose(cancel As Boolean)
Call Stop_Timer
End Sub

Waar doe ik nog iets fout?
Overigens zie ik nog iets vreemds, het bestand is read only(voor mij als kijker). Dus zou de auto-safe niet mogen werken, zit daar misschien al een probleem?

mvg
Edwin
 
@SNB
Dank je, de site wel vaker bekeken, maar ging in veel opzichten boven mijn pet.
Nu is het zeker handig; wat ik hierboven aangeef dat me niet lukte, moet nu wel lukken denk ik.
De manier hoe je hem echter uitlegt, ,,false toevoegen, staat niet in deze sub.
Kan hoe het hier geschreven staat wel? Schedule:=False

mvg
Edwin

Lezen is blijkbaar niet je 'fort'.

naast vele andere voorbeelden op de webpagina:
Code:
Private t

Sub M_snb_ontime_starten()
    MsgBox "voorbeeldtekst"

    t = DateAdd("s", 5, Time)
    Application.OnTime t, "Thisworkbook.M_snb_ontime_starten"
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Application.OnTime t, "ThisWorkbook.M_snb_ontime_starten", , False
End Sub
 
Goede morgen,

Dat ik te lui ben te lezen, is me iets te kort door de bocht.
Maar de methode die je beschrijft op je site, was niet gelijk aan wat er in de macro staat.

Om niet alles om te hoeven gooien, probeer ik zo min mogelijk te wijzigen. Of de huidige wijze kan niet werken.
Het bestand waar ik dit uit heb gehaald, heeft gefunctioneerd. Ik wilde deze dus werkend krijgen.

Gezien dit blijft doorslepen een test gedaan met de code die je aangaf, en ook deze deed niets.
Er zit dus een probleem hoe ik het plaats en niet wat ik plaats.

Nu heb ik het probleem gevonden, mede door het werkend proberen te krijgen van wat je als voorbeeld code gaf:
Ik heb alle code in een module staan, die ik als ik het me goed herinner heb aangemaakt door een macro op te nemen en dan te wissen.
In zowel het voorbeeld als deze code werkt het in deze module niet, als ik het in this workbook kopieer wel.

Nu de code:
Code:
Private Sub Workbook_BeforeClose(cancel As Boolean)
run "Stop_Timer"
End Sub
in this workbook staat werkt alles.

Bedankt voor de hulp, ik zoek nog even hoe ik deze op opgelost kan zetten.
 
Op de site staat duidelijk dat de workbook_beforeclose code in de codemodule van het werkboek moet worden gezet.
 
Gelukkig plaats ik in de 1e reactie dan ook dat ik niet thuis ben in macro's.
Tot 1,5 uur geleden wist ik niet dat dat deel, de thisworkbook module, bestond.

Dus als ik dan lees dat je het in this workbook moet plaatsen, ga ik er van uit dat het in de module die in dat speciafieke workbook geschreven is moet staan.

Verder wordt dit een zinloze discusse; jij vind dat ik beter moet lezen, en ik snap er nog te weinig van.
Voegt verder niets toe.
 
Dat doe ik alleen als jij beweert dat ergens iets niet staat. Dat is onjuist. Dat je niet begrijpt wat er staat is dan wel juist.
Maar ook voor VBA geldt: begin bij het begin en niet op een nivo waar je nog helemaal niet aan toe bent.
 
Beste SNB,

Lezen is niet mijn sterkste vak, kun je even aangeven waar ik zeg dat iets niet op je site staat?

mvg
Edwin
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan