Mehrsprachige Excel Tabellen und VBA Formulare entwickeln

Mehrsprachige Dokument mit Excel

Wenn Sie mehrsprachige Excel-Tabellen oder VBA Formulare haben, bedeutet das meist einen großen Aufwand für Sie in der Dokumentenerstellung und -pflege. Komfortabler geht es mit ein wenig Software.

Wird nur eine deutsche und englische Version benötigt, kann man das noch recht gut als Text nebeneinander eintragen. Aber schon hier geht die Übersichtlichkeit schnell verloren, weil sehr viel Text untergebracht werden muss. Alternativ können Sie natürlich für jede Sprache ein neues Dokument anlegen. Kommen aber Änderungen, geht hier schnell die Freude verloren und die Dokumente sehen nach einigen Änderung schnell unterschiedlich aus.

Gerade wenn mehr als nur zwei Sprachen vorgesehen werden müssen, scheiden diese einfachen Möglichkeiten sowieso aus.

Was bleibt also übrig?

Übersetzungstabelle

In der App-Entwicklung nutzt man für die Mehrsprachigkeit Sprachdateien. Diesen Ansatz kann man gut auch mit Microsoft Excel verfolgen. Hier kann die Sprachdatei über eine separate, gemeinsame Übersetzungstabelle für alle Sprachen umgesetzt werden. In die Spalten werden die verschiedenen Sprachen eingetragen. Die Zeilen enthalten die Übersetzungsbegriffe.

Ausgewählt wird eine Übersetzung über ein Token. Das ist ein eindeutiger Begriff für jede Übersetzung, der für die Entwicklung des Dokuments verwendet wird. Wenn Sie Deutsch sprechen, wird das eher ein deutscher Begriff sein. Bei einfachen Übersetzungen wahrscheinlich sogar derselbe Begriff, wie die Übersetzung selber.

Übersetzungstabelle
Aufbau der Übersetzungstabelle

Sprachauswahl integrieren

Was Sie jetzt überlegen müssen ist, wie die Auswahl einer Sprache erfolgen soll. Was Sie aber immer brauchen, ist ein Feld in der die Sprache eingetragen wird. Dieses Feld steuert dann die richtige Auswahl aus der Übersetzungstabelle. Am intuitivsten für die spätere Anwendung ist es, wenn Sie dem Feld einen Namen geben, z. B. „language“. Aber es gibt noch weitere Fragestellungen, die Sie sich überlegen müssen:

  • Ist die Sprache abhängig von anderen Dokumenten? Dann können Sie das Feld „language“ direkt damit verknüpfen
  • Soll der Benutzer selber die Sprache aussuchen können? Dann bauen Sie am besten eine Listenauswahl ein. Klicken Sie auf das Feld „language“ und danach in der Ribbonleiste auf Daten | Datenüberprüfung und verknüpfen Ihre Sprache aus der Übersetzungstabelle als Quelle
  • Steht die Sprachauswahl in einem VBA Formular? Dann lesen und speichern Sie die Auswahl des Benutzers genauso im Feld „language“, dann bleibt die Einstellung nach dem Speichern erhalten
Eigene Seite zur Spracheeingabe mit verknüpfter Listenauswahl
Eigene Seite zur Spracheeingabe mit verknüpfter Listenauswahl

Makros oder nicht?

Um die Übersetzungstabelle zu verwenden, können Sie zwischen zwei Varianten wählen. Möchten (oder müssen) Sie Makros nutzen? Wenn nein, verwenden Sie am besten die Excel Funktion SVERWEIS.

Übersetzung mit SVERWEIS

Der SVERWEIS ist die erste (und meist einzige) Wahl, wenn Sie keine Makros (xlsm-Datei) verwenden möchten, dürfen oder können. Das ist aber kein Problem, damit lässt sich fast alles lösen.

Um die Anwendung des Befehls einfacher zu machen, empfiehlt es sich noch zwei zusätzliche Bereiche zu benennen.

Der SVERWEIS braucht neben dem Suchbegriff (= unser Token) noch zwei weitere Angaben. Einmal die Übersetzungstabelle. Deswegen markieren Sie die Tabelle und geben Ihr auch einen Namen, z. B. „translation“.

Um eine Übersetzung zu finden, braucht Excel jetzt noch die Angabe der entsprechenden Spalte als Zahl (A=1, B=2, …). Um diese in Abhängigkeit der eingestellten Sprache zu bestimmen, wird noch ein Feld benötigt.

Das kann an einer beliebigen Stelle stehen, am besten rechts in der Kopfzeile der Übersetzungstabelle. Es bekommt den Namen „code“ und enthält auch eine Formel:

=WVERWEIS(language;'@Translate'!B1:E2;2;FALSCH)

Der WVERWEIS funktioniert wie der SVERWEIS nur wird nach Zeilen und nicht nach Spalten gesucht. Das kann man ausnutzen und in der zweiten Zeile als Hilfe, die Zahl der Spalte eintragen.

Mit dem Ergebnis lassen sich jetzt an jeder beliebigen Stelle in der Tabelle Übersetzungen als Formel eintragen.

=SVERWEIS("Token";translation;code;FALSCH)

FALSCH steht dafür, dass auch wirklich der exakte Begriff gefunden wird.

Übersetzung mit eigener VBA-Funktion

Hat Ihre Tabelle sowieso Makros oder müssen Sie Formulare mehrsprachig gestalten, steht Ihnen auch der Weg offen, eine eigene Funktion dafür zu verwenden. Dann wird die Anwendung noch einfacher.

Die Funktion hat außerdem einen sehr einfachen Aufbau, indem Sie genau die gleiche Funktion über VBA nutzt. In VBA heißt der SVERWEIS-Befehl VLookup.

Um die Übersetzungstabelle oder den Code zu finden, kann über die Range Eigenschaft und dem Namen des Felds auf dessen Wert zugegriffen werden.

Beispiel:

Code = Sheets("@Translate").Range("code")
Function Translate(token As String) As String
 Translate = WorksheetFunction.VLookup(token, Sheets("@Translate").Range("translation"), Sheets("@Translate").Range("code"), False)
 Application.Volatile
End Function

Da als Parameter aber kein Zellbezug angegeben wird. Weiß Excel nicht, wann die Funktion sich ändert und aktualisiert werden muss. Dafür steht der zweite Befehl Volatile. Damit wird die Funktion bei jeder Änderung in der Tabelle aufgerufen.

Die Anwendung ist damit noch einfacher, da außer dem Token nichts übergeben werden muss.

In einer Zelle steht dann nur die Formel:

=Translate(“Token“)

Ändert sich der Inhalt des Feldes, aktualisiert Excel auch alle Übersetzungen.

Möchten Sie das selber ausprobieren? Sie finden ein Beispiel mit und ohne Makros unter Downloads.

Verwendung in Visual Basic Code

Im VBA Code lässt sich die Funktion z. B. im Form_Activate Ereignis einbauen.

Translate im UserForm und VBA-Quellcode
Translate im UserForm und VBA-Quellcode

Schwieriger wird es, wenn Sie auch Formularsteuerelemente innerhalb einer Tabelle verwenden. Die können nicht so einfach mit einer Zelle oder Funktion verknüpft werden. Das geht nur über den Umweg über einen anderen Button.

Formularsteuerelemente lassen sich nicht so einfach anpassen
Formularsteuerelemente lassen sich nicht so einfach anpassen
Sub UpdateShapes()
  ActiveSheet.Shapes("Schaltfläche 1").Select
  Selection.Characters.Text = Translate("Formular öffnen")
  [A1].Select
End Sub

Probieren Sie es einfach mal aus. Ihre Dokumente werden dadurch wesentlich schlanker und eleganter und Ihre Benutzer möchten das bestimmt bald nicht mehr missen.

Download

Beispiel ohne Makros

Beispiel mit Makros

Links

Excel-Makros und das Internet: https://techpluscode.de/excel-makros-und-das-internet/

Application.Volatile in Microsoft Docs: https://docs.microsoft.com/de-de/office/vba/api/excel.application.volatile

Dieser Beitrag hat 3 Kommentare

  1. Timon

    Hallo,
    erstmal danke für diesen Beitrag. Mir hat er sehr weitergeholfen. Ich habe nur einen Verbesserungsvorschlag. Ich würde vor das „Sheets“ noch ein „ThisWorkbook.“ davorsetzen. Dann hat man nicht das Problem, dass in allen Zellen mit Token ein Fehler angezeigt wird, sobald eine weitere Excel-Datei geöffnet wird.

    Vorschlag:

    Function Translate(token As String) As String
    Translate = WorksheetFunction.VLookup(token, ThisWorkbook.Sheets(„@translate“).Range(„translation“), ThisWorkbook.Sheets(„@translate“).Range(„code“), False)
    Application.Volatile
    End Function

    LG

Kommentar verfassen