Kesän jäljitä on sen verran pää tyhjä, että voiskos joku hjelppiä hieman.
Excel 2007 kyseessä. Mulla on sarakeessa paljon lukuja ja nyt pitäisi saada poimittua aina viimeisin luku tiettyyn soluun. Ja lukuja tulee sarakkeeseen lisää kokoajan. Esimerkki:
A
1 544
2 600
3 784
4 898
Eli pitäisi saada poimittua tuo viimeisin 898 johonkin soluun, ja sitten ku tulee sarakkeeseen uusiluku niin se hakis sen.
Olikohan tarpeeksi vaikeesti selvitetty? =)
pistä tämä thisworkbook moduuliin:
Sub workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) Dim Count As Integer 'Käytetyt rivit Count = ActiveSheet.UsedRange.Rows.Count Sheet1.Cells(2, 2) = Sheet1.Cells(Count + 1, 1) 'eli Sheet1.Cells(rivinumero minne viimeisin data halutaan,kolumninumero minne viimeisin data halutaan) = Sheet1.Cells(Count +1,haluamasi kolumninumero mihin uutta dataa tulee) Tässä tapauksessa kolumniin A tulevat datat menevät Kolumnin B riville 3 (count alkaa 0:sta, siksi rivivalintana count + 1) End Sub
Ok! Kiitos paljon groovyb!! =)
Edit: öö...nytte ei kyllä tapahu mitään.... =( vaikka sheet1 -> taul1
(Mod. huom: voit myös muokata viestejäsi!)
nyt on jokin vialla sitten. kokeilin koodia itse (engl. kielinen excel 2007) ja toimi. kun kirjoitat Taul1. niin intellisensen pitäisi tuoda lista esille metodeista etc. jos ei tule, niin taulun nimi ei toimi luokkana.
tämän voi korvata kirjoittamalla ThisWorkBook.Sheets("Taulunnimi").Cells(etc.etc.
tämä EI tuo taululuokan metodeita näkyviin, mutta toimii myös.
onko suomen ja englanninkielisessä excelissä eroja? Hämmästelen kyllä.
ja varmistit että laitoit koodinpätkän oikeaan moduuliin?
Moikka mmikko!
'testaa oheista viritelmää...
'ThisWorkbook Private Sub Workbook_BeforeClose(Cancel As Boolean) CancelTimer End Sub Private Sub Workbook_Open() StartTimer End Sub
' Module1 Option Explicit Public RunWhen As Double Public Const cRunIntervalSeconds = 1 '(sekunti) Public Const cRunWhat = "RunAtInterval" Public Sub StartTimer() RunWhen = Now + TimeSerial( _ 0, 0, cRunIntervalSeconds) Application.OnTime EarliestTime:=RunWhen, _ Procedure:=cRunWhat, Schedule:=True End Sub Sub RunAtInterval() Dim i As Long For i = Sheets("Taul1"). _ UsedRange.Rows.Count To 1 Step -1 If Sheets("Taul1").Range("A" & CStr(i)).Text <> "" Then Sheets("Taul1").Range("B1").Value = _ Sheets("Taul1").Range("A" & CStr(i)).Value Exit For End If Next StartTimer End Sub Sub CancelTimer() On Error Resume Next Application.OnTime RunWhen, _ "RunAtInterval", Schedule:=False End Sub
Moro!
Ja kiitos avustanne! mä testaan nuo tänään, ku pääsen töistä! groovyb: omasta mielestäni mä tein just ohjeittesi mukaan, mut ei toiminu, ja oikeaan moduuliin kyllä laitoin. Mut kesän jälkeen on vähän jäässä.
Raportoin illalla, miten pelaa =)
Moro!
Jäin sitten testaamaan nuita molemmat toimii nyt! kiitos siitä!
Yksi juttu vielä, miten määritellään niin että se hakisi jokaisessa sarakkeesta viimeisen arvon, jossa on dataa ja näyttäisi sen sitten jossain soluissa? tuohon toimii nyt siten, että se hakee vain a-sarakkeen viimeisen arvon.
-m
lisäilet vaan näitä funktioon:
Sheet1.Cells(2, 2) = Sheet1.Cells(Count + 1, 1)
suluissa ensimmäisenä on rivinumero, toisena kolumninumero.
eli esimerkkejä muutama
Sheet1.Cells(2,2) = Sheet1.Cells(Count + 1, 2) 'Riville 2, kolumniin B menee B kolumnin viimeinen data sheet1.Cells(3,3) = Sheet1.Cells(Count + 1, 3) 'Riville 3, kolumniin C menee kolumnin C viimeinen Data Sheet1.Cells(5,6) = Sheet1.Cells(Count + 1, 7) 'Riville 5, kolumniin E menee kolumnin G viimeinen data
voit siihen jo olemassa olevaan funktioon minkä aiemmin pistin, vain lisäillä näitä sen yhden samanlaisen lausekkeen perään.
yleensä ei ole tarpeen kaikkia kolumneja käydä läpi vaan määrittää ne joita tarvitaan
Kiitos jälleen groovyb!
Hokasin itekkin tuon sitten myöhemmin, että nuihan sen saa =) sitten rupesin ettimään, että onko semmosta masterkomentoo että kattelis yhellä lauseella ne mutta en ainakaan löytänyt mitään siihen.
Mut näin se toimii ja se riittää mulle mainiosti =)
Kiitos! on tää vaan hieno paikka! kertaakaan en oo jääny ilman apuja! =)
-m
Aihe on jo aika vanha, joten et voi enää vastata siihen.