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 Sub
Sainki 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 ilmo
Toisekseen 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 Sub
Sinä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).Value
Mikä 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.