Laskentapäivitys heti makrolla, miten?

autopäivitys

Kun Nyt-funktio vaihtaa hetken määritellyn rajan yli, tapahtuu laskenta. F9- näpäyksellä saa ajan muuttumisen näkymään koskematta soluihin, mutta nyt tarvittaisiin tilanteen ajantasalle saaminen koskematta tietokoneeseen:
Excel käynnissä, kello raksuttaa, solussa aika etenee vaikka ei paineta F9, ja sitten kun klo menee yli rajan, tapahtuu jos-funktioon määrätyt laskennat.

Mitkä makrokomennot tekisivät tämän Nyt-funktion ajan tasalla pysymisen ilman F9 näpäystä?

17

382

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • Mr. VBA

      Moi, laita Excel käynnistämään makro automaattisesti haluamanasi raja-aikana.
      reaaliajassa toimiva kello voi viedä turhaan tehoja koneesta.

      ThisWorkbook kohtaan seuraava:

      Private Sub Workbook_Open()

      'solussa A1 haluttu alkamisaika makrolle nimeltä Päämakro
      'voi laittaa myös suoraan sulkeisiin ajan muodossa TimeValue("13:15:00")

      On Error Resume Next

      Dim Aika As Date
      Aika = Range("A1").Value

      Application.OnTime TimeValue(Aika), "PääMakro"

      End Sub

      ja moduuliin esim.

      Sub PääMakro()

      MsgBox "aloitetaan laskenta"
      ' tähän koodia

      End Sub

      • Autopäivitys

        Kiitos, Mr VBA, tutkiskelen, opiskelen ohjettasi


      • jos tallennatkin jonkun muun kuin sun ajatuksissasi olleen taulukon ollessa aktiivinen, niin mitäs tapahtuu seuraavalla kerralla kun avaat ExCELin... ;-)
        ei hjuva

        Keep EXCELing
        @Kunde


    • Mr. VBA

      Moi, laita vielä alla oleva lisäys mukaan, jotta makro ei käynnisty myöhemmin automaattisesti itsekseen työkirjan sulkemisen jälkeen (=tämä voi muutoin tapahtua, jos olet sulkenut työkirjan ennen kuin ajastettu makro on suoritettu)

      ThisWorkbook kohtaan seuraava:

      Private Sub Workbook_BeforeClose(Cancel As Boolean)

      On Error Resume Next
      Dim Aika As Date
      Aika = Range("A1").Value

      Application.OnTime TimeValue(Aika), "PääMakro", , False

      End Sub

    • Mr. VBA

      Moi Kunde, ei mitään. Kerrotko tarkemmin mitä sinulla tapahtui ?

      • "Moi Kunde, ei mitään."

        Aivan oikein! Ei tapahdu mitään

        Aika = Range("A1").Value

        jos oletuksena oli vaikka Taul1 ja siellä toi arvo haetaan, toimiii niin kauan oikein kun olet tallentanut EXCELin Taul1 ollessa aktiivinen. Jos sen sijaan tallennat esim. Taul2 ollessa aktiivinen, ei toimi koska A1 arvo luetaan aktiivisesta taulukosta ja todennäköisesti muissa taulukoissa ei ole tota aikaa A1:ssa

        ymmärsitkö pointtini?


        Keep EXCELing
        @Kunde


    • Mr. VBA

      Moi, tuo ongelma pois kun laittaa alla olevan aikaisemman sijaan:

      ThisWorkbook kohtaan seuraava:

      Private Sub Workbook_Open()

      'ensimmäisellä välilehdellä solussa A1 haluttu alkamisaika makrolle nimeltä Päämakro
      'voi laittaa myös suoraan sulkeisiin ajan muodossa TimeValue("13:15:00")

      On Error Resume Next

      Dim Aika As Date
      Aika = ActiveWorkbook.Sheets(1).Range("A1").Value

      Application.OnTime TimeValue(Aika), "PääMakro"

      End Sub

      Ymmärsin ensimmäisen viestisi kyllä aivan erilailla..

    • Mr. VBA

      vielä ThisWorkbook kohtaan sama tarina, ettei itsekseen käynnistele:

      Private Sub Workbook_BeforeClose(Cancel As Boolean)
      On Error Resume Next
      Dim Aika As Date
      Aika = ActiveWorkbook.Sheets(1).Range("A1").Value
      Application.OnTime TimeValue(Aika), "PääMakro", , False
      End Sub

      Pääseekö näillä eteenpäin "Autopäivitys" ?

      • Autopäivitys

        Vähän tökkii eli testimakro ei käynnisty automaattisesti. Missäköhän mulla on virhe:

        Soluun A1 laitan ajan muodossa pv ja klo, siis:
        30.4.2013 9:39:00

        Vbasicissa kohdassa: Tämä työkirja:

        Private Sub Workbook_Open()

        'solussa A1 haluttu alkamisaika makrolle nimeltä tietoa
        'Application.OnTime TimeValue(Aika), "Tietoa"

        On Error Resume Next

        Dim Aika As Date
        Aika = Range("A1").Value

        Application.OnTime DateValue(Aika), "Tietoa"

        End Sub

        Moduliin laitettuna:


        Sub Tietoa()
        '
        ' tekstiä_E_H_alueelle Makro
        Range("E5:H24").Select
        Selection.FormulaR1C1 = "Tekstiä"
        End Sub


        Tilanne tarkemmin:
        Kone ja tiedosto ja välilehti koko ajan käynnissä, kyseessä näyttöruutu työntekijöille


    • Mr.VBA

      Moi, Ajastuksen aktivoi tässä aina tiedoston avaaminen, eli avaus pitää tehdä aina aluksi. Koodista sen verran, että DateValue pitää olla TimeValue. Alla yhteenvetona koodia. Miten nyt toimii ?

      ThisWorkbook kohtaan:

      Private Sub Workbook_Open()
      On Error Resume Next
      Dim Aika As Date
      Aika = ActiveWorkbook.Sheets(1).Range("A1").Value
      Application.OnTime TimeValue(Aika), "Tietoa"
      End Sub

      Private Sub Workbook_BeforeClose(Cancel As Boolean)
      On Error Resume Next
      Dim Aika As Date
      Aika = ActiveWorkbook.Sheets(1).Range("A1").Value
      Application.OnTime TimeValue(Aika), "Tietoa", , False
      End Sub

      Moduuliin:

      Sub Tietoa()
      ' tekstiä_E_H_alueelle Makro
      Range("E5:H24").Select
      Selection.FormulaR1C1 = "Tekstiä"
      End Sub

    • Voin kyllä ilman testausta sanoa, että Mr.VBAn koodi ei toimi kuin kerran ja siis ja vain kun avataan tiedosto. Ja toimii silloinkin vain jos avauksessa solussa oleva aika on "tulevaisuudessa"

      Toisaalta kysymyshän oli miten korvata F9 napin painallus, jos solussa aika muuttuu ja raja ylittyy
      ihan piece of case, mutta katsotaan miten Mr.VBA ratkaisee hommat...
      jos ei onnaa, niin ehkäpä Kunde auttaa...


      muuten HYVÄÄ VAPPUA KAIKILLE etenkin mun foorumin lukijoille!

      KEEP EXCELing
      @Kunde

      • Mr.VBA

        Moi, tiedosto tarvitsee avata vain kerran. Kannattaa kunde testata. Ajattelin aikaisemmin työntekijää, joka tulee ysiltä töihin ja avaa koneen ja tiedoston ja sulkee koneen viideltä. Mutta jos tiedosto kokoajan siis auki, niin toimii joka vuorokausi samaan aikaan vaikka A1 pvm formaatti olisi 1950-luvulla. Kelloaika merkitsee;)

        Mutta ..tässä kuitenkin koodia aikaisemman sijasta ja makro, jossa haluttu aloitus-aika. Tiedosto auki ja kellonaika moduuli vaan päälle. testauskommentit ?

        ThisWorkbook kohtaan:
        Private Sub Workbook_BeforeClose(Cancel As Boolean)
        Dim LisääAikaa As Date
        LisääAikaa = TimeValue("00:00:01") Now
        On Error Resume Next
        Application.OnTime LisääAikaa, "KellonAika", , False
        End Sub

        Moduuleihin:

        Sub KellonAika()
        Dim LisääAikaa As Date
        Dim Käyntiin As Date
        'alle haluttu käynnistys-aika joka vuorokausi
        Käyntiin = ("23:59:59")
        ActiveWorkbook.Sheets(1).Range("A1").Value = Time
        If Time = Käyntiin Then Tietoa
        LisääAikaa = TimeValue("00:00:01") Now
        Application.OnTime LisääAikaa, "KellonAika"
        End Sub

        Sub Tietoa()
        ' tekstiä_E_H_alueelle Makro
        Range("E5:H24").Select
        Selection.FormulaR1C1 = "Tekstiä"
        End Sub


      • Mr.VBA kirjoitti:

        Moi, tiedosto tarvitsee avata vain kerran. Kannattaa kunde testata. Ajattelin aikaisemmin työntekijää, joka tulee ysiltä töihin ja avaa koneen ja tiedoston ja sulkee koneen viideltä. Mutta jos tiedosto kokoajan siis auki, niin toimii joka vuorokausi samaan aikaan vaikka A1 pvm formaatti olisi 1950-luvulla. Kelloaika merkitsee;)

        Mutta ..tässä kuitenkin koodia aikaisemman sijasta ja makro, jossa haluttu aloitus-aika. Tiedosto auki ja kellonaika moduuli vaan päälle. testauskommentit ?

        ThisWorkbook kohtaan:
        Private Sub Workbook_BeforeClose(Cancel As Boolean)
        Dim LisääAikaa As Date
        LisääAikaa = TimeValue("00:00:01") Now
        On Error Resume Next
        Application.OnTime LisääAikaa, "KellonAika", , False
        End Sub

        Moduuleihin:

        Sub KellonAika()
        Dim LisääAikaa As Date
        Dim Käyntiin As Date
        'alle haluttu käynnistys-aika joka vuorokausi
        Käyntiin = ("23:59:59")
        ActiveWorkbook.Sheets(1).Range("A1").Value = Time
        If Time = Käyntiin Then Tietoa
        LisääAikaa = TimeValue("00:00:01") Now
        Application.OnTime LisääAikaa, "KellonAika"
        End Sub

        Sub Tietoa()
        ' tekstiä_E_H_alueelle Makro
        Range("E5:H24").Select
        Selection.FormulaR1C1 = "Tekstiä"
        End Sub

        Miksi noin monimutkaisesti, jos Excel auki kokoajan ja 00:00:00 tapahtuu makron suoritus?

        yksi helppo keino olisi käyttää Windowsin omaa ajastettua toimintaa ja silloin Excel voi olla suljettuna kokoajan. Toki, jos pitää lukea dataa jostain kokoajan niin ei voi käyttää. Mutta jos esim. juuri, ennen makron suoritusta voidaan lukea dataa sisään silloin tekisin itse tällä, koska ei tartte Excelin olla auki resursseja viemässä.
        siis START/ ADMINISTRATIVE TOOLS/ SHEDULE TASK ja siellä lisäät ton Excelin avaamisen ja Auto-Open tapahtumaan tarvittavat koodit ...


        Keep EXCELing
        @Kunde


      • kunsepuu

        Toisaalta kysymyshän oli miten korvata F9 napin painallus, jos solussa aika muuttuu ja raja ylittyy
        kuinkas to inyt käynnistää makron?
        ei siinä tartte tommosia...
        ei vastaa kysymykseen ;-)

        KEEP EXCELing
        @Kunde


    • autopäivistys

      Tilanne siis:
      Excel-tiedosto on koko ajan käynnissä ja näkyvissä ja ilman F9- nappia pitäisi saada laskenta ajantasalle klon mukaan eli tarkemmin vuorokauden vaihtuessa.
      Ihan alussa mainitsin, että Excel pysyy käynnissä.

      Itsekin osaan tehdä makron, joka automaattisesti rullaa kun tiedoston käynnistää, se on nimellä auto open.
      Tämä vaan nyt ei riitä.

      Kiitos asiaa pohtineille.

      Mites, Kunde, jos kerrot tämän sivuillasi, mikä on osoite?

    • autopäivitys

      Tämä viestiketju päivittyy vähän kummallisessa järjestyksessä.

      Mutta kiitos VBA ja Kunde, yritän käyttää teidän ohjeitanne ja kerron miten kävi.

    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Päivän Riikka: polttoöljyn hinta räjähti

      Näyttää tuo putinismi ilmenevän persuissa myös Suomen yrittäjien kampittamisena. Polttoöljy on se katalyytti, joka pitää
      Maailman menoa
      36
      2141
    2. Mökkejä ostellaan nyt ihan hulluna!

      Tyypilliset lainamäärät on yli 500 000€ mökkejä ostellessa eli erityisesti tuollaiset miljoonamökit on nyt suomalaisten
      Maailman menoa
      59
      1955
    3. Helsingin yllä valopalloja

      https://www.iltalehti.fi/kotimaa/a/1508be00-28c9-4156-83dc-0be5e7aa3066 "Helsingin taivaalla lensi lauantaina puolen yön
      Sinkut
      121
      1900
    4. HÄLYYTYS!!

      Ukraina se hyökkää jo Suomen maaperälle. https://www.iltalehti.fi/kotimaa/a/645b83ce-e074-4f00-8b99-245d01b38a36
      NATO
      377
      1612
    5. Kovasti on hävittäjiä ilmassa. Nytkö se alkoi?

      Onko nyt sota ?? `Vai harjoituksiako vain? Hävittäjät pörrää kovasti.
      Kouvola
      103
      1611
    6. Helsingin yllä lensi yöllä jotain outoa puolen yön aikaan valopalloja

      Poliisi on saanut tapauksesta yhden havaintoilmoituksen. Valopalloja oli noin parikymmentä ILtalehdessä on video tapah
      Maailman menoa
      124
      1444
    7. Millainen on naisellinen nainen

      Nyt kun taas mennään keikkuen kesään, niin millainen nainen on naisellinen? Pukeutuminen, olemus, puhetapa, jne. Vilma n
      Sinkut
      182
      1072
    8. Raamatullinen kaste

      Seurakunnassamme kastettiin mm eräs muslimi, joka oli tullut uskoon. Hän oli ollut Suomessa viitisen vuotta. Hän oli lu
      Kaste
      53
      947
    9. Mitkä asiat kaivatun ajattelussa

      Ihmetyttävät? Mikä on tullut yllätyksenä?
      Ikävä
      73
      875
    10. Mitkä olisivat kolme tärkeintä

      vihjettä kaivatustasi?
      Ikävä
      27
      869
    Aihe