OnTime 1004 hiba
2021-08-26T10:57:19+02:00
2021-08-26T16:12:36+02:00
2022-07-18T22:07:01+02:00
alamogordo
Sziasztok!

Tudom tele a padlás a témával. 2 napja böngészem a fórumokat és nem találtam megoldást a problémámra.

Az a bajom, hogy egy OnTime methodot szeretnék bezárni a munkafüzet bezárásakor de mindig 1004-es hibára fut. :(

Dim rtime As Date
Sub Workbook_Open()
Dim rtime As Date
rtime = Now + TimeValue("00:02:00")

Application.OnTime earliesttime:=rtime, procedure:="ment", schedule:=True

Ezzel szépen elindul és teszi a dolgát.

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.OnTime earliesttime:=rtime, procedure:="ment", schedule:=False

End Sub

 Erre viszont rögtön 1004-es hibát dob.

Próbáltam betenni a leállítást Sub-ba, de nem állította le, és újranyitotta a file-t.
Mutasd a teljes hozzászólást!
Szia!
Azt nézd meg légy szíves, hogy az rtime van-e valamelyik eljárásban még definiálva. Sehol máshol ne legyen csak ott a Public változó megadásakor. Máshol mindenütt csak értéket adj neki. Esetleg, hogy még biztosabb legyen a dolog, használd a ThisWorkbook.rtime=... nevet, így biztosan a Thisworkbook modulban definiált változónak adsz értéket.
Azért kell a modul név is szerintem, mert nem általános modulban definiáltad a Public változót. Ilyenkor kell a modulnév is a változónév elé.
A mentés lefutása után kell, hogy az új értékét lásd a változónak, ami nagyjából 2 perc kellene legyen (ill. valamivel kevesebb), hiszen a mentésben időzíted újra.
Ha kilépéskor nincs értéke, azt jelenti, hogy nem kapott ismételten értéket valami miatt. Ezért van a hibaüzenet, mert nem talál időzítést, amit le kellene állítania.
Üdv.
Mutasd a teljes hozzászólást!

  • Szia!
    Két dolgot gondolok:
    1. Nagy valószínűséggel a fájl bezárásakor az rtime változód értéke már bőven meghaladta az aktuális időt, így nem tudja összekapcsolni a leállítás kérést az eljárással.
    2. A ment eljárásodban is be kell állítanod az OnTime következő időpontját. Emiatt az rtime változódat publikusnak kell definiálni, hogy más eljárások is láthassák.
    +1 Az első pontban leírtak miatt mielőtt a leállítást beállítanád, ellenőrizni kell, hogy van-e érvényes indítási beállítás.
    A 2. pontban foglaltak miatt kétlem, hogy műxik a 2 percenkénti mentés, hiszen azt csak egyszer indítod el. (Kivéve, ha benne van a ment eljárásban az ismételt időzítés.)
    Az automatikus mentéshez miért nem használod az
    Workbook.AutoSaveOn tulajdonságot, amihez a Workbook..Autorecover.Time értékét megadva megadhatod a mentések gyakoriságát is.
    Üdv.
    Mutasd a teljes hozzászólást!
  • Szia!

    Az Workbook.AutoSaveOn azért nem jó mert másik helyre kerül a mentés SaveCopyAs-el.
     
    A ment eljárásban be van állítva az OnTime következő időpontja, Menteget is szépen.



    A Workbook_Open előtt átírtam publicra az rtime-ot, de így sem működik. :(
    Mutasd a teljes hozzászólást!
  • Szia!
    Megnézed a leállítás előtt, hogy van-e érvényes időpont, amikor elindulna a mentés?
    Próbáld lépésenként futtatni a BeforeClose eljárást és megnézni az rtime aktuális értékét.
    MÁS:
    Az AutoRecover-nek megadhatod, hogy hova mentse a fájlt:
    help
    Üdv.
    Mutasd a teljes hozzászólást!
  • Szia!



    Néztem és valami nem stimmel.

    Nyitáskor van idő. el is indul a mentés.
    A mentés sub elején semmi, lefut, mentés végén van idő. ami furcsa mert futás után meg kellene kapnia.?
    Kilépéskor ugyancsak semmi.

    A nyitás
    Public rtime As Date
    Public ztime As Date
    Public Sub Workbook_Open()

    rtime = Now + TimeValue("00:01:00")

    MsgBox "nyit " & rtime "Itt van idő"

    Application.OnTime earliesttime:=rtime, procedure:="ment", schedule:=True

    Mentés:

    MsgBox "ment 1 " & rtime "Itt már rtime üres"

    rtime = Now + TimeValue("00:01:00")

    ThisWorkbook.SaveCopyAs .....

    Application.OnTime earliesttime:=rtime, procedure:="ment", schedule:=True
    ztime = rtime

    MsgBox "ment 2 " & rtime "rtime nem üres"

    Zárás:
    Public Sub Workbook_BeforeClose(Cancel As Boolean)

    Zár

    End Sub

    Sub Zár()

    MsgBox "zár " & ztime "ztime üres"

    Application.OnTime ztime, "Ment", , False
    End Sub
    Mutasd a teljes hozzászólást!
  • Szia!
    Azt nézd meg légy szíves, hogy az rtime van-e valamelyik eljárásban még definiálva. Sehol máshol ne legyen csak ott a Public változó megadásakor. Máshol mindenütt csak értéket adj neki. Esetleg, hogy még biztosabb legyen a dolog, használd a ThisWorkbook.rtime=... nevet, így biztosan a Thisworkbook modulban definiált változónak adsz értéket.
    Azért kell a modul név is szerintem, mert nem általános modulban definiáltad a Public változót. Ilyenkor kell a modulnév is a változónév elé.
    A mentés lefutása után kell, hogy az új értékét lásd a változónak, ami nagyjából 2 perc kellene legyen (ill. valamivel kevesebb), hiszen a mentésben időzíted újra.
    Ha kilépéskor nincs értéke, azt jelenti, hogy nem kapott ismételten értéket valami miatt. Ezért van a hibaüzenet, mert nem talál időzítést, amit le kellene állítania.
    Üdv.
    Mutasd a teljes hozzászólást!
  • A változó csak a nyitáskor van definiálva.
    Az értékek mindenhol megjelennek. A Thisworkbook... dolog működik.
    Zárás után sem nyílik meg a táblázat.

    Köszönöm szépen a segítségen.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd