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.
Auttakaa viisaammat
14
942
Vastaukset
- ___________
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öytyyA1 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:issaTodennä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 kutsuksisemmoiseksi 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 kutsuksiekalle 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
Anteeksi mies
En vaan osaa kohdata sinua ja olla normaali. En tiedä mikä vaivaa. Samaan aikaan tekee mieli tulla lähelle ja kuitenkin5911285Mietin aina vain
Minä niin haluaisin nähdä sinut. Ei tuo yhden ainoan kuvan katsominen paljon helpota... Miksi sinä et voisi olla se roh174791Hetken jo luulin, että en ikävöi sinua koko aikaa
Mutta nyt on sitten taas ihan hirveä ikävä jotenkin. Tiedätköhän sinä edes, kuinka peruuttamattomasti minä olen sinuun r334217Outoa että Trump ekana sanoutui irti ilmastosopimuksesta
kun Kaliforniaa riepottelee siitä johtuvat tuhoisat maastopalot. Hirmumyrskytkin ovat USA:ssa olleet tuhoisia.4502270Palstan henkisesti sairaat ja lihavat
Täällä on sairaita, työttömiä ihmisiä kirjoittelemassa joilla ei ole tarkoituksena kuin satuttaa ihmisiä. Jos eksyt pals1142200Saan kengurakkaan kotiin viikon päästä
Mitä tapahtui? Martina hehkutti tätä stoorissaan reilu viikko sitten, mutta eipä aussimiestä Suomessa näkynyt, vaan tapa2631678FinFamin ryhmät
Älkää hyvät ihmiset luottako tähän tahoon. Ryhmiä on, mutta eivät ne toimi. Ihmisiä savustetaan ulos, vaikka näissä piir01441Osmo Peltola voitti ansaitusti Kultaisen Venlan - Kirvoitti yleisöltä mahtavan reaktion!
JEE, onnea Osmo! Osmo Peltola voitti Vuoden esiintyjän Kultainen Venla -palkinnon. Isä-Peltsin ja Osmon luontoseikkailu831270Olen vähän
Hysteerinen se on totta. Etkai ymmärrä miten syvästi tunnen sinua kohtaan. Ja olet aina lähelläni. Olet osa jo jotain. I101175- 391166