Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Status der Num-Lock-Taste

Status der Num-Lock-Taste
08.04.2023 21:20:40
Josef Schindler

Hallo und guten Abend an das Excelforum,

kann ich, während Excel "läuft" den Status der Num-Lock-Taste via Code abfragen und ggf. ändern, wenn diese inaktiv ist?
Wer kann mir bitte helfen? Ich bin leider VBA - Memme.
Und wer gibt mir Hilfestellung und kann mir einen VBA - Code aufzeigen und vor allem erklären?

Ich bin für jede erdenkliche Hilfestellung sehr dankbar!

Mit freundlichem Gruß

Josef

Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Status der Num-Lock-Taste
08.04.2023 22:42:39
volti
Hallo Josef,

hier ein wenig Spielmaterial....
Ich denke, der Code ist selbsterklärend. Wichtig ist die Declarefunktion, da mit einer API-Funktion gearbeitet wird.

Code:


Private Declare PtrSafe Function GetKeyboardState Lib "user32" ( _ pbKeyState As Byte) As Long Sub NumBlockEinschalten() Dim Keys(0 To 255) As Byte GetKeyboardState Keys(0) If Keys(vbKeyNumlock) = False Then SendKeys "{NUMLOCK}" End Sub Sub NumBlockAusschalten() Dim Keys(0 To 255) As Byte GetKeyboardState Keys(0) If Keys(vbKeyNumlock) Then SendKeys "{NUMLOCK}" End Sub Function GetNumBlockStatus() As Boolean Dim Keys(0 To 255) As Byte GetKeyboardState Keys(0) GetNumBlockStatus = Keys(vbKeyNumlock) End Function Sub Test() MsgBox "Der Nummernblock ist " & IIf(GetNumBlockStatus, "ein", "aus") & "geschaltet!" End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz



Anzeige
AW: Status der Num-Lock-Taste
09.04.2023 02:22:27
Josef Schindler
Hallo Karl-Heinz,

vielen Dank - genau sowas brauche ich.
Mit dieser Hilfe kann ich arbeiten. Ich traue mir zu, hier weiter zu basteln.
Einfach toll von dir.

In diesem Sinne auch an dich schöne Feiertage

Gruß, Josef aus Köfering bei Regensburg


AW: Status der Num-Lock-Taste
09.04.2023 11:26:55
Herbert_Grom
Hallo Joseph,

na das ist ja mal ein Ding: Köfering bei Regensburg! Ich hab mal 2,5 Jahre in Oberisling gewohnt. Ist allerdings schon ein paar Jährchen her. Genauer gesagt, von 1976 - 78. Mittlerweile wohne ich seit fast 44 Jahren in Pforzheim. War eine schöne Zeit in Oberisling.

Servus


Anzeige
AW: Status der Num-Lock-Taste
09.04.2023 12:57:14
Josef Schindler
Hi,

ja ich lebe quasi zwangsweise hier - nach einem Schlaganfall im Pflegeheim...


AW: Status der Num-Lock-Taste
09.04.2023 13:42:44
Herbert_Grom
Hallo Josef,

oh je, das tut mir wirklich leid. Ich hoffe du bist dort gut Versorgt. Und wenigstens ist das Gebäude noch relativ neu und damit erträglich. Ich wünsche dir gute Besserung!!!

Servus


Anzeige
AW: Status der Num-Lock-Taste
09.04.2023 16:42:08
snb
M_snb_NUMlock_aan_uit ist ein 'ToggleMacro'

Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer

Sub M_snb_NUMlock_aan_UIT()
   keybd_event &H90, &H45, &H1 Or 0, 0
   keybd_event &H90, &H45, &H1 Or &H2, 0
   MsgBox GetKeyState(144)
End Sub


Anzeige
AW: Status der Num-Lock-Taste
09.04.2023 22:10:26
Josef Schindler
Hallo,

leider bin ich eine VBA - Memme. Was ist M_snb_NUMlock_aan_uit ist ein 'ToggleMacro' ?
Ich kann damit jetzt leider nichts anfangen...
Dennoch bedanke ich mich für deine Antwort.

Mit freundlichen Gruß

Josef


AW: Status der Num-Lock-Taste
10.04.2023 08:42:41
volti
Hallo Josef,

zur Erklärung:
Das von snb gezeigte "Togglemacro" toggelt die Numlocktaste, d.h. es wird bei jedem Drücken der Taste der Zustand umgeschaltet, also an-aus-an-aus....

Verwendet wird in dieser Sub die API-Funktion keybd_event, die das Drücken und das Loslassen einer Taste erlaubt und damit genau das simuliert, was ein User machen würde.

Ich bin auch ein Freund von kurzem code und verwende auch nicht immer nur einmal benutzte Konstanten und Variablen, sondern setze den Wert ein.
Ich gebe aber immer einen Hinweis auf die zugrunde liegende Konstante, damit man später noch weiß, was man gemacht hat.

Das ist hier leider nicht gemacht worden.

Das Makro hätte also auch so aussehen können. Natürlich muss man nun die Konstanten auch definieren, also mehr code)

Sub M_snb_NUMlock_aan()
  Const VK_NUMLOCK = &H90
  Const KEYEVENTF_KEYUP = &H2

  If GetKeyState(VK_NUMLOCK) = 0 Then
     keybd_event VK_NUMLOCK, 0, 0, 0
     keybd_event VK_NUMLOCK, 0, KEYEVENTF_KEYUP, 0
  End If
  MsgBox GetKeyState(VK_NUMLOCK)
End Sub
Wozu snb die Werte &H1 und &H45 braucht, weiß ich leider auch nicht. Vielleicht liefert snb ja eine kurze Erklärung dazu.

Die Toggleversion berücksichtigt aber nicht den jetzigen Zustand, sondern schaltet einfach nur um, so dass man, wenn man nur einschalten möchte, vorher den Zustand checken muss.

keybd_event bringt m.E. nicht unbedingt immer einen Vorteil ggü. der Sendkeys-Version, denn auch diese Funktion sendet die Tastenanschläge nur an das Vordergrundfenster.

Gruß KH


Anzeige
AW: Status der Num-Lock-Taste
10.04.2023 08:49:27
volti
Als Nachtrag vielleicht noch etwas Licht ins Dunkle:

Die hexedezimale Darstellung der dezimalen Zahl 144 ist &H90

Einen schönen zweiten Ostertag wünsche ich
Karl-Heinz


Status der Num-Lock-Taste
10.04.2023 09:37:55
Josef Schindler
Hallo,

danke für de "Schupser" - ich habe es kapiert.

ebenfalls schönen zweiten Feiertag

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Status der Num-Lock-Taste in Excel


Schritt-für-Schritt-Anleitung

Um den Status der Num-Lock-Taste in Excel mit VBA abzufragen und gegebenenfalls zu ändern, folge diesen Schritten:

  1. Öffne den VBA-Editor in Excel, indem Du ALT + F11 drückst.

  2. Füge ein neues Modul hinzu: Klicke im Menü auf Einfügen > Modul.

  3. Kopiere den folgenden Code in das Modul:

    Private Declare PtrSafe Function GetKeyboardState Lib "user32" (pbKeyState As Byte) As Long
    
    Sub NumBlockEinschalten()
        Dim Keys(0 To 255) As Byte
        GetKeyboardState Keys(0)
        If Keys(vbKeyNumlock) = False Then SendKeys "{NUMLOCK}"
    End Sub
    
    Sub NumBlockAusschalten()
        Dim Keys(0 To 255) As Byte
        GetKeyboardState Keys(0)
        If Keys(vbKeyNumlock) Then SendKeys "{NUMLOCK}"
    End Sub
    
    Function GetNumBlockStatus() As Boolean
        Dim Keys(0 To 255) As Byte
        GetKeyboardState Keys(0)
        GetNumBlockStatus = Keys(vbKeyNumlock)
    End Function
    
    Sub Test()
        MsgBox "Der Nummernblock ist " & IIf(GetNumBlockStatus, "ein", "aus") & "geschaltet!"
    End Sub
  4. Führe das Makro Test aus, um den aktuellen Status der Num-Lock-Taste zu überprüfen.


Häufige Fehler und Lösungen

  • Fehler: "F4 Taste Excel funktioniert nicht"

    • Überprüfe, ob das Makro korrekt eingefügt wurde und ob die Num-Lock-Taste eventuell durch eine andere Anwendung blockiert wird.
  • Fehler: Num-Lock lässt sich nicht aktivieren

    • Stelle sicher, dass Du die richtigen Berechtigungen hast, um Makros auszuführen. Versuche, Excel als Administrator zu starten.

Alternative Methoden

Eine alternative Methode zur Steuerung des Num-Lock-Status ist die Verwendung des keybd_event:

  1. Verwende den folgenden Code, um Num-Lock zu toggeln:

    Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
    Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
    
    Sub ToggleNumLock()
        keybd_event &H90, 0, 0, 0
        keybd_event &H90, 0, &H2, 0
        MsgBox GetKeyState(144)
    End Sub
  2. Führe das Makro ToggleNumLock aus, um den Status der Num-Lock-Taste zu ändern.


Praktische Beispiele

  • Beispiel 1: Statusabfrage und Meldung

    Wenn Du den aktuellen Status der Num-Lock-Taste abfragen und eine Nachricht anzeigen möchtest, nutze das Test-Makro, wie vorher beschrieben.

  • Beispiel 2: Num-Lock aktivieren

    Um sicherzustellen, dass die Num-Lock-Taste aktiv ist, kannst Du das NumBlockEinschalten-Makro verwenden, um den Status zu setzen.


Tipps für Profis

  • Verwende Konstanten: Um den Code verständlicher zu machen, definiere Konstanten für die Tastenanschläge, anstatt die hexadezimalen Werte direkt zu verwenden.

  • Überprüfe den Status: Bevor Du Änderungen vornimmst, überprüfe immer den aktuellen Status der Num-Lock-Taste, um unerwartete Ergebnisse zu vermeiden.

  • Nutze API-Funktionen: Die Verwendung von API-Funktionen wie GetKeyboardState bietet dir mehr Kontrolle und Flexibilität bei der Arbeit mit Tastenanschlägen in Windows.


FAQ: Häufige Fragen

1. Wo ist die Num-Taste in Excel? Die Num-Taste befindet sich in der Regel auf der rechten Seite der Tastatur, oft in einem Block mit Zifferntasten.

2. Wie kann ich die Num-Lock-Taste dauerhaft aktivieren? Um die Num-Lock-Taste dauerhaft zu aktivieren, prüfe die BIOS-Einstellungen Deines Computers, da einige Systeme die Möglichkeit bieten, die Num-Lock-Taste beim Start zu aktivieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige