Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VBA: Excel onkelma...

Sivun loppuun

mmikko [22.07.2010 09:15:17]

#

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? =)

groovyb [22.07.2010 11:43:45]

#

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

mmikko [22.07.2010 12:18:50]

#

Ok! Kiitos paljon groovyb!! =)

Edit: öö...nytte ei kyllä tapahu mitään.... =( vaikka sheet1 -> taul1

(Mod. huom: voit myös muokata viestejäsi!)

groovyb [22.07.2010 16:59:24]

#

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?

neau33 [22.07.2010 17:47:48]

#

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

mmikko [26.07.2010 09:22:58]

#

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 =)

mmikko [26.07.2010 10:25:15]

#

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

groovyb [26.07.2010 15:11:52]

#

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

mmikko [27.07.2010 08:21:12]

#

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


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta