Ohjelmointiasioissa lapsen tasolla olevana uskallan esittää teille varttuneille, ensimmäisen ongelmani heti selvittäneille asiantuntijoille, toisenkin pulman:
Ajaessani makroani käsky käskyltä suoritus siirtyy if-riviltä a-muuttujan ollessa järjestelmänkin mielestä "true" suoraan else-kohtaan then-osuuden ohittaen. Miksihän?
if a then b else c end if
Pitää korjata. If-silmukkani on tietenkin seuraavan muotoinen:
if a then
b
else
c
end if
Kun ajat ohjelmaasi käsky kerrallaan voitko samalla tarkistaa mikä a:n tila todella on.
Kiitos! Ennen if-rivin suoritusta a:n arvo on "true". If-riviltä else-riville tapahtuneen hyppäyksen jälkeen edelleen a:n arvo on "true".
Jos on vapaaehtoinen vastaanottaja, lähetän muutamakymmenrivisen aliohjelmani sähköpostin kautta silmäiltäväksi. Lukuisia omien aliohjelmien kutsuja sisältävänä ohjelmateksti ei tosin ole kovin havainnollinen.
Onko se siis "true" (merkkijono, joka sisältää sanan true) vai true (boolean, jonka arvo on tosi)? Jos se on merkkijono, niin tuon toimimattomuus ei ole mitenkään ihmeellistä.
Kiitos! Boolean-tyyppiseksi a on esitelty ja sen mukaisesti järjestelmä ilmoittaa a=true. Ei ilmoita a="true".
VB:ssä pitäisi tuolla koodilla toimia mutta jos makrossa on jotain eroa. Koitapa varmuuden vuoksi kirjoittaa koodi muotoon:
If a = True Then
Käskystä, kapteeni!
...
Edelleen väärin makro toimii näinkin. Kyllähän VB on pulmia aiheuttanut ennenkin. Tämä vaikuttaa tähänastisista selittämättömimmältä.
No koitapa vielä näin:
If a = False Then c Else b End If
Joka tapauksessa tuosta reklamaatiota Microsoftille.
Minulla ei ole Officen tuotteita enkä pääse testaamaan.
Kokeilin. Kuinka nyt taas suoritus osaakin hypätä juuri väärään kohtaan, c-käskyyn.
Voitko pistää koko koodin jonnekin, niin voisi testata? Millä tavalla olet testannut tuon muuttujan a-sisältöä? Oletko laittanut esim. ihan edelliselle riville
debug.print a
vai jollakin muulla tavalla?
Olen laittanut edelliselle riville. Liikutettaessa ajon aikana ohjausrasian kohdistinta muutttujan arvo näkyy ruudussa kohdistimen ollessa muuttujan nimen päällä.
Muuta paikkaa, minne koodin voin panna, en tiedä, kuin sähköpostilaatikon. Jos olet valmis vastaanottamaan, pyydän ilmoittamaan sähköpostiini.
Yritin lähettää koodin "Makro"-nimisenä edellisessä viestissä mainittua osoitetta käyttäen "Tiedoston liittämisen" kautta. En tiedä, onnistuinko. Ainakin "Yritä näyttää selaimessa" onnistui.
talmiid kirjoitti:
Yritin lähettää koodin "Makro"-nimisenä edellisessä viestissä mainittua osoitetta käyttäen
Me tarvitaan se osote, jonka tuo filupaste lopuks anto.
En havainnut muuta kuin http://sooda.dy.fi
Niinku toi: http://fpaste.dy.fi/?QOs
Käytä samoja muuttujanimiä...
Nyt siellä on rivillä 16:
Kerake0n= (Kelpaa And Käy)
Ja rivillä 17:
If KerakeOn Then ’a
Huomaatko noissa Kerakkeissa pienen eron nollan ja ison O-kirjaimen välillä? Rivillä 16 se nimittäin on kirjoitettu nollalla ja rivillä 17 isolla O:lla, eli teet vertailun alustamattoman muuttujan kanssa.
Kiitos, Sami! Olisihan tämä pitänyt arvata! Mieheltä, jonka edellisen ongelman toi ykkösen paikalla oleva pikku L, voi odottaa myös O:n korvautumista nollalla.
Saanko kysyä miten ihmeessä 0 ja O ja 1 ja l voi mennä sekaisin koodia kirjoitettaessa. Vai onko noi koodit jostain tulosteesta uudelleennäpytelty tai OCR:llä luettu?
Tuohon pulmaan tunnetusti auttaa kooditiedoston alkuun kirjoitettava Option Explicit
, joka määrää, että kaikki muuttujat on määriteltävä ennen käyttöä, jolloin siis kirjoitusvirheet aiheuttavat ilmoituksen, että kyseistä muuttujaa ei ole.
0 ja O sinänsä voivat mennä sekaisin, että ovat sentään qwerty-asettelussa vierekkäin, mutta l ja 1 on jo pieni ihme.
Kiitos! Olen pitänyt tapanani esitellä kaikki muuttujat ennen käyttöänsä, mutta tästä lähtien kooditiedostoni ensimmäisenä rivinä on Option Explicit. Pienten ihmeitten aika ei tosiaan ole ohi, eikä isojenkaan. Paitsi O ja 0 sekä l ja 1, kummakseni joskus myös ä ja a ovat kirjoituksessani toinen toisensa paikalla.
Aihe on jo aika vanha, joten et voi enää vastata siihen.