Attribute VB_Name = "Module1" Public Sub NaytaMuotoiluKoodit() 1 MsgBox Application.International(xlDayCode) & "." & _ Application.International(xlMonthCode) & "." & _ Application.International(xlYearCode) End Sub Public Function PvmMuotoilu() As String 'Funktiossa PvmMuotoilu rakennetaan maa-asetusten mukaisesti sellainen ilmoitusteksti, joka kertoo käyttäjälle, miten päivämäärä pitää järjestelmään kirjoittaa. 'Muuttujaan M_Vs talletetaan vuosiluvun esitysmuot, muuttujaan M_Kk kuukauden esitysmuoto ja muuttujaan M_Pv päivän esitysmuoto. 'Muuttujaan Erotin talletetaan päivämäärän merkinnässä käytetty erotinmerkki. 'Suomalaisilla asetuksilla tämä on piste, joillakin muilla maa-asetuksilla erotinmerkki voi olla esimerkiksi kauttaviiva. 'Muuttujaan OutS kerätään muista muuttujista yhdistelty informaatio ja tämä arvo palautetaan funktion lopputuloksena. 'Funktiossa on käytetty International-objektia eri parametreilla muuttujan OutS arvon päättelyyn. 'Parametri xlDayCode (rivi 7) palauttaa merkin, jolla merkitään päivän paikkaa muotoilujonossa. 'Suomenkielessä funktio palauttaa arvon "p", englanninkieliset maa-asetukset tuottaisivat arvon "d". 'Paramerilla xlDayLeadingZero (rivi 8) saadaan vastaukseksi True, jos päivämäärä halutaan esittää aina kahdella numerolla ("pp"). 'Kuukausi operoidaan vastaavasti (rivit 11-14). 'Vuosiluku esitetään tässä aina neljällä numerolla, joten vuosiluvun koodi ("v") silmukoidaan merkkijonomuuttujaan M_Vs neljästi (rivit 15-17). 'Parametrilla xlDateSeparator saadaan vielä vastaukseksi päivämäärämuotoilussa käytettävä merkki (rivi 18). 'Kun International -ominaisuutta pyydetään parametrilla xlDateOrder (rivit 19, 21 ja 23), saadaan vastaukseksi luku 0, 1 tai 2. 'Tämä luku kertoo päivän, kuukauden ja vuoden järjestyksen käytettävässä päivämäärämuotoilussa. 'Tämän luvun perusteella muotoilun apuna käytetyt muuttujat M_Pv, M_Kk, M_Vs ja Erotin asetetaan oikealla tavalla ja oikeaan järjestykseen. 1 Dim M_Vs As String 2 Dim M_Kk As String 3 Dim M_Pv As String 4 Dim Erotin As String 5 Dim OutS As String 6 Dim Lp As Long 7 M_Pv = Application.International(xlDayCode) 8 If Application.International(xlDayLeadingZero) Then 9 M_Pv = M_Pv & Application.International(xlDayCode) 10 End If 11 M_Kk = Application.International(xlMonthCode) 12 If Application.International(xlMonthLeadingZero) Then 13 M_Kk = M_Kk & Application.International(xlMonthCode) 14 End If 15 For Lp = 1 To 4 16 M_Vs = M_Vs & Application.International(xlYearCode) 17 Next Lp 18 Erotin = Application.International(xlDateSeparator) 19 If Application.International(xlDateOrder) = 0 Then 20 OutS = M_Kk & Erotin & M_Pv & Erotin & M_Vs 21 ElseIf Application.International(xlDateOrder) = 1 Then 22 OutS = M_Pv & Erotin & M_Kk & Erotin & M_Vs 23 ElseIf Application.International(xlDateOrder) = 2 Then 24 OutS = M_Vs & Erotin & M_Kk & Erotin & M_Pv 25 End If 26 PvmMuotoilu = OutS End Function Public Sub PvmTesti() 'Funktio PvmTesti lukee taulukkosivulta aktiivisen solun arvon ja tarkistaa, onko arvo tulkittavissa päivämääräksi (rivi 27). 'Jos näin on, aliohjelma ei tee mitään, vaan suoritus päättyy. 'Jos käyttäjä sen sijan kirjoittaa jotain, jota ei voi tulkita päivämääräksi, tämä ohjelmakoodi ilmoittaa siitä rivillä 28. 'Tämän perusteella käyttäjä voi yrittää päivämäärän tallettamista uudelleen. 27 If Not IsDate(ActiveCell.Value) Then 28 MsgBox "Täytä päivämäärä muodossa: " & PvmMuotoilu 29 End If End Sub Function ExcelOnSuomenkielinen() As Boolean 1 ExcelOnSuomenkielinen = Application.LanguageSettings.LanguageID(msoLanguageIDUI) = 1035 End Function Sub TestaaExcelOnSuomenkielinen() MsgBox ExcelOnSuomenkielinen End Sub Public Function GetKieli() As String 'Koodissa on funktio GetKieli. 'Se palauttaa koodin SF kun Excel on suomenkielinen ja koodin SE, kun Excel on ruotsinkielinen. 'Kaikissa muissa tapauksissa se palauttaa koodin US. 'Huomaa, että kysymys on siis Excelin kieliversiosta (siis esimerkiksi Excelin valikkojen kielestä), ei niinkään komeen maa-asetuksista. 'Maa-asetuksiin talletettu tieto haettaisiin komennolla Application.International(xlCountrySetting) ja se palauttaisi 358 Suomen osalta. 'Huomaa myös, että jatkamalla ElseIf -haarautumista, samaan ehtolauseeseen voi liittää lisää haluamiaan kielikoodeja. 1 Dim KNo As Long 2 Dim TempS As String 3 TempS = "US" 4 KNo = Application.LanguageSettings.LanguageID(msoLanguageIDUI) 5 If KNo = 1035 Then 6 TempS = "SF" 7 ElseIf KNo = 1053 Then 8 TempS = "SE" 9 End If 10 GetKieli = TempS End Function Public Sub PvmTestiInt() 'Proseduurissa PvmTestiInt tarkistetaan edelleen, onko käyttäjä kirjoittanut soluun päivämäärätyyppistä informaatiota. 'Jos näin ei ole, tämä koodi osaa muistuttaa käyttäjää siitä samalla kielellä kuin Excel. 'Jos Excel on suomenkielinen, myös ilmoituksen teksti on suomeksi. 'Vastaavasti koodiin rakennettaisiin muut tarvittavat kielet 11 Dim MsgStr As String 12 Dim K As String 13 K = GetKieli 14 If K = "US" Then 15 MsgStr = "Please note the date format: " 16 ElseIf K = "SF" Then 17 MsgStr = "Täytä päivämäärä muodossa: " 18 ElseIf K = "SE" Then 19 MsgStr = "Obs! Formaten: " 20 End If 21 If Not IsDate(ActiveCell.Value) Then 22 MsgBox MsgStr & PvmMuotoilu 23 End If End Sub Public Sub Kieliversio() 1 MsgBox (Application.LanguageSettings.LanguageID(msoLanguageIDUI)) End Sub