Onko mahdollista luoda Excelissä sellaista Msgboxia tai formia ilmoitusikkunana, joka on näkyvissä ja jonka sisältö mahdollisesti muuttuu sitä mukaa, kun joku tietty tarkistustoimitus etenee?
Esim. tiedoston avauksen yhteydessä tarkistetaan käyttöoikeus, josta ilmoitetaan viestikentällä (formi tai msgbox). Jos varmennus ottaa aikaa, ikkunassa olisi esim. % luku tarkistuksen etenemisestä tms. muuttuva teksti tai ominaisuus.
Omat kokemukset ovat, että viesti-ikkunan sisältöä ei juuri saa muutettua vasta kun subi tai funktio on suoritettu eikä edes aliohjelmien vaihtuessa. Olen käyttänyt aiemmin formia, jossa jokaisella aliohjelmalla oli oma label ja sillä +/- arvot. Kun aliohjelma oli suoritettu annettiin arvo ja määrättiin label näkyväksi ennen kuin alettiin suorittamaan seuraavaa aliohjelmaa. Silti kaikki arvot näkyivät formissa vasta, kun koko aliohjelmaketju oli ajettu läpi.
Riippuu tavasta, jolla tarkistata tietoa. Teetkö sen silmukassa/tms?
ne ovat olleet erillisiä aliohjelmia putkessa tyyliin
- eka tarkistus -> arvo ja näytä arvo
- mene toka tarkistus -> arvo ja näytä arvo
- jne
Nämä tulokset on näytetty yhdessä formissa, jossa jokaisella tarkistuksella oli oma ilmoituskohtansa eri paikoissa. Formi on aluksi tyhjä eli label_nimi.visible = false. Kun tarkistus on ohi label_nimi.visible = true.
Tällä tavalla tämä minun mielestä olisi pitänyt näyttää kesken koko toimituksen nuo välivaiheetkin.
Ymmärsin tuon jo, mutta millaisia tarkistuksia? Käytkö esim. silmukassa läpi tiettyjä soluja/tms vai tarkistatko yksittäisiä tietoja?
Itse olin myös kerran tekemässä progressbaria Exceliin, mutta luovutin googletuksen jälkeen. Kaikki ratkaisut kun olisivat tahtoneet oman ActiveX -komponentin tai muuta yhtä ilkeää.
Olisi edes AddressOf, niin vois kasata oman WndProcin :(
sqwiik kirjoitti:
Ymmärsin tuon jo, mutta millaisia tarkistuksia? Käytkö esim. silmukassa läpi tiettyjä soluja/tms vai tarkistatko yksittäisiä tietoja?
Eivät olleet silmukassa. If then else lauseita.
Havaintoni siis on, ettei formi päivitä itseään sen jälkeen, kun show komento on (alussa) suoritettu. Mutta jos yhden tehtävän suorittamisen jälkeen pistää uudelleen frm.show komennon, uusi arvo näkyykin. Tässä taas on haittana se, että itse asiassa nyt on kaksi identtistä formia näkyvissä päällekäin. Joutuu siis useamman kerran klikkailemaan ruksista ne pois. Se ei ole tarkoitus.
Siirrä tarkistukset tapahtumaan UserFormilla Sheetin/Moduulin sijaan, jolloin UserFormin päivitys toimii Repaint:lla.
Tuossa asiaa käsittelevä linkki Wordin puolelta, mutta siirrettävissä lähes sellaisenaan Excelin puolelle. Ainoa ongelma tulee siitä, jos käyttäjä lyö UserFormin kiinni kesken tarkistusten. Jotenkin estä UserFormia sulkeutumasta ennen aikojaan...
Tuosta linkissä mainitusta StatusBarin käytöstä sen verran, että ainakin minulla se hukkaa makrot ja kaataa Excelin (2k3) toisella kerralla, kun sitä käyttävää makroa yrittää ajaa. Ensimmäinen kerta toimii "oikein"...
Kiitoksia. Noin tuo näyttäisi toimivan. EDIT: Siis tuo userformissa ajaminen.
Tuon ruksinhan voi disabloida. Ja tuntuisi siltä, että sen jälkeen, kun tarkistukset on tehty, formiin tuotaisiin näkyviin esim. SULJE komentonappula, jolla formin voi unloadata.
No sitten vielä pikku nippeli. Onko kenelläkään ideaa siihen/onko edes mahdollista, että muuttujaksi saisi prosenttiluvun siitä, kuinka paljon tätä tarkistukoodia on jo käyty läpi? Tällöin tuo ilmoitettava osuus päivittyisi jouhevasti, kuin niin, että koodiin laitetaan aina kohta, jossa käsketään ilmoittamaan (kiinteä) luku tarkastuksen vaiheista (tai "vaihe 1/n suoritettu" jne). (tällä viimeksimainitulla tavalla saisi myös aikaan tosi köyhän miehen progress barinkin, kunhan jaksaa vääntää tarpeeksi monta kuvaa ja päivittää niitä koodin edetessä)
EDIT: linkissä oli paremman näköinen progres bar ;)
Kia kirjoitti:
Onko kenelläkään ideaa siihen/onko edes mahdollista, että muuttujaksi saisi prosenttiluvun siitä, kuinka paljon tätä tarkistukoodia on jo käyty läpi?
No lähinnä siten, että otat heti aluksi selville, paljonko läpikäytäviä soluja on. Sitten vain lasket prosentit = i / maara * 100
Toi olisikin helppo. Tarkistus on pelkkää koodia, jossa käydään rekisteriä läpi. Onko siis mahdollista laskea heti aluksi, että montako riviä tässä subissa on ja laskea sen perusteella tuo suhde?
Jos läpikäytävän koodin pituus on aina sama (pelkkiä If...Then...Else-tarkistuksia ja vakiomittaisia silmukoita), niin pilkkoa koodi pienempiin osiin, joiden läpi käydään joka tapauksessa, oli tarkistusten tulos mikä tahansa, joissa "ProgressBariin" lisätään pykäliä. Lähinnä kokeilemalla saa parhaan tuloksen, sillä jotkin osat koodia on nopeampia käydä läpi kuin toiset, eli "ProgressBarin" eteneminen saattaa olla hieman nykivää ilman hienosäätöä.
For i = 0 to 2 'koodia prosentit = prosentit + 20 '20, 40, 60 Next i If Jotain Then 'koodia prosentit = 80 'lisää koodia Else 'koodia prosentit = 70 If JotainMuuta Then 'koodia End If prosentit = 80 'lisää koodia End If prosentit = 100
Aihe on jo aika vanha, joten et voi enää vastata siihen.