EXCEL-VBA Application.OnTime használata form-ban
2022-05-21T21:15:14+02:00
2022-05-22T12:23:21+02:00
2022-08-12T09:15:30+02:00
PROMETHEUS11
Sziasztok!

egy kis segítségre lenne szükségem.

Ha az alábbi időzítést egy Module-ban csinálom, akkor működik, de én egy Form egyik ToggleButton-jára szeretném  megvalósítani mindezt. Hogyan tudnám ezt megoldani? Nem jó neki a ToggleButton2,
se a ToggleButton2_Click. Hogyan tudnék hivatkozni rá? Köszi!

Private Sub ToggleButton2_Click() MsgBox "aktív" idozito = Now + TimeSerial(0, 1, 0) Application.OnTime idozito, "ToggleButton2", , True End Sub
Mutasd a teljes hozzászólást!
Szia!
Amíg a Userform látható, addig a rajta levő vezérlők természetesen modulból is elérhetőek, csak a teljes hivatkozást kell használni a modulban:
pl. Userform1.Checkbox1.Value
Fontos, hogy ez valóban csak addig működik, amíg a Userform a memóriában van. 
De miért kellene átraknod általános modulba a Click alatti műveleteket, az a sub lehet a form kódlapján nem eseménykezelő eljárásként.
Az időzítést végző makrókat viszont mindenképpen általános modulba kell tenni.
Üdv.
Mutasd a teljes hozzászólást!

  • Szia!
    Mit szeretnél elérni? Hogy 1 percenként nyomogassa a Togglebuttont? Ez mire lenne jó?
    Ha azt szeretnéd, hogy Togglebutton_click-re induljon az időzítés, akkor külön eljárásba kell tenned az időzítést és azt az eljárást kell meghívni a Click eseménykezelőben.
    Üdv.
    Mutasd a teljes hozzászólást!
  • Azt szeretném, hogy 1 percenként futtassa le nekem azt, ami a Togglebutton_Click alatt van.
    Ha külön eljárásba teszem az időzítést, és azt a meghívom a Click eseményben, akkor az az időzítés hogyan fogja nekem lefuttatni azt, ami a Click alatt van?

    Private Sub ToggleButton2_Click()


    MsgBox "aktív"


    idozito = Now + TimeSerial(0, 1, 0)


    Application.OnTime idozito, "MIT ÍRJAK IDE?", , True


    End Sub
    Ha a fenti időzítőt a Modile-ba írom akkor a "MIT ÍARJAK IDE?! helyére csak beírom a VALAMI Sub-ot és ez így rendben van. De a Form-ban a ToggleButton2-re hogyan hivatkozzak?

    Nem tudom sajnos.

    Vagy muszáj nekem ezt az egészet kivenni a Form-ból és a Module-ba egy Sub alá írni az egészet?
    Mutasd a teljes hozzászólást!
  • Szia!
    Akkor így ismételném meg a kérdést:
    Mi az amit a Togglebutton click eseményében szeretnél lefuttatni?
    Mert most egyenlőre továbbra is azt látom, hogy nyomogatni szeretnéd a Togglebuttont.

    Ha külön eljárásba teszem az időzítést, és azt a meghívom a Click eseményben, akkor az az időzítés hogyan fogja nekem lefuttatni azt, ami a Click alatt van?

    Az időzítést is külön eljárásba kell tenni és
    azt is külön eljárásba kell tenni, amit a Click alatt le szeretnél futtatni és ennek a végén meg kell hívnod az időzítő eljárást. Az időzítőben ennek az eljárásnak a nevét kell megadnod.
    Az időzítés beindításhoz egyszer le kell futtatnod az időzítő eljárást.
    Kb így néz ki:

    Sub időzítés() Application.OnTime Now+ Timeserial(0,1,0),clickeljárás,,True End Sub Sub clickeljárás() amit csinálni kell időzítés End Sub
    Így Togglebutton Click eseménykezelőjében is csak a clickeljárást kell meghívnod.
    Az időzítés elindítását pedig ott kell meghívnod, ahonnan az ismétlődéseket szeretnéd megkezdeni. Ezután a clickeljárás minden lefutása végén megismétli az időzítést, mindaddig, amíg valahol le nem állítod azt.
    Vigyázz, ha nem állítod le, akkor bezárás/kilépés után is újraindul az Excel, ha az időzítés aktív.
    A leállításhoz pedig pontosan meg kell adnod az előjegyzett időpontot, különben nem találja meg! Ezért én mindig egy - modulszintű - változóba teszem az indítás időpontját és akkor a változóval biztosan le lehet állítani az időzítés végrehajtását.
    A modul elejére, eljáráson kívül:

    Dim ujido as Date 'A makróban ujido = Now()+ TimeSerial(0,1,0) Application.Ontime ujido,eljarasnev,,True 'Leállítás: If ujido>Now() Then Application.OnTime ujido,eljarasnev,,False
    Üdv.
    Mutasd a teljes hozzászólást!
  • A Click alatt CheckBox-okhoz kötött feltételek vannak, melyek módosítanak cellatartalmakat.
    A kiválasztott Checkboxok alatti feltételt lehet gombnyomásra is aktiválni, és lehet(ne) időzíteni is.

    A Module-ból nem érem el a CheckBoxokat. Emiatt akkor a CheckBox-ok True/Fals értékét bele kéne raknom egy Public változóba, majd a module-ba írt eseményből arra hivatkozni? Tehát az egész Click alatti eseményt át kell raknom egy Sub alá a Module-ban, azzal a változtatással, hogy abban a fentebb írt Public változóra hivatkozok, aminek az értékét a Checkbox adja majd a form-ban.

    Jól gondolom?
    Mutasd a teljes hozzászólást!
  • Szia!
    Amíg a Userform látható, addig a rajta levő vezérlők természetesen modulból is elérhetőek, csak a teljes hivatkozást kell használni a modulban:
    pl. Userform1.Checkbox1.Value
    Fontos, hogy ez valóban csak addig működik, amíg a Userform a memóriában van. 
    De miért kellene átraknod általános modulba a Click alatti műveleteket, az a sub lehet a form kódlapján nem eseménykezelő eljárásként.
    Az időzítést végző makrókat viszont mindenképpen általános modulba kell tenni.
    Üdv.
    Mutasd a teljes hozzászólást!
  • Köszönöm ismét a felvilágosítást!
    Mutasd a teljes hozzászólást!
abcd