Auttakaa viisaammat

Uunoa

Ongelma on tämä. Tarkoitus olisi seurata prosessiin käytettyä kokonaisaikaa. Saan kokonaisajanajan kyllä näkymään, mutta reaaliaika näkyy aina vasta sitten kun painan "F9" eli Excel päivittyy tietokoneen aikaan. Onko mahdollista saada Excel päivittämään itse itsensä, sanotaanko vaikka 5 minuutin välein, ettei tarvitsisi aina käydä näppäämässä. Vielä hienompaa olisi jos aika näkyisi kokoajan reaaliajassa.

14

946

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • ___________

      Vaikuttaako tämä...

      Työkalut / asetukset-laskenta-välilehti ja "täppä" kohtaan ...Laskenta "automaattisesti".

      • Nimimerkki

        Tuo auttaa jos taulukossa tapahtuu muutoksia jatkuvasti, mutta jospa kysyjä halusi taulukolla mitata muuhun työhön kulunutta aikaa, eli käynistää kellon ja alkaa tekeen töitä muilla taulukoilla, silloin tuo kyseinen taulukko ei päivity.

        löysin helpistä OnTime metodin, mutta en ole käyttänyt koskaan, tuolla on mahdollista käynnistää yksi tapahtuma tiettynä kellonaikana, mutta jos tehet makron joka viittaa itseensä niin eikös tuosta saa jatkuvan päivityksen.

        Tässä esimerkissä on käytetty kahta makroa, mutta muokkaa niin että viittaa vain itseensä ?:
        http://support.microsoft.com/default.aspx?scid=kb;en-us;213288

        tässä ohjeista ( vähän hidas linkki, mutta kyllä se tulee sieltä):
        http://msdn2.microsoft.com/en-us/library/aa195809(office.11).aspx

        Eli mielestäni niin että Taulukkoon aloitus aika ja sitten toiseen soluun vaikka minuutin välein =now(), ja lopetuksessa päättymisaika ylös ja OnTimen Sulkeminen

        Googlesta löytyy


      • esim.
        Nimimerkki kirjoitti:

        Tuo auttaa jos taulukossa tapahtuu muutoksia jatkuvasti, mutta jospa kysyjä halusi taulukolla mitata muuhun työhön kulunutta aikaa, eli käynistää kellon ja alkaa tekeen töitä muilla taulukoilla, silloin tuo kyseinen taulukko ei päivity.

        löysin helpistä OnTime metodin, mutta en ole käyttänyt koskaan, tuolla on mahdollista käynnistää yksi tapahtuma tiettynä kellonaikana, mutta jos tehet makron joka viittaa itseensä niin eikös tuosta saa jatkuvan päivityksen.

        Tässä esimerkissä on käytetty kahta makroa, mutta muokkaa niin että viittaa vain itseensä ?:
        http://support.microsoft.com/default.aspx?scid=kb;en-us;213288

        tässä ohjeista ( vähän hidas linkki, mutta kyllä se tulee sieltä):
        http://msdn2.microsoft.com/en-us/library/aa195809(office.11).aspx

        Eli mielestäni niin että Taulukkoon aloitus aika ja sitten toiseen soluun vaikka minuutin välein =now(), ja lopetuksessa päättymisaika ylös ja OnTimen Sulkeminen

        Googlesta löytyy

        A1 aloitusaika esim. "30.1.2007 11:30"
        B1 NYT()
        C1 =NYT()-A1 [muotoilu: aika, "tunnit"). C1:ssä oleva aika päivittyy vain "F9", tai tehtäessä
        muita merkintöjä työkirjassa. Jos olisi mahdollista tehdä reaaliaikapäivitys "NYT()" automaattiseksi, koska menee joskus useita tunteja, ettei tarvitse "näpytellä" mitään. Voisi vain vilkaista ruudulta kokonaisajan.


      • Nimimerkki
        esim. kirjoitti:

        A1 aloitusaika esim. "30.1.2007 11:30"
        B1 NYT()
        C1 =NYT()-A1 [muotoilu: aika, "tunnit"). C1:ssä oleva aika päivittyy vain "F9", tai tehtäessä
        muita merkintöjä työkirjassa. Jos olisi mahdollista tehdä reaaliaikapäivitys "NYT()" automaattiseksi, koska menee joskus useita tunteja, ettei tarvitse "näpytellä" mitään. Voisi vain vilkaista ruudulta kokonaisajan.

        Okei, nyt vähän harjoittelin tuota OnTime metodia ja sain tällaisen kivasti toimimaan:

        Sub Button1_Click()

        Sheet1.Range("A2").Value = Now
        Sheet1.Range("B2").Value = Now TimeValue("00:00:01")
        Sheet1.Range("C2").Formula = "=B2-A2"
        Sheet1.Range("D2").Value = "1"

        Paivita

        End Sub



        Sub Paivita()

        If Sheet1.Range("D2") > 0 Then
        Sheet1.Range("B2").Value = Now
        Application.OnTime Now TimeValue("00:00:01"), "Paivita", False
        End If

        End Sub



        Sub Button2_Click()

        Sheet1.Range("D2").Formula = "0"
        Sheet1.Range("B2").Value = Now

        Paivita

        End Sub


        Kuten huomaat laitoin kaksi nappia, toisesta aloitetaan ja toisesta lopetetaan ajanotto. Sitten laitoin D sarakkeeseen merkin onko ajan otto käynnissä vai ei, tätä tarvitaan jotta jollakin tavalla voidaan päätllä kutsutaanko paivita osiota vai ei, voit itse laittaa tuon piiloon vaikka napin alla olevaan soluun tai muotoilla tekstin väriksi valkoisen.

        False tuon OnTime:n perässä tarkoittaa mielestäni sitä että ei tuo käynnistyisi toista kertaa eli vuorokauden kuluttua uudelleen, tosin helpeissä asiaa ei ihan selvästi sanota, nyt se käynnistyy vain kerran, kumpa tuossa olisi suoraan mahdollista laittaa jokin aika väli niin tuohan olisi helppoa.

        Tuohan ei varmaan tuollaisena vielä sinulle kelpaa:
        -Kun painat uudellen aloita nappia se pyyhkii vanhan pois, parempi olisi varmaan laittaa uusi aika seuraavalle riville, mutta noihan on noita käyttöliittymä juttuja miten oletkin suunitellut tuon itsellesi mahdollisuuksia on varmasti paljon erillaisia.
        -Nyt se päivitys on noin sekuntin välein, nyt näyttää hyvin toiminnan, mutta parempi varmaa laittaa harvemmin päivitys esim 30 sek.
        -tuon voisi laittaa yhdelle napille if vaan tarkistaisi onko ajan otta päällä vai ei
        -hmm. oli pari muutakin mutta unohtui jo.....


    • ihan perusjuttuna
      tee nappi ja muuta Captioniksi "Aloita" ilman lainausmerkkejä ja liitä siihen koodi

      Private Sub CommandButton1_Click()
      If Me.CommandButton1.Caption = "Aloita" Then
      testi = False
      Aloita
      Me.CommandButton1.Caption = "Lopeta"
      Else
      testi = True
      Lopeta
      Me.CommandButton1.Caption = "Aloita"
      End If
      Range("C1").Select'tämä siksi ettei nappula jää aktiiviseksi
      End Sub

      ja moduuliin...

      Public Aika As Date
      Public testi As Boolean
      Sub Aloita()
      On Error Resume Next
      If Not testi Then
      Range("A1") = Format(Now, "hh:mm:ss")
      Range("C1") = ""
      testi = True
      End If
      Aika = Now TimeValue("00:00:01")
      Application.OnTime Aika, "Aloita"
      Range("B1") = Format(Now, "hh:mm:ss")

      End Sub

      Sub Lopeta()
      On Error Resume Next
      Application.OnTime Aika, "Aloita", , False
      testi = False
      Range("C1") = Format(Range("B1") - Range("A1"), "hh:mm:ss")
      End Sub

      Nyt kun klikkaat nappia siinä lukee aloita ja se muuttuu lopeta. Aluksi kirjoittaa aloitus ajan A1 ja kun lopetat niin lopetusajan B1 ja kokonaisajan C1

      Keep Exceling

      • Nimimerkki

        Eikös tuo ole vähän vaarallista laitta ne samaan nappiin, voi olla että vahingossa klikkaa lopetuksen jälkeen uudeleen nappia ja silloin edellinen aika pyyhkintyy pois.

        Tuokin korjaantuisi sillä että uusi aika laitettaisiin edellisen alapuolelle, olisiko liikka pyyttä sinulta tuollaisen lisäyksen, varmati moni lukia voisi käyttää sitä hyväksensä.

        Ja eikös se ole niin että noita aikoja muistissa on vain yksi joten jos käytät toista jossain muualla ohjelmassa esim tuossa toisessa ketjussa beforPrint tapahtumassa käytin, niin toinen pyyhkii toisen pois, elim kutsu aloita muuttuu toiseksi kutsuksi


      • Nimimerkki

        Muuten toimiiko sinulla tnoin:

        Application.OnTime Aika, "Aloita", , False

        Minulla ei toimi, antaa virheilmoituksen
        Tuo voi olla kyllä näitä pieniä eroja Mac / windowsin väillä, kaiken kaikkiaan yllättävän saman lailla kaikii on office Mac / windows:issa


      • Nimimerkki kirjoitti:

        Muuten toimiiko sinulla tnoin:

        Application.OnTime Aika, "Aloita", , False

        Minulla ei toimi, antaa virheilmoituksen
        Tuo voi olla kyllä näitä pieniä eroja Mac / windowsin väillä, kaiken kaikkiaan yllättävän saman lailla kaikii on office Mac / windows:issa

        Todennäköisesti sulla ei ole aika muuttujaa määritelty eli aika on jäljessä ja ei voi silloin lopettaa "ajallaan"


      • Nimimerkki kirjoitti:

        Eikös tuo ole vähän vaarallista laitta ne samaan nappiin, voi olla että vahingossa klikkaa lopetuksen jälkeen uudeleen nappia ja silloin edellinen aika pyyhkintyy pois.

        Tuokin korjaantuisi sillä että uusi aika laitettaisiin edellisen alapuolelle, olisiko liikka pyyttä sinulta tuollaisen lisäyksen, varmati moni lukia voisi käyttää sitä hyväksensä.

        Ja eikös se ole niin että noita aikoja muistissa on vain yksi joten jos käytät toista jossain muualla ohjelmassa esim tuossa toisessa ketjussa beforPrint tapahtumassa käytin, niin toinen pyyhkii toisen pois, elim kutsu aloita muuttuu toiseksi kutsuksi

        semmoiseksi projektin hallinnaksi...
        katsotaan jaksanko huomenna duunailla


      • Nimimerkki
        kunde kirjoitti:

        Todennäköisesti sulla ei ole aika muuttujaa määritelty eli aika on jäljessä ja ei voi silloin lopettaa "ajallaan"

        sorry taas noita minun onnettomia ilmaisuja, olisin voinut heti kirjoittaa tarkemmin mistä se virhe tulee, eli Tuossa testasin tuolla omalla koodillakin

        Toimii minulla
        Application.OnTime Now TimeValue("00:00:01"), "Paivita", False

        Ei Toimi minulla
        Application.OnTime Now TimeValue("00:00:01"), "Paivita", , False

        Joskus aikaisemminkin huomannut että noissa argumenteissa on jaitakin eroja käsittelyn suhteen Mac/ windows:in välillä, eihän tämä mikään suri juttu ole mutta ihan kiinostaa jotta osaa paremmin varautua mahdollisiin pieniin yllätyksiin.


      • KIITOKSET
        Nimimerkki kirjoitti:

        sorry taas noita minun onnettomia ilmaisuja, olisin voinut heti kirjoittaa tarkemmin mistä se virhe tulee, eli Tuossa testasin tuolla omalla koodillakin

        Toimii minulla
        Application.OnTime Now TimeValue("00:00:01"), "Paivita", False

        Ei Toimi minulla
        Application.OnTime Now TimeValue("00:00:01"), "Paivita", , False

        Joskus aikaisemminkin huomannut että noissa argumenteissa on jaitakin eroja käsittelyn suhteen Mac/ windows:in välillä, eihän tämä mikään suri juttu ole mutta ihan kiinostaa jotta osaa paremmin varautua mahdollisiin pieniin yllätyksiin.

        kundelle ja kaikille muillekkin asiaan paneutuneille. Nyt homma toimii hienosti.


      • Nimimerkki kirjoitti:

        Eikös tuo ole vähän vaarallista laitta ne samaan nappiin, voi olla että vahingossa klikkaa lopetuksen jälkeen uudeleen nappia ja silloin edellinen aika pyyhkintyy pois.

        Tuokin korjaantuisi sillä että uusi aika laitettaisiin edellisen alapuolelle, olisiko liikka pyyttä sinulta tuollaisen lisäyksen, varmati moni lukia voisi käyttää sitä hyväksensä.

        Ja eikös se ole niin että noita aikoja muistissa on vain yksi joten jos käytät toista jossain muualla ohjelmassa esim tuossa toisessa ketjussa beforPrint tapahtumassa käytin, niin toinen pyyhkii toisen pois, elim kutsu aloita muuttuu toiseksi kutsuksi

        ekalle riville otsikot
        A1=projektin nimi
        B1=aloitusaika
        C1=kokonaisaika
        D1=käynnissä
        sarakkeen E voi piilottaa
        lisäät pari nappia oletuksineen ja liität niihin koodit

        Private Sub CommandButton1_Click()
        Kaynnista
        End Sub

        Private Sub CommandButton2_Click()
        Lopeta
        End Sub

        ja moduuliin...

        Public Milloin As Double
        Dim Laskuri As Date
        Dim alku As Boolean
        Dim vika As Integer
        Sub Kaynnista()
        alku = False
        Aloita
        End Sub
        Sub Aloita()
        If alku = True Then Exit Sub
        vika = Range("A1").End(xlDown).Row
        For Each Solu In Range("A1:A" & vika)
        If Not Solu = "" And Range("D" & Solu.Row) = 1 Then
        If Range("B" & Solu.Row) = "" Then
        Range("B" & Solu.Row) = Now
        End If
        Laskuri = Now - Range("B" & Solu.Row) Range("E" & Solu.Row)
        Range("C" & Solu.Row).Value = Format(Laskuri, "h:mm:ss")
        End If
        If Not Solu = "" And Range("D" & Solu.Row) = 0 Then
        If Not Range("B" & Solu.Row) = "" Then

        Range("E" & Solu.Row) = Format(Range("C" & Solu.Row), "h:mm:ss")
        Range("B" & Solu.Row) = ""
        End If
        End If
        Milloin = Now TimeSerial(0, 0, 1)
        Next
        Application.OnTime Milloin, "Aloita", , True
        End Sub

        Sub Lopeta()
        On Error Resume Next
        alku = True
        Application.OnTime Milloin, "Aloita", , False
        Range("D2:D" & vika) = 0
        Range("B2:B" & vika) = ""
        End Sub

        Toimii seuraavasti:
        klikkaa nappia 1, joka käynnistää luuppimakron
        kirjoita projektin nimi sarakkeeseen A
        soluun D kirjoita 1(1=käynnissä-0 ei käynnissä)
        soluun B ilmestyy aloitusaika ja soluun C kokonaisaika

        keskeytät projektin kirjoittamalla D soluun 0
        B solu tyhjennetään ja kokonaisaika säilyy
        starttaa uudelleen projekti kirjoittamalla soluun D 1

        makron saat pois toimimasta klikkaamalla nappia 2

        tostahan nyt sitten saa ideaa miten jatkaa
        tietenkin voisi tehdä events jutuillakin, mutta sitä vähän vaikea jalostaa makronauhottajien.


      • Nimimerkki
        kunde kirjoitti:

        ekalle riville otsikot
        A1=projektin nimi
        B1=aloitusaika
        C1=kokonaisaika
        D1=käynnissä
        sarakkeen E voi piilottaa
        lisäät pari nappia oletuksineen ja liität niihin koodit

        Private Sub CommandButton1_Click()
        Kaynnista
        End Sub

        Private Sub CommandButton2_Click()
        Lopeta
        End Sub

        ja moduuliin...

        Public Milloin As Double
        Dim Laskuri As Date
        Dim alku As Boolean
        Dim vika As Integer
        Sub Kaynnista()
        alku = False
        Aloita
        End Sub
        Sub Aloita()
        If alku = True Then Exit Sub
        vika = Range("A1").End(xlDown).Row
        For Each Solu In Range("A1:A" & vika)
        If Not Solu = "" And Range("D" & Solu.Row) = 1 Then
        If Range("B" & Solu.Row) = "" Then
        Range("B" & Solu.Row) = Now
        End If
        Laskuri = Now - Range("B" & Solu.Row) Range("E" & Solu.Row)
        Range("C" & Solu.Row).Value = Format(Laskuri, "h:mm:ss")
        End If
        If Not Solu = "" And Range("D" & Solu.Row) = 0 Then
        If Not Range("B" & Solu.Row) = "" Then

        Range("E" & Solu.Row) = Format(Range("C" & Solu.Row), "h:mm:ss")
        Range("B" & Solu.Row) = ""
        End If
        End If
        Milloin = Now TimeSerial(0, 0, 1)
        Next
        Application.OnTime Milloin, "Aloita", , True
        End Sub

        Sub Lopeta()
        On Error Resume Next
        alku = True
        Application.OnTime Milloin, "Aloita", , False
        Range("D2:D" & vika) = 0
        Range("B2:B" & vika) = ""
        End Sub

        Toimii seuraavasti:
        klikkaa nappia 1, joka käynnistää luuppimakron
        kirjoita projektin nimi sarakkeeseen A
        soluun D kirjoita 1(1=käynnissä-0 ei käynnissä)
        soluun B ilmestyy aloitusaika ja soluun C kokonaisaika

        keskeytät projektin kirjoittamalla D soluun 0
        B solu tyhjennetään ja kokonaisaika säilyy
        starttaa uudelleen projekti kirjoittamalla soluun D 1

        makron saat pois toimimasta klikkaamalla nappia 2

        tostahan nyt sitten saa ideaa miten jatkaa
        tietenkin voisi tehdä events jutuillakin, mutta sitä vähän vaikea jalostaa makronauhottajien.

        Antoi minulle jonkin virheilmoituksen, mutta sillä ei ole väliä, idea selviää tuosta hyvin, ja muutaman yrityksen jälkeen varmaan toimii.

        Eli pointtihan oli juuri tuo seuraavaan riviin viitaus, jokan hoidat näin:

        vika = Range("A1").End(xlDown).Row
        ja
        Range("A1:A" & vika)

        en tiennyt että noin voi tehdä ja eiköhän tuo toimi vaikka vikasta seuraavaan riviin:

        Range("A1:A" & vika 1)

        tarkistin muuten tuosta yhdestä VBA kirjasta ja siinä on luku alueviitauksiin, siinäkään ei mainita tuosta muodosta mitään. Tuo on hieno juttu ja tuosta on varmasti hyötyä jatkossakin.


      • Nimimerkki kirjoitti:

        Antoi minulle jonkin virheilmoituksen, mutta sillä ei ole väliä, idea selviää tuosta hyvin, ja muutaman yrityksen jälkeen varmaan toimii.

        Eli pointtihan oli juuri tuo seuraavaan riviin viitaus, jokan hoidat näin:

        vika = Range("A1").End(xlDown).Row
        ja
        Range("A1:A" & vika)

        en tiennyt että noin voi tehdä ja eiköhän tuo toimi vaikka vikasta seuraavaan riviin:

        Range("A1:A" & vika 1)

        tarkistin muuten tuosta yhdestä VBA kirjasta ja siinä on luku alueviitauksiin, siinäkään ei mainita tuosta muodosta mitään. Tuo on hieno juttu ja tuosta on varmasti hyötyä jatkossakin.

        Toi on todella käyttökelpoinen ja lisättynä Offset ja Resize niin siinäpä jo pelimerkkejä jo piisalle asti
        vika=Range("A1").End(xlDown).Row ja Range("A1:A" & vika)
        hakee siis A1 alaspäin yhtenäisen alueen viimeisen rivin(ei saa olla tyhjiä välissä)

        vika=Range("A65536").End(xlUp).Row ja Range("A1:A" & vika)
        hakee A65536 eli viimeisesta A sarakkeen solusta ylöspäin ja palauttaa A1 & A vika alueen ja näin ollen tolla alueella voi olla tyhjiäkin soluja...

        samat toiminnat sitten vasemmalle ja oikealle

        vika = Range("A1").End(xlDown).Row
        Range("A1:A" & vika).Offset(0, 1).Select

        valitsee sarakkeesta B A sarakkeessa olevan yhtenäisen A1 alkavan alueen kokoisen alueen

        vika = Range("A1").End(xlDown).Row
        Range("A1:A" & vika).Offset(0, 1).Resize(vika-3, 5).Select

        nyt valitsee 3 riviä vähemmän ja laajentaa sarakkeet 5 ja alkaa B sarakkeesta

        joten valinnan saa minne vaan helposti ja sitten kun lisää vielä SpecialCells niin kaikkea mukavaa voidaankin jo tehdä näillä
        Koska kyseessä Range objekti, sillä on paljon ominaisuuksia ja se onkin yksi käytetyin objekti omissa projekteissani

        Keep Exceling


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

    Luetuimmat keskustelut

    1. Trump ja Vance murskasivat ja nolasivat Zelenskyn tiedotusvälineiden edessä Valkoisessa talossa.

      Jopa oli uskomaton tilaisuus Valkoisessa talossa. Zelensky jäi täydelliseksi lehdellä soittelijaksi suhteessa Trumpiin j
      Maailman menoa
      739
      4973
    2. Zelenskyi ei suostunut nöyrtymään Trumpin ja Vancen edessä, siksi meni pieleen

      Trumppia täytyy imarrella, silloin homma toimii aina. Tähän Zelenskyi ei suostunut.
      Maailman menoa
      673
      4209
    3. Mikä on kaivattusi ärsyttävin piirre?

      Mun kaivattu on erittäin vastahakoinen puhumaan itsestä. Kääntää puheenaiheen aina muuhun kun hänestä tulee puhetta.
      Ikävä
      173
      2311
    4. Harmi että

      Pidät niin vastenmielisenä. Olen minäkin välissä ollut ihan kamala sinulle ja ihmetellyt miten voit minusta tykätä. Se o
      Ikävä
      16
      2087
    5. MTV: Katri Helena repäisee kunnolla - Aivan uudessa roolissa TV:ssä - Tätä ei arvannut!

      No nyt iskelmälegenda ja koko kansan Katri Helena kyllä repäisee kunnolla! Upeaa heittäytymistä, Katri Helena! Lue, mis
      Suomalaiset julkkikset
      40
      1888
    6. Miten saisin

      Sinut omakseni?
      Ikävä
      96
      1706
    7. TELIA pakottaa 4G-liittymiä väkisin 5G-liittymiin, vaihtaa ilman lupaa

      Ihmisten sopimuksia! https://www.is.fi/digitoday/mobiili/art-2000011063159.html "Telia on lähettänyt osalle 4g-asiakka
      Maailman menoa
      171
      1473
    8. OP Kaskimaa

      Niin sitten pankki vaihtaa nimeään ja pääkonttori siirtyy ties minne. Pulkkisen visio, Kainuu ei kelvannut.
      Kuhmo
      30
      1218
    9. Ajattele miten

      Paljon ottajia sinulla olisi
      Ikävä
      92
      1193
    10. Viimeiset helmiterveiset

      kaivatullesi tähän alas 🙇💙
      Ikävä
      94
      1144
    Aihe