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...
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 SubTä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"
Tuo Auto_Open() oli juuri se mitä hain.
Kiitos neuvosta!
-Petri
Niinpä... When you set Application.EnableEvents = False the Auto_Open event still runs. The scope of Auto_Open does not have to be Public (it can be changed to Private). Holding down Shift when opening the workbook will disable both Auto_Open and Workbook_Open. You can call the Auto_Open function manually using Workbook.RunAutoMacros. Workbook_Open is called before Auto_Open if both events exist. Workbooks.Open ActiveWorkbook.RunAutoMacros <A HREF="../../excel/macros/enumerations-xlrunautomacro.htm"><U>xlRunAutoMacro</U></A>.
VBA:ssa on kaikenlaista klassista kunhan oppii tunnistamaan...