Auttakaa viisaammat

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.
14990
Äänestä

Muut lukivat myös

Vastaukset 14

Vanhimmat

Vaikuttaako tämä...

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

Äänestä
  • 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

    Äänestä

  • 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.

    Äänestä

  • 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.....

    Äänestä

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

Äänestä
  • 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

    Äänestä

  • 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

    Äänestä

  • 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"

    Äänestä

  • 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

    Äänestä

  • 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.

    Äänestä

  • 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.

    Äänestä

  • 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.

    Äänestä

  • 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.

    Äänestä

  • 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

    Äänestä

Kommentoi aloitusta


Uunoa kirjoitti:

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.

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu