Tarkoitus on siis, että nappia painamalla koodi laskee asteen, jonka jälkeen kertoo sen tekstilaatikossa. Mikä mahtaa olla pielessä kun ei toimi? Tämä on siis excelissä toimiva pieni makro.
Private Sub CommandButton2_Click()
Dim t As Integer
Dim m As Integer
Dim aste As Double
t = Worksheets("Sheet1").Cells(3, 17).Value
m = Worksheets("Sheet1").Cells(7, 17).Value
aste = t / (m * -1)
If aste > 1.5 Then
MsgBox "Omavaraisuusasteesi on" + Str(aste) + ". Kaikki vaikuttaa hyvätlä."
ElseIf aste < 1 Then
MsgBox "Omavaraisuusasteesi on" + Str(aste) + ". Menosi ylittää tulosi. Kiristä budjettia."
Else aste > 1 And aste < 1.5
MsgBox "Omavaraisuusasteesi on" + Str(aste) + ". Tulosi on vain hieman suuremmat kuin menosi. Kiristä budjettia tarvittaessa."
End If
End SubSainki jo ratkaistua osin tuon. Käytänkin siis vain ElseIf -rakennetta ja sitten pitäs toimia. Nyt tuli toinen ongelma. Subscript out of range. Mitähän nyt?
Mod. korjasi kooditagit!
Moikka Guuna!
Ensinnäkin et voi If...Then...Else lauseessa sijoitta vertailua enää Else osalle vaan Else kattaa kaikki muut mahdollisuudet, joita If/ElseIf osien sisältämä vertailut eivät toteuta. Elikäs seuraavan mallin mukaan:
Dim ilmo As String If aste >= 1.5 Then 'tarkista myös ateen arvon kaava!!! ilmo = "plaa plaa plaa..." Elseif aste < 1 Then ilmo = "plöö plöö plöö..." Else 'kaikissa muissa tapauksessa ilmo = "plää plää plää..." End If MsgBox ilmo
tahi
Dim ilmo As String
Select case aste
Case Is >= 1.5
ilmo = "plaa plaa plaa..."
Case Is < 1
ilmo = "plöö plöö plöö..."
Case Else
ilmo = "plää plää plää..."
End Select
MsgBox ilmoToisekseen Subscript out of range ilmoitus johtunee siitä, että käytössäsi on suomenkileinen Excel jolloin et voi viitata laskentataulukoon käyttämällä nimeä "Sheet1" (jos et erikseen ole nimennyt jotain taulukkoa ko. nimellä). Mikäli epäilyni osui oikeaan niin voit tehdä viittauksen esim. tyyliin: t = Sheets("Taul1").Cells(3, 17).Value jne.
-Nea-
Kannattaa tarkistaa ettei tuo m ole nolla, jottei tule nollalla jako.
Ilmeisesti pitäs toimia noin. En vieläkään tiedä, mistä tuo Subscript out of range -tulee. Exceli on tosiaan suomenkielinen, mutta kaikki sheettien nimet ym. täsmää. Debuggaus herjaa siis t = Worksheets("Sheet1").Cells(3, 17).Value -kohdassa.
Private Sub CommandButton2_Click()
Dim t As Integer
Dim m As Integer
Dim aste As Double
t = Worksheets("Sheet1").Cells(3, 17).Value
m = Worksheets("Sheet1").Cells(7, 17).Value
aste = t / (m * -1)
If aste >= 1.5 Then
MsgBox "Omavaraisuusasteesi on" + Str(aste) + ". Kaikki vaikuttaa hyvältä."
ElseIf aste < 1 Then
MsgBox "Omavaraisuusasteesi on" + Str(aste) + ". Menosi ylittää tulosi. Kiristä budjettia."
ElseIf aste >= 1 And aste < 1.5 Then
MsgBox "Omavaraisuusasteesi on" + Str(aste) + ". Tulosi ovat vain hieman suuremmat kuin menosi. Kiristä budjettia tarvittaessa."
End If
End SubSinänsähän tuottaisi täsmälleen saman lopputuloksen jos rivi 18 olisi
Else
Tuohon "Subscript out of range"-ilmoitukseen. Jos kirjoitat immediate ikkunaan (ja enteriä perään)
? worksheets(1).Name
Niin sanooko se Sheet1 kuten koodissasi lukee?
Esimerkiksi (kuten Nea sanoikin) suomenkielisessä Excelissä tulos olisi tällainen:
? worksheets(1).Name
Taul1
Eli tietekään mitään "Sheet1" taulukkoa ei löydy, jos sen nimi on vaikkapa "Taul1".
Liekö sitten joku kirjoitusvirhe tms. kun antoi tuon Subscript out of range. Mielestäni nimet täsmäsivät kokoajan ja tajusin kyllä, mikä oli jutun juoni. Nyt on kuitenki taas jo uusi herjaus 'type mismatch' highlightattuna on:
t = Worksheets("Ohjelma").Cells(3, 17).ValueMikä ihme tässä nyt on?
Moi taas Guuna!
Johtuupi todennäköisesti siitä, että sulla on ko. solu tahi koko sarakkeen ja/tai rivin solut määritetty muotoiluasetuksissa esim. tekstiksi, päivämääräksi tms. tahi jos et ole tehnyt mitään muutoksia jolloin tyyppi on oletuksena yleinen (variant) ja olet typonnut (finger failure) luvun sekaan vahingossa kirjainmerkin ja yrität sijoittaa ko. solun arvoa muuttujaan t jonka olet määrittänyt integer (kokonaisluku) tyyppiin.
Toisekseen rohken kyllä vahvasti epäillä, että olisit vielä missään vaiheessa todella tajunnut (anteeksi vaan) mikä jutun juoni oli eli on...
Ystävällisin terveisin
Nea Uusitalo
Aihe on jo aika vanha, joten et voi enää vastata siihen.