
Du har byggt ett makro som fungerar bra på din egen dator. Sedan skickar du filen till en kollega i Norge, en kund i Finland eller ett dotterbolag i USA, och plötsligt visas fel text, formler som inte går att tolka eller tal som hamnar fel. Orsaken är oftast att makrot inte vet i vilken Excel-miljö det körs.
Lösningen är att låta makrot läsa av landskoden från Excel och agera utifrån den. Det räcker med några rader VBA. I den här artikeln får du ett färdigt makro som du kan kopiera rakt in i din arbetsbok, en genomgång av hur det fungerar och tips på hur du bygger vidare med egna meddelanden för olika länder.
Varför spelar språkversionen roll för ditt makro?
Ett makro som bara ska köras på din egen dator behöver sällan bry sig om språk. Så fort filen skickas vidare till en kollega i Norge, Finland eller USA kan samma kod bete sig olika. Här är de vanligaste skälen till att det lönar sig att veta var makrot körs.
- Meddelanden på användarens språk: En
MsgBoxmed text på svenska hjälper föga om användaren sitter i Danmark. Vet makrot landet kan det visa instruktioner, felmeddelanden och bekräftelser på ett språk som användaren förstår, i stället för att gissa. - Färre fel: Missförstånd vid datainmatning är ofta orsaken till att något går snett. Ett makro som ber om ett belopp kan få in 1,5 från en användare och 1.5 från en annan. Decimaltecknet är komma i Sverige men punkt i USA och Storbritannien. På samma sätt är listavgränsaren (tecknet som skiljer argument i en formel) semikolon i svenska Excel men komma i engelska. Läser makrot in text eller skriver ut tal utan att ta hänsyn till detta kan resultatet bli fel utan att något felmeddelande visas.
- Formler som skrivs via VBA: Funktionsnamnen skiljer sig mellan språkversioner. Det som heter
SUMMAi svenska Excel heterSUMi engelska. EgenskapenRange.Formulaförväntar sig engelska funktionsnamn med komma som avgränsare, medanRange.FormulaLocalanvänder användarens egna namn och avgränsare. Vet du inte vilken miljö koden körs i är det lätt att välja fel och få ett felmeddelande eller en formel som inte fungerar. - Samarbete över gränser: När en arbetsbok delas mellan kollegor i flera länder blir de små skillnaderna snabbt märkbara. Ett makro som anpassar sig efter miljön gör att alla får en fungerande och begriplig upplevelse utan att du behöver underhålla en separat version per land.
Första steget är att få makrot att läsa av vilken miljö det körs i. Det visar vi i nästa avsnitt.
Så hämtar makrot landskoden
Makrot nedan frågar Excel vilken landskod programmet använder och visar sedan ett meddelande i en dialogruta. Koden är kort, så du kan kopiera den rakt av och bygga vidare på den.
Landskoden följer samma nummer som de landsnummer vi slår när vi ringer utomlands: 46 för Sverige, 47 för Norge, 1 för USA och så vidare. Du hittar en uppställning över alla landskoder här.
Makrokod för att läsa av landskoden
Sub AvgoraSprakExcelinstallation()
strLandsKod = Application.International(xlCountryCode)
If strLandsKod = 46 Then
MsgBox ("Hej")
ElseIf strLandsKod = 34 Then
MsgBox ("Hola")
End If
End Sub
Se även
Om du arbetar med internationella kalkylblad kan du även bygga en valutakonverterare i Excel för att automatisera omräkningar mellan olika valutor.
Så fungerar koden
- Variabeln: Först deklareras variabeln
strLandsKod, som lagrar landskoden som makrot hämtar. - Hämtningen: Med
<strong>Application</strong>.<strong>International(xlCountryCode)</strong>läser makrot av landskoden från Excels inställningar och lägger värdet i variabeln. - Villkorssatserna: Koden jämför värdet i variabeln med olika landskoder och visar ett meddelande i en dialogruta som passar det land som matchar.
Tänk på att villkoren bara fångar de länder som du har skrivit in. Landskoder som du inte har med i koden ger inget meddelande, något vi löser i avsnittet om att använda landskoden i egna makron.
Landskod är inte samma sak som språk
Det är lätt att tro att landskoden alltid säger vilket språk användaren har, men så enkelt är det inte. Koden från Application.International beskriver landsversionen av Excel och de regionala inställningarna, till exempel decimaltecken, listavgränsare och datumformat. Den berättar inte säkert vilket språk menyerna och knapparna visas på.
Ett vanligt exempel är en svensk medarbetare som kör engelska menyer men har svenska regionala inställningar i Windows. Då kan makrot få landskod 46, trots att allt i Excel ser engelskt ut. Det omvända förekommer också, till exempel hos någon som arbetar utomlands med en lokal Excel-version men med ett annat språk än landets.
I bladet nedan ser du hur landskoderna kan kopplas till olika meddelanden. Varje rad visar en landskod, landet och den text som makrot skulle visa.

Läs av gränssnittsspråket
Vill du veta vilket språk användaren faktiskt ser i menyerna, kan du läsa av gränssnittsspråket med Application.LanguageSettings.LanguageID(msoLanguageIDUI). Den returnerar ett språk-ID (LCID) och inte en telefonlandskod. Några vanliga värden:
- 1053 – svenska
- 1044 – norska (bokmål)
- 1030 – danska
- 1035 – finska
- 2057 – engelska (Storbritannien)
- 1033 – engelska (USA)
Observera att språk-ID:n är en annan nummerserie än landskoderna i tabellen. Blanda inte ihop dem i samma Select Case.
Vilken ska du använda?
- Använd landskoden när det du bryr dig om är regionala inställningar, till exempel hur tal, datum och valutor skrivs. Det gäller bland annat om du bygger något som en valutakonverterare i Excel och vill visa belopp på ett sätt som användaren känner igen.
- Använd gränssnittsspråket när du vill att meddelanden, rubriker och instruktioner ska skrivas på det språk som användaren faktiskt läser.
Är du osäker kan du läsa av båda och låta gränssnittsspråket styra texten, medan landskoden styr formateringen.
Så kör du makrot steg för steg
Här är stegen för att få in makrot i din arbetsbok och köra det. Det tar någon minut om du aldrig har öppnat VBA-editorn tidigare.
- Öppna en arbetsbok i Excel och tryck
ALT + F11för att öppna VBA-editorn (Visual Basic for Applications). - Högerklicka på arbetsboken i projektfönstret till vänster, eller använd menyn, och välj
<strong>Insert</strong> > <strong>Module</strong>. En tom modul öppnas i kodfönstret. - Kopiera makrokoden från avsnittet ovan och klistra in den i den nya modulen.
- Stäng VBA-editorn och gå tillbaka till Excel. Du behöver inte spara något i editorn först.
- Tryck
ALT + F8för att öppna makrodialogen, markera makrotAvgoraSprakExcelinstallationi listan och klicka påKör. Dialogrutan med meddelandet visas nu.
Tips: Spara filen som Excel-arbetsbok med makron (*.xlsm). Om du sparar som vanlig .xlsx tar Excel bort makrokoden, och du får skriva in den på nytt nästa gång.
Observera: Makron måste vara aktiverade för att koden ska fungera. Om Excel visar ett säkerhetsmeddelande när du öppnar filen, klicka på Aktivera innehåll. Syns inte makrot i listan, eller händer ingenting, kan det bero på att makron är blockerade av inställningarna i Excel eller av din organisation.
Använd landskoden i egna makron
Landskoden blir mer användbar när makrot gör något med den. Det vanligaste är att välja meddelandetext efter land. Med Select Case blir det en kort och lättläst lösning, och Case Else fångar upp alla länder du inte har skrivit text för.
Välj meddelande med Select Case
Exemplet nedan visar en hälsning på användarens språk. Länder som saknas får en engelsk standardtext:
Sub VisaHalsning()
Dim landskod As Long
Dim meddelande As String
landskod = Application.International(xlCountryCode)
Select Case landskod
Case 46: meddelande = "Välkommen!"
Case 45, 47: meddelande = "Velkommen!"
Case 358: meddelande = "Tervetuloa!"
Case Else: meddelande = "Welcome!"
End Select
MsgBox meddelande
End Sub
Några saker att notera:
- Flera landskoder kan dela på samma text. Här använder Danmark (45) och Norge (47) samma rad.
Case Elseär din säkerhetsmarginal. Om någon kör makrot med en landskod som du inte har förutsett får personen ändå ett begripligt meddelande, i det här fallet på engelska.- Vill du lägga till ett språk skriver du bara en ny
Case-rad. Resten av makrot behöver du inte röra. - Gör gärna om koden till en funktion som returnerar texten. Då kan alla dina makron använda samma översättningar.
Undvik problem med formler och talformat
Så fort makrot skriver formler eller hanterar tal påverkas det av språkversionen. Fem regler räcker långt:
- Skriv formler med
Formula. EgenskapenRange.Formulaanvänder alltid engelska funktionsnamn och komma som argumentavgränsare, till exempelRange("B1").Formula = "=SUM(A1:A10)". Det fungerar oavsett om användaren har svenska, tyska eller engelska Excel.FormulaLocalanvänder däremot användarens eget språk (SUMMApå svenska) och kraschar lätt hos någon annan. - Använd
NumberFormati stället förNumberFormatLocal. Formatkoder som"#,##0.00"tolkas på samma sätt överallt, och Excel visar sedan talet med användarens decimaltecken och tusentalsavgränsare. - Läs av avgränsarna när du behöver dem.
Application.DecimalSeparatorger decimaltecknet ochApplication.International(xlListSeparator)listavgränsaren. Det kan behövas om du bygger text som ska läsas in igen, till exempel en CSV-fil. - Var försiktig med textomvandling av tal.
CDbl("1,5")tolkas efter användarens regionala inställningar och kan ge fel eller ett annat tal.Val("1.5")förväntar sig alltid punkt som decimaltecken. - Skriv tal och datum direkt i cellerna när det går. Tilldela ett riktigt tal,
Range("A1").Value = 1.5, i stället för text som ska tolkas.
Det här blir extra viktigt när du räknar med belopp. Bygger du till exempel en valutakonverterare i Excel som ska användas i flera länder, bör både formler och talformat följa reglerna ovan. Då räknar makrot rätt oavsett vem som öppnar filen.
Sammanfattning
Du kan nu låta ett makro läsa av vilken landskod Excel använder med Application.International och reagera på den, till exempel genom att visa ett meddelande på användarens eget språk. Du vet också att landskoden bygger på regionala inställningar och landsversion, så den är inte alltid samma sak som menyspråket. Behöver du veta vilket språk gränssnittet har kan du läsa av det separat med Application.LanguageSettings.
Med en Select Case och en engelsk standardtext för okända länder blir makrot begripligt för fler. Tänk också på att formelnamn, decimaltecken och listavgränsare kan se olika ut i olika språkversioner.
Som nästa steg kan du ta något av dina egna makron som visar texter i en dialogruta, lägga meddelandena i en Select Case och testa med några olika landskoder. Ändra landskoden manuellt i koden, så ser du direkt hur varje version av meddelandet ser ut.
Artikeln är en del av: Kom igång med Excel-makron: en introduktion och översikt