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

VBA Code für Aktivierung NumLock: Fehler

Forumthread: VBA Code für Aktivierung NumLock: Fehler

VBA Code für Aktivierung NumLock: Fehler
06.12.2012 18:00:33
Andreas
Hallo Herber Fans,
in PivotTabellen unter Excel 2010 gibt es die nützliche Funktion über einen Rechtsklick das gerade gewählte PivotItem auszublenden. Da ich diese Funktion in letzter Zeit häufiger nutzte, habe ich sie über VBA abbilden wollen. Da ich in großen PivotTabellen aber nicht alle PivotItems loopen kann (zu rechen-/ zeitaufwändig), habe ich mich für die Nutzung von SendKeys entschieden. Das funktioniert auch ganz gut. Über den ShortCut STRG + b habe ich nun diese Option zur Verfügung. Problem: Dabei wird u.U. die NumLock Taste deaktiviert. Dieser ärgerliche Fehler ist dokumentiert (http://support.microsoft.com/?kbid=179987), aber die hier gemachten Vorschläge („DoEvents“) haben nicht geholfen. Also möchte ich über VBA den Status der NumLock Taste überwachen. Dafür gibt es auch Codes, die ich bisher aber leider nur ansatzweise verstehe. Ich habe in Modul1 meinen OnKey Code für das PivotItem und in Modul4 möchte ich die Überwachung der NumLock Taste (immer ein) realisieren.
Aber alle Recherche war vergebens. Es klappt nicht. Der Code „NUMLOCK_True“ schaltet NumLock nicht ein. Ich kann auch leider nicht auf SendKeys verzichten.
Hat jemand von Euch die NumLock Überwachung schon einmal verwendet/ zum Laufen bekommen. Was ist mein Denkfehler in Modul4?
https://www.herber.de/bbs/user/82926.xlsm
Ich würde mich freuen, wenn ein Forumsteilnehmer sich das Beispiel ansieht und mir einen Tip geben kann, in welche Richtung ich nun weiter forschen muß.
Vielen Dank für Eure Aufmerksamkeit.
Grüße aus Berlin, Andreas Hanisch

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Code für Aktivierung NumLock: Fehler
06.12.2012 19:03:48
schauan
Hallo ANdreas,
wie äußert sich das denn? Passiert nix, kommt ein Fehler ...?
Ich sitze gerade hier an meinem Laptop und hab leider keinen Nummernblock. Ich hab das Makro mal durchlaufen lassen, der Wert vom key 144 wird mit dem coede geändert ...
Grüße, André

AW: VBA Code für Aktivierung NumLock: Fehler
06.12.2012 20:01:14
Nepumuk
Hallo,
das hat sich seit Windows NT geändert.
Option Explicit

Private Declare Sub keybd_event Lib "user32.dll" ( _
    ByVal bVk As Byte, _
    ByVal bScan As Byte, _
    ByVal dwFlags As Long, _
    ByVal dwExtraInfo As Long)
Private Declare Function GetKeyboardState Lib "user32.dll" ( _
    ByRef pbKeyState As KeyboardBytes) As Long

Private Type KeyboardBytes
    kbByte(0 To 255) As Byte
End Type

Private pbKeyState As KeyboardBytes

Private Const KEYEVENTF_EXTENDEDKEY = &H1
Private Const KEYEVENTF_KEYUP = &H2
Private Const KEYEVENTF_KEYDOWN = &H0

Private Function Get_Value() As Boolean
    Call GetKeyboardState(pbKeyState)
    Get_Value = pbKeyState.kbByte(vbKeyNumlock) And 1
End Function

Private Sub Set_Value()
    Call keybd_event(vbKeyNumlock, &H45, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYDOWN, 0)
    Call keybd_event(vbKeyNumlock, &H45, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0)
End Sub

Public Sub NUMLOCK_True()
    If Not Get_Value Then Call Set_Value
End Sub

Gruß
Nepumuk

Anzeige
AW: VBA Code für Aktivierung NumLock: Fehler
07.12.2012 10:14:10
Andreas
Hallo Nepumuk,
vielen Dank für Deine Antwort. Es funktioniert tadellos!!! Es hilft mir sehr nun endlich den ShortCut ohne Bedenken einsetzen zu können. Dank Deines NumLock Codes.
Habe ein schönes Wochenende.
Beste Grüße aus Berlin, Andreas Hanisch
;
Anzeige
Anzeige

Infobox / Tutorial

VBA für die Aktivierung von NumLock in Excel


Schritt-für-Schritt-Anleitung

Um die NumLock-Taste in Excel über VBA zu aktivieren, kannst du den folgenden Code verwenden. Dieser Code überwacht den Status der NumLock-Taste und aktiviert sie bei Bedarf:

Option Explicit

Private Declare Sub keybd_event Lib "user32.dll" ( _
    ByVal bVk As Byte, _
    ByVal bScan As Byte, _
    ByVal dwFlags As Long, _
    ByVal dwExtraInfo As Long)

Private Declare Function GetKeyboardState Lib "user32.dll" ( _
    ByRef pbKeyState As KeyboardBytes) As Long

Private Type KeyboardBytes
    kbByte(0 To 255) As Byte
End Type

Private pbKeyState As KeyboardBytes

Private Const KEYEVENTF_EXTENDEDKEY = &H1
Private Const KEYEVENTF_KEYUP = &H2
Private Const KEYEVENTF_KEYDOWN = &H0

Private Function Get_Value() As Boolean
    Call GetKeyboardState(pbKeyState)
    Get_Value = pbKeyState.kbByte(vbKeyNumlock) And 1
End Function

Private Sub Set_Value()
    Call keybd_event(vbKeyNumlock, &H45, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYDOWN, 0)
    Call keybd_event(vbKeyNumlock, &H45, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0)
End Sub

Public Sub NUMLOCK_True()
    If Not Get_Value Then Call Set_Value
End Sub

Füge diesen Code in ein Modul in Excel ein. Der Code stellt sicher, dass die NumLock-Taste aktiviert ist, bevor du mit deinem Makro arbeitest.


Häufige Fehler und Lösungen

  1. NumLock wird nicht aktiviert.

    • Stelle sicher, dass du den Code korrekt eingefügt und ausgeführt hast. Prüfe auch, ob andere Makros den Status der NumLock-Taste beeinflussen.
  2. VBA wirft einen Laufzeitfehler.

    • Überprüfe, ob alle Deklarationen und Typen korrekt sind. Stelle sicher, dass die user32.dll-Bibliothek verfügbar ist.
  3. Das SendKeys-Makro funktioniert nicht.

    • Wenn du SendKeys verwendest, könnte ein Konflikt mit der NumLock-Taste auftreten. Verwende die bereitgestellten Funktionen, um sicherzustellen, dass NumLock aktiviert ist, bevor du SendKeys aufrufst.

Alternative Methoden

Falls du Schwierigkeiten mit dem oben genannten VBA-Code hast, gibt es alternative Ansätze:

  • Verwendung von SendKeys direkt:

    SendKeys "{NUMLOCK}"

    Beachte, dass dies möglicherweise nicht immer funktioniert und die NumLock-Taste nicht zuverlässig aktiviert.

  • Verwendung von Drittanbieter-Tools: Es gibt Softwarelösungen, die die Tasteneingaben steuern können und die Funktionalität von NumLock besser verwalten.


Praktische Beispiele

Hier ist ein einfaches Beispiel, wie du die NumLock-Taste in einem Makro verwenden kannst:

Sub BeispielMitNumLock()
    NUMLOCK_True ' Aktiviert NumLock
    SendKeys "Hallo, ich benutze die NumLock-Taste!", True
End Sub

Dieses Beispiel aktiviert die NumLock-Taste und sendet eine Nachricht, die die Verwendung der NumLock-Taste veranschaulicht.


Tipps für Profis

  • Fehlerprotokollierung: Implementiere eine Fehlerprotokollierung in deinem VBA-Code, um Probleme mit der NumLock-Aktivierung zu identifizieren.

  • Regelmäßige Tests: Teste dein Makro regelmäßig, insbesondere nach Änderungen, um sicherzustellen, dass die NumLock-Taste wie gewünscht funktioniert.

  • Optimierung des Codes: Halte deinen Code so einfach wie möglich, um die Lesbarkeit und Wartbarkeit zu erhöhen.


FAQ: Häufige Fragen

1. Wie kann ich überprüfen, ob NumLock aktiv ist?
Verwende die Funktion Get_Value() aus dem bereitgestellten Code, um den Status der NumLock-Taste abzufragen.

2. Warum funktioniert SendKeys manchmal nicht?
SendKeys kann durch die aktuelle Anwendung oder andere aktive Prozesse beeinträchtigt werden. Stelle sicher, dass deine Excel-Anwendung im Vordergrund ist.

3. Welche Excel-Version benötige ich für den VBA-Code?
Der Code wurde mit Excel 2010 getestet, sollte jedoch auch in neueren Versionen funktionieren. Achte darauf, dass deine Excel-Installation die Verwendung von VBA unterstützt.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige