wenn ein VBAstler nichts zu tun hat, fängt er an zu spielen Ich habe hier mal etwas gebastelt, das in der international vernetzten Welt sicher seinen Sinn hat: ein Grundgerüst, mit dem man die Sprache einer UserForm mit nur einem Klick nach Belieben ändern kann. Das Ganze ist so gestrickt, dass es sich leicht und mit nur minimalen Ergänzungen auch in bereits vorhandene Projekte integrieren lässt.
Als Voraussetzung wird eine einfache Userform1 benötigt, die mit Controls mit beliebigen Namen (Vorgabe oder individuell) gefüllt ist. Alle Controls, die die Eigenschaft Caption haben, machen den meisten Spaß. Wichtig: Es muss eine ComboBox1 dabei sein. Die handelsübliche Tabelle1 wird ja von XL mitgeliefert. Dort kann man aus optischen Gründen (optional) diese Code-Kleinigkeit einfügen:
Code: Alles auswählen
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Columns.AutoFit
End Sub
Code: Alles auswählen
Option Explicit
Private Sub UserForm_Activate()
Dim i As Integer, c As Integer
Dim ctr As Control
For Each ctr In Controls 'Schleife durch alle Controls
On Error Resume Next 'nicht alle Controls haben ein Caption
ctr.Caption = "" 'Löscht vorhandene Caption
Next
c = Cells(1, Columns.Count).End(xlToLeft).Column
For i = 2 To c 'schreibt die vorhandenen Sprachen in die ComboBox1
ComboBox1.AddItem Cells(1, i)
Next i
ComboBox1.SetFocus 'hier geht's für den User los
End Sub
Private Sub ComboBox1_Change()
Dim iCol As Integer
iCol = ComboBox1.ListIndex + 2 'addiert zum Index den Offset
SetLanguage iCol 'Aufruf in mdlLanguage mit Spaltennummer
End Sub
Code: Alles auswählen
Option Explicit
Sub GetControls() 'Liest alle Controls aus Userform1
Dim ctr As Control
Dim i As Integer
i = 2 'Einträge ab Zeile 2
Cells.Clear
With UserForm1
For Each ctr In .Controls 'Schleife durch alle Controls
Cells(i, 1) = ctr.Name 'Namen in aktuelle Tabelle schreiben
On Error Resume Next 'nicht Controls haben eine Caption
i = i + 1 'Zeile erhöhen
Next
End With
End Sub
Sub SetLanguage(iCol As Integer) 'bekommt die ausgewählte Sprache als Spaltennummer
Dim ctr As Control
Dim i As Integer, r As Integer
i = 2 'Einträge ab Zeile 2
With UserForm1
For Each ctr In .Controls 'Schleife durch alle Controls
On Error Resume Next 'nicht aller Controls haben eine Caption
ctr.Caption = Cells(i, iCol) 'schreibt die Caption
i = i + 1 'Zeile erhöhen
Next
End With
End Sub
Sub ShowUSF()
UserForm1.Show
End Sub
Also Schritt vier: Mit Alt+F8 ruft man GetControls auf und findet eine Liste der Controls im aktuellen Blatt.
In Schritt fünf trägt man B1 ein Sprachkürzel (z.B. DE für Deutsch) ein und in den Zellen darunter die gewünschten Captions der gelisteten Controls. Weitere Sprachen/Übersetzungen kommen jeweils in die nächste Spalte.
Startet man jetzt die Userform1 (wieder mit Alt+F8) ist sie immer noch nackig. Durch Auswahl eines Sprachkürzels in der ComboBox1 ändert sich das schlagartig.
Wie gesagt, das Ganze ist ein Grundgerüst, auf dem sich aber Übersetzungen von z.B. Texten in ControlTipText, Text- oder ComboBoxen, Tabellennamen und die Caption der UserForm realisieren lassen. Da lässt sich noch sehr viel ausfeilen.
Zeitaufwand für diese Spielerei: nicht mehr als 15 Minuten. Benötigte VBA-Kenntnisse: Minimal (zum Verständnis beachte man die Kommentare im Code). Sprachkenntnisse: gibt's bei deepL.com
Viel Spaß damit!