Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Globaali muuttuja VBA & Excel

Harrastekoodari [08.07.2026 10:41:26]

#

Hei

Käytän Visual basic koodia excelistä. Koodissa on kolme moduulia. Haluasin määrittää ja antaa globaalille muuttujalle arvon (merkkijono="mjonoteksti") ennenkuin moduuleissa olevia koodeja suoritetaan, siten että se näkyy kaikissa moduuleissa.

Nyt olen antanut moduulin Module1 sisällä globaalille muuttujalle arvon ja homma toimii. Mutta jos suoritan aluksi moduulin Module2 niin siellä globaalilla muuttujlla ei ole arvoa...

neosofta [08.07.2026 12:15:30]

#

Määrittele Globaali muuttuja missä tahansa moduulissa General osiossa tyyliin: Global muuttujaninimi As muuttujantyyppi, vaikkapa Global merkkijono As String niin se toimii missä tahansa toisessa moduulissa. Jos haluat, että sen arvoksi tallennnetaan esim. "mjonotesti" niin se pitää tehdä esim. aliohjelmassa ennen kuin muuta koodia suoritetaan:
Sub Auto_Open() ' suoritetaan automaattisesti kun Excel projekti avataan
merkkijono = "mjonotesti"
End Sub
Tämän jälkeen voit käyttää sitä mistä tahansa muusta moduulista käsin esim. MsgBox merkkijono, tai muuttaa sen arvoa esim. merkkijono = "jokinmuumerkkijono"
Jos taas haluat asettaa Globaalin vakion jonka arvoa ei voi muuttaa niin teet sen tyyliin Global Const merkkijono = "mjonotesti"

Harrastekoodari [08.07.2026 14:13:57]

#

Tuo Auto_Open() oli juuri se mitä hain.
Kiitos neuvosta!

-Petri

IinesAho [13.08.2026 16:28:09]

#

Tuo on ihan klassinen VBA:n kompastuskivi, tunnistan tuon heti. Se muuttujan arvo asettuu vasta silloin kun se koodirivi oikeasti ajetaan, ei sillä hetkellä kun Excel avataan - joten jos Module2 lähtee liikkeelle ensin, muuttuja on vielä tyhjä. Helpoin korjaus on laittaa se alustus esimerkiksi Workbook_Open-tapahtumaan ThisWorkbookissa, jolloin se pyörähtää käyntiin heti tiedoston avautuessa ennen mitään muuta. Näin se arvo on aina valmiina, oli sitten mikä moduuli tahansa ensimmäisenä ajossa.

Vastaus

Muista lukea kirjoitusohjeet.
Tietoa sivustosta