Joudun taas turvautumaan apuunne Excel-nerot eli luin jonkun aikaisemman kysymyksen vastauksesta, että Aika-muotoiltuun (00:00) -sarakkeeseen saisi tuollaisen aikamerkinnän eli kaksoispisteen kirjoittamatta sitä, kun laittaa taulukonvalitsimen koodiin alla olevan tekstin.
Jostain syystä en saa tuota toimimaan, vaan syöttäessäni kellonajan, esim. 1235, kyseiseen soluun tulee 00:00.
Itse en ymmärrä tuosta koodisysteemistä vielä mitään.
Aikaisemmasta kysymyksestä kopioitu koodi:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim r As Range, h As Integer
Set r = Intersect(Target, Range("E9:H22"))
If r Is Nothing Then Exit Sub
Set r = r.Cells(1)
If IsNumeric(r) Then
With r
If .Value >= 100 Then h = Left(.Value, Len(.Value) - 2) Else h = 0
Application.EnableEvents = False
.Value = h / 24 Right(.Value, 2) / 1440
.NumberFormat = "[hh]:mm"
Application.EnableEvents = True
End With
End If
End Sub
Jostain syystä en saa tuota toimimaan, vaan syöttäessäni kellonajan, esim. 1235, kyseiseen soluun tulee 00:00.
Itse en ymmärrä tuosta koodisysteemistä vielä mitään.
Aikaisemmasta kysymyksestä kopioitu koodi:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim r As Range, h As Integer
Set r = Intersect(Target, Range("E9:H22"))
If r Is Nothing Then Exit Sub
Set r = r.Cells(1)
If IsNumeric(r) Then
With r
If .Value >= 100 Then h = Left(.Value, Len(.Value) - 2) Else h = 0
Application.EnableEvents = False
.Value = h / 24 Right(.Value, 2) / 1440
.NumberFormat = "[hh]:mm"
Application.EnableEvents = True
End With
End If
End Sub
Vastaukset 28
Vanhimmat
No nyt sitten löytyikin se kysymys, missä tuota ongelmaa on käsitelty, mutta osaisiko joku nero kertoa mikä mättää, kun en itse saa sitä toimimaan?
http://keskustelu.suomi24.fi/show.fcgi?category=108&conference=4500000000000708&posting=22000000009908043
Kopioit vaan koodin sinne taulukon moduuliin, niin toimii.
Toimii vain solualueella E9:H22, ellet muuta sitä.
Kiitos, sitä vähän epäilinkin, että en itse tajua tarpeeksi hyvin tuota koodia, kun en siitä ymmärrä mitään.
Tarvitsisin tuon aikamuotoilun sarakkeeseen B, joten miten se pitäisi merkitä?
Entä silloin, jos aikamuotoilu tarvitaan koko taulukkoon?
Tai jos aikamuotoilu tarvitaan esim. sarakkeisiin B, E ja H?
Kiitos, jos jaksat vääntää taas rautalankaa :)
En ole VBA:ssa häävinen ihtekkään, mutta koitappa näin.
Muuta koodin tekstiä.
Set r = Intersect(Target, Range("E9:H22"))
kun haluat B-sarakkeeseen.
Set r = Intersect(Target, Range("B:B"))
kun koko taulukkoon.
Set r = Intersect(Target, Cells)
kun sarakkeisiin B,E ja H.
Set r = Intersect(Target, Range("B:B,E:E,H:H"))
Kiitos avustasi. Alkaa vähän tuntua jo sille, että joudun (?) kohta luovuttamaan, kun tämä ei tunnu onnistuvan enkä ymmärrä missä teen virheen.
Nyt siinä koodissa on alla oleva teksti kopioituna eli kellonaikamuotoilun olisi tarkoitus tulla B-sarakkeeseen. B-sarakkeesta tuntuu myös häviävän jonnekin varsinainen aikamuotoilu 13:30 :
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim r As Range, h As Integer
Set r = Intersect(Target, Range("B:B"))
If r Is Nothing Then Exit Sub
Set r = r.Cells(1)
If IsNumeric(r) Then
With r
If .Value >= 100 Then h = Left(.Value, Len(.Value) - 2) Else h = 0
Application.EnableEvents = False
.Value = h / 24 Right(.Value, 2) / 1440
.NumberFormat = "[hh]:mm"
Application.EnableEvents = True
End With
End If
End Sub
Äsken taas yrittäessäni kirjoittaa päivämäärää, tuli näytölle ruutu, missä oli nuo alla olevat End, Debug ja Help –vaihtoehdot ja kun klikkasin Debug, tuli näytölle koodi ja siinä oli korostettu keltaisella rivi ” .Value = h / 24 Right(.Value, 2) / 1440 ” Sulkiessani koodi-ikkunaa tuli ilmoitus ”jonkun” lopettamisesta. Nyt en valitettavasti muista mistä oli kyse eikä sama toistu enää uudella kellonajalla, vaan nyt kellonajat ovat taas tuota 00:00, vaikka soluun kirjoittaisi 1235.
Ihan alussa tuo kellonajan kirjoittaminen onnistui pariin soluun, mutta kun poistin yhden kellonajan deletellä, näytölle tuli ruutu, missä luki:
”Microsoft Visual Basic
Runtime error ’13’
Type mismuch
End Debug Help”
Sen jälkeen ei ole enää onnistunutkaan, vaan soluun tulee aina 00:00. Kaksoispisteen kirjoittaminen jokaiseen ruutuun kyllä onnistuu, mutta kun tuo kaksoispisteen ’automatisointi’ olisi niin mukava, kun se helpottaisi tätä työmäärää.
Teenkö mahdollisesti jonkun perusteellisen virheen esim. siinä, että tähän asti olen laittanut kaksoispisteen soluihin kirjoittamalla? Vai eikö tuota koodia voi lisätä kesken kaiken jo valmiiseen taulukkoon? Vai missä voisi mättää??
aiheesta oli lisää
http://keskustelu.suomi24.fi/show.fcgi?category=108&conference=4500000000000708&posting=22000000010199382
koodi korjattuna B -sarakkeeseen.Siinä oli bugi, joka johtui juuri deletoinnista ja tällöin h:n arvoksi tuli nolla. Asia siis korjattu allaolevassa koodissa
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim r As Range, h As Integer
Set r = Intersect(Target, Range("B:B"))
If r Is Nothing Then Exit Sub
Set r = r.Cells(1)
If IsNumeric(r) Then
With r
If .Value >= 100 Then h = Left(.Value, Len(.Value) - 2) Else h = 0
Application.EnableEvents = False
If h = 0 Then
Application.EnableEvents = True
Exit Sub
End If
.Value = h / 24 Right(.Value, 2) / 1440
.NumberFormat = "[hh]:mm"
Application.EnableEvents = True
End With
End If
End Sub
Kiitos, nyt toimii :) Kyllä te olette uskomattoman viisaita!!
Mutta nyt tuli mieleen vielä yksi tyhmä kysymys eli tarkoittaako tuo 'deletointibugi'¨nyt sitä, että taulukosta ei saa poistaa yhtään kellonaikaa deletellä, ettei käy samalla tavalla?
EI!!!
bugi on nyt korjattu ja ohjelma toimii vaikka poistatkin tietoja deletellä.
Oikein paljon kiitoksia ystävällisistä neuvoista ja myös kärsivällisyydestänne!
No niin, meikäläinen yritti olla "fiksu" ja kokeili tällä kertaa automaattista pilkkusysteemiä ja laittoi tuohon kaavaan B-kirjainten väliin pilkun
Set r = Intersect(Target, Range("B,B"))
ja sain taas sen Debug-ikkunan eli en onnistunyt olemaan fiksu :(
Voisiko joku fiksumpi kertoa ja neuvoa, onnistuuko sarakkeen muotoileminen niin, että pilkku tulisi automaattisesti esim. yhden tai kahden numeron päähän lopusta?
Ei siinä kohtaan ole kaavaa vaan siinä on solualue.Ja kun panit pilkun niin niin tietenkin tulee virheilmoitus kun tuollaista aluetta ei ole olemassa.
Jos 2 desimaalia haluat automaattisesti niin et tarvitse funktiota. Tee soluihin oma muotoilu 0"," 00 ja nyt soluissa automaattisesti pilkku ja sen jälkeen 2 desimaalia.Jos haluat 3 desimaalia niin muotoilu 0"," 000 jne.
Paljon kiitoksia, nyt tuokin homma onnistui :)
Nyt tuli vaihteeksi ongelma tämän muotoilun kanssa, kun piti laittaa kellonajaksi 00:15, niin sarakkeeseen tuli 00:00 eli missä mahtaa tällä kertaa mättää?
Kiitos, jos joku jaksaisi vielä... :)
Ja se koodi on tässä:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim r As Range, h As Integer
Set r = Intersect(Target, Range("B:B"))
If r Is Nothing Then Exit Sub
Set r = r.Cells(1)
If IsNumeric(r) Then
With r
If .Value >= 100 Then h = Left(.Value, Len(.Value) - 2) Else h = 0
Application.EnableEvents = False
If h = 0 Then
Application.EnableEvents = True
Exit Sub
End If
.Value = h / 24 Right(.Value, 2) / 1440
.NumberFormat = "[hh]:mm"
Application.EnableEvents = True
End With
End If
End Sub
Nyt pitäisi toimia
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim r As Range, h As Integer
On Error GoTo virhe
Set r = Intersect(Target, Range("B:B"))
If r Is Nothing Then Exit Sub
Set r = r.Cells(1)
If IsNumeric(r) Then
Application.EnableEvents = False
With r
If IsEmpty(.Value) Then GoTo virhe
If .Value >= 100 Then
h = Left(.Value, Len(.Value) - 2)
.Value = h / 24 Right(.Value, 2) / 1440
Else
.Value = Right(.Value, 2) / 1440
End If
.NumberFormat = "[hh]:mm"
End With
End If
virhe:
Application.EnableEvents = True
End Sub
Kiitos oikein paljon!! Nyt toimii hyvin.
Täytyy vaan edelleenkin ihmetellä, kuinka taitavia, avuliaita ja ystävällisiä ihmisiä täällä on, kun jaksavat tarvittaessa vääntää sitä kuuluisaa 'rautalankaa' päivästä toiseen - siis ainakin osa vastaajista :)
Onko tosiaan niin, että samaan soluun ei voi laittaa sekä ehdollista muotoilua että tuota "pilkkumuotoilua"?
Taulukossani oli jo kaksi ehdollista muotoilua niin, että solut muuttuvat sinisiksi yli 12 arvoilla ja punaisiksi alle 4 arvoilla ja nyt kun laitoin vielä tuon 0"," 00 -muotoilun, niin solut muuttuvat koko ajan sinisiksi eli näyttäisi sille, että ehdollisessa muotoilussa täyttyisi vain ehto nro 2.
Tuo välilyönti jälkimmäisten "-merkkien jälkeen ei ilmeisesti ole tarpeen, koska silloin tulee myös lopulliseen arvoon välilyönti ja muotoilu näyttäisi toimivan ilman välilyöntiäkin?
Oma muotoilu 0","00 ei muuta solun arvoa.
Jos kirjoitat soluun 1234 tulee näkyviin 12,34 mutta solun arvo on silti 1234.
Ehdollinen muotoilu toimii kun panet ehdoiksi 400 ja 1200
Paljon kiitoksia, enpä olisi itse hoksannut tuollaista asiaa. Ihana tunne, nyt pitäisi taulukon toimia lähes täydellisesti ja kiitokset siitä 'täydellisyydestä' kuuluu teille :)
Yhtä keskiarvojuttua vielä pähkäilen, katsotaan onnistunko siinä omin avuin...
Eipäs tullutkaan ihan vielä 'täydellistä' taulukkoa. Samaisessa taulukossa on nimittäin solussa K8 keskiarvo sarakkeen C pilkulla olevista lukuarvoista, joissa on oma muotoilu 0","0 . Nyt keskiarvot on kymmenkertaisia.
Olen yrittänyt tämän päivän pähkäillä ja kokeilla erilaisia vaihtoehtoja tuon ongelman kanssa ja ymmärtäisin sen johtuvan tuosta suuremmasta solun arvosta ehdollisessa muotoilussa oman muotoilun jälkeen, mutta miten ihmeessä saan palautettua keskiarvon oikeaksi ilman, että tuota hienoa pilkkumuotoilua tarvitsee poistaa?
Kiittäen sanna, joka on tainnut "haukata" hieman liian suuren palan... :)
Solun omasta muotoilusta johtuen tulos on kymmenkertainen.Eiköhän tulos korjaannu jakamalla tulos 10?
Juu, kiitoksia vaan. Kyllä korjaantui ja nyt taitaa taulukko olla taas kunnossa - ainakin toistaiseksi :)
Onkohan tuo koodiin laitettu kellonaikamuotoilu nimeltään makro, kun nyt avatessani excel-taulukkoa, tulee joka kerta kysymys
'Makroissa voi olla viruksia. Makrot voi yleensä poistaa käytöstä, mutta kelvollisten makrojen poistaminen voi heikentää toimintoja.' Ja sitten on laatikot 'Poista makrot käytöstä' , 'Ota makrot käyttöön' ja 'Lisätietoja'.
eli ota makrot käyttöön, muuten et saa sitä toimimaan
Kiitos tiedosta. Olenkin jo testannut, että ei toimi, jos ei ota käyttöön :)
Saako tuon makron otettua käyttöön niin, ettei excel kyselisi sitä joka kerta?
Kun Excel on auki: Työkalut -> Makro -> Suojaus ja siellä täppä alimpaan kohtaan "pieni" ja OK
Kiitos. Tuo täppä taitaa koskea sen jälkeen kaikkien excel-tiedostojen avaamista, kun kysely poistui toisestakin asiakirjasta?
Tuosta tuli mieleen koneen turvallisuuskysymykset... Tähän asti olen säästynyt isommilta murheilta koneen kanssa, mutta jos madallaan suojaustasoa makrojen kohdalla, niin onko syytä pelätä makroviruksia (vai mitä ne olivat)? Virustorjunta ja palomuuri ovat ajan tasalla.
On tämä atk kumma juttu, kun yksi asia ratkeaa, niin heti tulee uusi ongelma pohdittavaksi :)
Kyllä se koskee koko exceliä.
Itselläni on tuo "pieni" asetus jatkuvasti päällä, eikä ole viruksia näkynyt.
Kiitos tiedoista, en huolestu :)
Ja sitäpaitsi onhan täällä hyviä ja taitavia neuvojia, jos sattuu jotain odottamatonta tapahtumaan...