Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Virtuelle Tastatur öffnen VBA

Forumthread: Virtuelle Tastatur öffnen VBA

Virtuelle Tastatur öffnen VBA
01.03.2019 08:25:03
Thomas
Habe folgenden Code gefunden, leider bekomme ich die Fehlermeldung "Konnte Tastatur nicht öffnen"
Nutze Windows 10.
Hat jemand eine Idee.....
'--------------------------------------------------------------------------
' Module : UserForm1
' Author : Case (Ralf Stolzenburg)
' Date : 25.04.2013
' Purpose : On Screen Keyboard - OSK - Bildschirmtastatur...
'--------------------------------------------------------------------------
Option Explicit

Private Sub CommandButton1_Click()
Shell "wmic Process where ""name='osk.exe'"" call terminate", vbHide
Unload Me
End Sub

Private Sub TextBox1_Enter()
TextBox1.Text = ""
ShellAndWait "cmd /c osk"
End Sub

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Shell "wmic Process where ""name='osk.exe'"" call terminate", vbHide
End Sub

'--------------------------------------------------------------------------
' Module : UserForm1
' Procedure : ShellAndWait
' Author : Case (Ralf Stolzenburg)
' Date : 25.04.2013
' Purpose : ShellAndWait mit ausgeblendetem Dosfenster...
'--------------------------------------------------------------------------

Private Sub ShellAndWait(ByVal strPathName As String)
Dim WshShell As Object
On Error GoTo Fin
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run strPathName, 0, True
Fin:
Set WshShell = Nothing
If Err.Number  0 Then MsgBox "Error: " & _
Err.Number & " " & Err.Description
End Sub

' UserForm nicht über das "X" schliessen lassen

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = 0 Then Cancel = True
End Sub

Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Virtuelle Tastatur öffnen VBA
01.03.2019 08:46:08
Nepumuk
Hallo Thomas,
teste mal:
Option Explicit
Option Private Module

Private Declare PtrSafe Function GetCurrentProcess Lib "kernel32.dll" () As LongPtr
Private Declare PtrSafe Function IsWow64Process Lib "kernel32.dll" ( _
    ByVal hProcess As LongPtr, _
    ByRef Wow64Process As LongPtr) As Long
Private Declare PtrSafe Function ShellExecuteA Lib "shell32.dll" ( _
    ByVal Hwnd As LongPtr, _
    ByVal lpOperation As String, _
    ByVal lpFile As String, _
    ByVal lpParameters As String, _
    ByVal lpDirectory As String, _
    ByVal nShowCmd As Long) As Long
Private Declare PtrSafe Function Wow64EnableWow64FsRedirection Lib "kernel32.dll" ( _
    ByVal Enable As Boolean) As Boolean

Private Const SW_SHOWNORMAL As Long = 1&

Public Sub LoadScreenKeyboard()
    Dim lngptrIsWow64 As LongPtr, lngptrProcess As LongPtr
    lngptrProcess = GetCurrentProcess
    Call IsWow64Process(lngptrProcess, lngptrIsWow64)
    If lngptrIsWow64 = 0 Then
        Call ShellExecuteA(Application.Hwnd, "open", "osk.exe", _
            vbNullString, "C:\Windows\System32\", SW_SHOWNORMAL)
    Else
        Call Wow64EnableWow64FsRedirection(False)
        Call ShellExecuteA(Application.Hwnd, "open", "osk.exe", vbNullString, _
            "C:\Windows\System32\", SW_SHOWNORMAL)
        Call Wow64EnableWow64FsRedirection(True)
    End If
End Sub

Public Sub UnloadScreenKeyboard()
    Dim objWMI As Object, objProcessList As Object, objProcess As Object
    Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
    Set objProcessList = objWMI.ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'osk.exe'")
    For Each objProcess In objProcessList
        Call objProcess.Terminate
    Next
    Set objProcessList = Nothing
    Set objWMI = Nothing
End Sub

Gruß
Nepumuk
Anzeige
AW: Virtuelle Tastatur öffnen VBA
01.03.2019 09:17:56
Thomas
Hallo
Vielen Dank für die schnelle Antwort:
Muss ich deinen Code zusätzlich zu dem anderen Script hinzufügen?
Beim einfügen wird bei mir immer Option Private Module rot gekennzeichnet.
AW: Virtuelle Tastatur öffnen VBA
01.03.2019 09:27:23
Nepumuk
Hallo Thomas,
lösch die Zeile. Bei mir steht der Code in einem Standardmodul und da ist die Option zulässig. Der Code ersetzt deinen bisherigen Code vollständig.
Gruß
Nepumuk
Anzeige
AW: Virtuelle Tastatur öffnen VBA
01.03.2019 09:28:29
Dieter(Drummer)
Hallo Thomas,
einfach den gesamten Code von Nepumuk, in z.B, Modul 1, einfügen. Nepumuk hat da einen tollen Code bereit gestellt, der bestens funktioniert. Man kann sogar die Größe der virtuellen Tastatur ändern.
Einfachtol ...
Gruß, Dieter(Drummer)
AW: Virtuelle Tastatur öffnen VBA
01.03.2019 09:40:57
Thomas
Ok, Habe es in ein Modul gepackt.
Wie rufe ich die Tastatur auf, wenn ich in ein Textfeld klicke?
Anzeige
AW: Virtuelle Tastatur öffnen VBA
01.03.2019 10:04:08
Thomas
Hab's hinbekommen.
Vielen Vielen Dank an Nepumuk und Dieter(Drummer).
Ihr seid die besten !!!
AW: Der Dank gehört überwiegen Nepumuk, ...
01.03.2019 10:16:08
Dieter(Drummer)
... aber Danke für deine Rückmeldung.
Gruß, Dieter(Drummer)
AW: Virtuelle Tastatur öffnen VBA
01.03.2019 10:18:55
Nepumuk
Hallo Thomas,
versuch es mal so:
Private Sub TextBox1_Enter()
    Call LoadScreenKeyboard
End Sub

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Call UnloadScreenKeyboard
End Sub

Gruß
Nepumuk
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Virtuelle Tastatur in Excel mit VBA öffnen


Schritt-für-Schritt-Anleitung

Um die virtuelle Tastatur in Excel zu öffnen, kannst Du VBA verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Erstelle ein neues Modul:
    • Rechtsklick auf "VBAProject (deinDateiname)" > Einfügen > Modul.
  3. Füge den folgenden Code in das Modul ein:
Option Explicit

' Funktion zum Laden der Bildschirmtastatur
Public Sub LoadScreenKeyboard()
    Dim lngptrIsWow64 As LongPtr, lngptrProcess As LongPtr
    lngptrProcess = GetCurrentProcess
    Call IsWow64Process(lngptrProcess, lngptrIsWow64)
    If lngptrIsWow64 = 0 Then
        Call ShellExecuteA(Application.Hwnd, "open", "osk.exe", vbNullString, "C:\Windows\System32\", SW_SHOWNORMAL)
    Else
        Call Wow64EnableWow64FsRedirection(False)
        Call ShellExecuteA(Application.Hwnd, "open", "osk.exe", vbNullString, "C:\Windows\System32\", SW_SHOWNORMAL)
        Call Wow64EnableWow64FsRedirection(True)
    End If
End Sub

' Funktion zum Schließen der Bildschirmtastatur
Public Sub UnloadScreenKeyboard()
    Dim objWMI As Object, objProcessList As Object, objProcess As Object
    Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
    Set objProcessList = objWMI.ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'osk.exe'")
    For Each objProcess In objProcessList
        Call objProcess.Terminate
    Next
    Set objProcessList = Nothing
    Set objWMI = Nothing
End Sub
  1. Um die virtuelle Tastatur zu öffnen, füge den folgenden Code in das Textfeld ein:
Private Sub TextBox1_Enter()
    Call LoadScreenKeyboard
End Sub

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Call UnloadScreenKeyboard
End Sub
  1. Schließe den VBA-Editor und teste das Textfeld in Deiner Excel-Anwendung.

Häufige Fehler und Lösungen

  • Fehlermeldung: "Konnte Tastatur nicht öffnen"
    Stelle sicher, dass Du den richtigen Pfad zur osk.exe verwendest. Überprüfe, ob die Datei tatsächlich im angegebenen Verzeichnis (C:\Windows\System32\) vorhanden ist.

  • "Option Private Module" wird rot markiert
    Diese Zeile ist nur in Standardmodulen erlaubt. Lösche sie oder platziere den Code in einem Standardmodul.


Alternative Methoden

Wenn der VBA-Code nicht funktioniert, kannst Du die digitale Tastatur manuell über das Startmenü in Windows 10 öffnen:

  1. Drücke Windows-Taste + R, um den Ausführen-Dialog zu öffnen.
  2. Gib osk ein und drücke Enter.

Diese Methode ermöglicht es Dir, die virtuelle Tastatur ohne VBA zu nutzen.


Praktische Beispiele

Hier ist ein einfaches Beispiel, wie Du den obigen Code nutzen kannst, um die Windows virtuelle Tastatur zu öffnen, wenn Du auf ein Textfeld klickst:

Private Sub TextBox1_Enter()
    Call LoadScreenKeyboard
End Sub

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Call UnloadScreenKeyboard
End Sub

Füge diesen Code in das entsprechende UserForm ein, um die virtual Tastatur beim Fokussieren des Textfeldes zu aktivieren.


Tipps für Profis

  • Verwende die vbHide-Option, um das Konsolenfenster beim Ausführen des Befehls auszublenden.
  • Überlege, die Größe der virtuellen Tastatur anzupassen, um die Benutzererfahrung zu verbessern.

FAQ: Häufige Fragen

1. Wie kann ich die Bildschirmtastatur ohne Tastatur öffnen?
Du kannst die Bildschirmtastatur direkt über den Ausführen-Dialog (Windows + R) mit dem Befehl osk öffnen.

2. Funktioniert der Code auch in Excel 2016?
Ja, der Code funktioniert in Excel 2016 und anderen neueren Versionen von Excel unter Windows 10.

3. Was ist ShellAndWait?
ShellAndWait ist eine benutzerdefinierte Funktion, die es ermöglicht, ein Programm zu starten und auf dessen Beendigung zu warten, bevor der nächste Befehl ausgeführt wird.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige