Teen kouluun pakollista harjoitustyötä Excelin VBA:lla (en tiedä noita virallisia nimityksiä, toivottavasti ymmärrätte). Ongelmani on nyt sellainen missä opettajani(kaan) ei osaa minua auttaa. Olen tehnyt eräänlaisen tietokilpailun jossa aina liikutaan formilta formille. Aihealueita on kolme ja jokaisessa 10 kysymystä. Kun kaikkiin kysymyksiin on vastattu, formi näyttää montako oikeaa vastausta kilpailija sai. Tämän jälkeen CommandButtonilla päästään formille josta voidaan valita aihealue, jälleen buttonilla. Ongelma -josta siis on tullut aivan ylitsepääsemätön este- on se, että ohjelma menee kerran läpi, mutta jos yritän pelata uudelleen saman aihealueen kysymykset ohjelma kaatuu. Käskyt napissa josta aihealue valitaan on:
form2.show
form1.hide
Antaa ilmoituksen että *form already displayed; can't show modally*.
Täytyy myöntää etten oikein VBA:ta hallitse, mutta nyt olisi pakko. Yritin ehdottaa opettajalle, että jos tuo tarvitsee jonkinnäköisen toistolauseen, johon opettaja sanoi ettei tarvitse. Eipä kuitenkaan itse osannut minua auttaa. Ehkä siksi, että naisia olemme molemmat =D
...mutta siis, olisin todella kiitollinen jos joku minua osaisi ja jaksaisi auttaa.
Ja jos joku jaksaisi niin voisiko tehdä excelin VBA:lla vaikka kolme formia, jotka siirtyvät form1->form2->form3->form1... buttonilla ja tuo ympyrä kulkisi niin kauan kun haluaa. Ettei se tekisi siis tuota mitä minun loistava ohjelmani tekee. Ja laittaisi sitten noiden fomien buttonien koodit tänne.
form2.show
form1.hide
Antaa ilmoituksen että *form already displayed; can't show modally*.
Täytyy myöntää etten oikein VBA:ta hallitse, mutta nyt olisi pakko. Yritin ehdottaa opettajalle, että jos tuo tarvitsee jonkinnäköisen toistolauseen, johon opettaja sanoi ettei tarvitse. Eipä kuitenkaan itse osannut minua auttaa. Ehkä siksi, että naisia olemme molemmat =D
...mutta siis, olisin todella kiitollinen jos joku minua osaisi ja jaksaisi auttaa.
Ja jos joku jaksaisi niin voisiko tehdä excelin VBA:lla vaikka kolme formia, jotka siirtyvät form1->form2->form3->form1... buttonilla ja tuo ympyrä kulkisi niin kauan kun haluaa. Ettei se tekisi siis tuota mitä minun loistava ohjelmani tekee. Ja laittaisi sitten noiden fomien buttonien koodit tänne.
Vastaukset 3
Vanhimmat
voisi olla se, että tietokilpailun aloitus ja lopetus tapahtuisi Excelin normaalitilassa eli soluissa. Silloin formit vapautuisivat uutta käyttökertaa varten.
Esimerkiksi tietokilpailun loputtua ohjelma sulkisi formin ja tulostaisi kilpailijan nimen ja tuloksen soluihin tai piirtäisi vaikkapa kilpailijalle graafin jossa näkyisivät oikeat ja väärät vastaukset.
Saattaahan olla että tehtävän tarkoituksena on tehdä vain formien kautta pyörivä ohjelma, joten siihenhän tuo neuvo ei juuri auta. Silloin voisi olla paikallaan yrittää ohjelmallisesti vapauttaa muistissa olevat formit.
Normaalitilanteessa vähänkään vaativampaa Excel-sovellusta ei yleensä kannata rakentaa vain formien varaan. Tämä siksi että esimerkiksi verkkoympäristössä formit aiheuttavat Excel-tiedostojen kaatumista turhankin usein...
VBA:ssa on modaalisia ja ei-modaalisia ikkunoita,
en nyt tarkkaan muista noitten eroa mutta se liittyi joten siihen että modaalinen ikkuna ei anna fokusta muille ikkunoille ennenkuin se on suljettu.
Jokatapauksessa ongelmasi luultavasti ratkeaa vaihtamalla formien tyyppi ei-modaaliseksi, eli kun klikkaat suunnittelutilassa formin auki ja asetat ominaisuuden "Showmodal" arvoksi "False" kaikille formeillesi niin tuon pitäisi toimia, kokeilin itse äsken ja näin se näytti menevän.
Et tiedä mistä minut pelastit =) KIITOS!