Excel: Keyboard Layout automatisch je nach Spalte ändern?

Morvan

Redakteur
Teammitglied
Registriert
Apr. 2014
Beiträge
1.203
Ich wurde nach Folgendem gefragt und bin mit meinem Latein am Ende:

In einer Exceltabelle soll in einer Spalte in jede Zelle deutscher Text mit deutscher Schrift eingetragen werden. In einer andere Spalte in Griechisch, mit den entsprechenden Buchstaben.
Aktuell muss dafür zwischen zwei Keyboard-Layouts manuell umgeschaltet werden.
Gibt es eine Möglichkeit, dass in der „griechischen Spalte“ das Layout automatisch auf Griechisch springt und dann, wenn eine Zelle in einer „deutschen Spalte“ ausgewählt wird, wieder auf deutsch umstellt?
 
Wenn dann mit VBA... ob aber ob man darüber Keyboad-Layout wechseln kann?
Evtl ist das eine Inspiration?

Oder auch das: https://stackoverflow.com/questions...-the-input-language-programmatically-with-vba

Du müsstest auf verschiedene Events reagieren aus meiner Sicht:
  • Selektion von Zellen
  • Schließen der Datei (sollte ja das Layout zurücksetzen)
Bei einem 64-Bit-Office müsste die Funktion so eingebunden werden
Code:
Private Declare PtrSafe Function ActivateKeyboardLayout Lib "user32.dll" (ByVal myLanguage As Long, Flag As Boolean) As Long

Das hier sieht auch ganz gut aus:
https://www.spreadsheet1.com/how-to-change-system-keyboard-language-with-vba.html

Edit:
Hier ein kleiner Beispielcode, der in die Tabelle muss:
Code:
#If Win64 Then
    Private Declare PtrSafe Function ActivateKeyboardLayout Lib "user32.dll" (ByVal HKL As LongPtr, ByVal Flag As Long) As LongPtr
#Else
    Private Declare Function ActivateKeyboardLayout Lib "user32.dll" (ByVal HKL As Long, Flag As Long) As Long
#End If

Private Const GERMAN = 1031
Private Const GREEK = 1032

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Intersect(Range("B1:B65536"), Target) Is Nothing Then
        Range("A1").Value = GREEK & ": " & ActivateKeyboardLayout(GREEK, 0)
    Else
        Range("A1").Value = GERMAN & ": " & ActivateKeyboardLayout(GERMAN, 0)
    End If
End Sub

Idealerweise würde man noch auf das Schließen der Datei reagieren.
Edit:
Das würde wohl damit gehen:
Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Call ActivateKeyboardLayout(GERMAN, 0)
End Sub
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Scientist

Ähnliche Themen

Zurück
Oben