Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
688to692
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
688to692
688to692
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Tasten abschalten

Tasten abschalten
03.11.2005 18:57:02
Werner
Hallo,
ich versuche hier noch einmal, eine Lösung für mein größtes Problem zu finden.
Bei einer EXCEL-Anwendung machen viele Kollegen Eingaben, manche davon haben sehr dicke Finger. Es werden dreistellige Zahlen eingegeben. Zur Eingabe steht nur ein extra angeschlossener Zehnerblock zur Verfügung. Nun gibt es auf diesem Block aber nicht nur die benötigten Zifferntasten und die ebenfalls benötigte ENTER-Taste, sondern auch noch die Rechenzeichen-Tasten und die NUMLOCK-Taste, auf die die Kollegen gern mal versehentlich drücken und damit alles durcheinanderbringen. Gibt es eine Möglickkeit, die nicht benötigten Tasten per Makro (automatisch beim Aufruf der Tabelle) abzuschalten ?
Herzlichen Dank im Voraus, Grüße aus Schleswig-Holstein
Werner

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tasten abschalten
03.11.2005 22:34:38
Harald
Hallo Rainer,
genau das hab ich gestern selbst gesucht, nachdem eine -unter Win98- programmierte NumLock Aktivierung auf XP und Excel 2003 keinen Mucks mehr tat.
Max hatte schon versucht mir zu helfen...aber entweder bin ich zu blöd, oder er kannte diesen Link nicht. Jedenfalls wars erfolglos.
Da sind doch erhebliche Unterschiede zu dem Code aus meinem Thread....und ein Häckchen bei XP ;-))
https://www.herber.de/forum/messages/690038.html
Ich probier hier schon ne Weile, aber ich fürchte das hat wieder was mit Klassenmodul und Standardmodul zu tun...bzw. welcher Code wohin gehört, denn es hagelt nur Fehlermeldungen.
Wäre echt prima, wenn Du kurz erläutern könntest, wie der Code zu handhaben ist.
Wohin, was kopiert wird....(ggf. wie man das Ding startet)...und was die # zu sagen haben.
...wenns dir nicht zu arg ist.
Freut mich übrigens, dass wieder mehr von dir zu lesen ist.
Hier ist der Code aus deinem Link (der Einfachheit wegen)
Option Explicit
#If Win32 Then
Private Declare Function GetKeyState Lib "user32" (ByVal _
nVirtKey As Long) As Integer
Private Declare Function GetKeyboardState Lib "user32" (ByVal _
lppbKeyState As String) As Long
Private Declare Function SetKeyboardState Lib "user32" (ByVal _
lppbKeyState As String) As Long
#ElseIf Win16 Then
Private Declare Function GetKeyState Lib "User" (ByVal _
nVirtKey As Integer) As Integer
Private Declare Function GetKeyboardState Lib "User" (ByVal _
lpKeyState As Any) As Integer
Private Declare Function SetKeyboardState Lib "User" (ByVal _
lpKeyState As Any) As Integer
#End If
Const VK_CAPITAL = &H14
Const VK_NUMLOCK = &H90
Const VK_SCROLL = &H91

Private Sub Form_Load()
Timer1_Timer
End Sub


Private Sub Timer1_Timer()
shpKeys(0).FillColor = IIf(GetKeyState(VK_NUMLOCK), vbGreen, _
RGB(0, 128, 0))
shpKeys(1).FillColor = IIf(GetKeyState(VK_CAPITAL), vbGreen, _
RGB(0, 128, 0))
shpKeys(2).FillColor = IIf(GetKeyState(VK_SCROLL), vbGreen, _
RGB(0, 128, 0))
End Sub


Private Sub cmdKey_Click(Index As Integer)
Dim Key As Integer, KeyboardState As String
Select Case Index
Case 0
Key = VK_NUMLOCK
Case 1
Key = VK_CAPITAL
Case 2
Key = VK_SCROLL
Case 3
Unload Me
End
Exit Sub
End Select
KeyboardState = Space$(255)
Call GetKeyboardState(KeyboardState)
If shpKeys(Index).FillColor = vbGreen Then   'Taste aktiv?
Mid$(KeyboardState, Key + 1, 1) = "0"
Else
Mid$(KeyboardState, Key + 1, 1) = "1"
End If
Call SetKeyboardState(KeyboardState)
End Sub

Beste Grüße
Harald
Anzeige
AW: Tasten abschalten
03.11.2005 22:54:27
Ramses
Hallo
#Wenn du eine Win32-Umgebung hast (NT4, NT2000, XP) dann verwende diese Funktionen
Private Declare Function GetKeyState Lib "user32" (ByVal _
nVirtKey As Long) As Integer
Private Declare Function GetKeyboardState Lib "user32" (ByVal _
lppbKeyState As String) As Long
Private Declare Function SetKeyboardState Lib "user32" (ByVal _
lppbKeyState As String) As Long
#Oder wenn du eine W16 Umgebung hast (Windows 95/98) dann diese Functionen
Private Declare Function GetKeyState Lib "User" (ByVal _
nVirtKey As Integer) As Integer
Private Declare Function GetKeyboardState Lib "User" (ByVal _
lpKeyState As Any) As Integer
Private Declare Function SetKeyboardState Lib "User" (ByVal _
lpKeyState As Any) As Integer
#End If
Bedeutet nichts anderes, als dass du DIE Sequenz im allgemeinen Teil eines Moduls deklarieren sollst, DESSEN Betriebssystemumgebung dein Rechner entspricht.

Private Sub Form_Load()
Timer1_Timer
End Sub

"Sub Form_Load" entspricht dem "

Private Sub Userform_INitialize()" Ereignis einer Userform, also wenn du eine UF öffnest

Private Sub Timer1_Timer()
shpKeys(0).FillColor = IIf(GetKeyState(VK_NUMLOCK), vbGreen, _
RGB(0, 128, 0))
shpKeys(1).FillColor = IIf(GetKeyState(VK_CAPITAL), vbGreen, _
RGB(0, 128, 0))
shpKeys(2).FillColor = IIf(GetKeyState(VK_SCROLL), vbGreen, _
RGB(0, 128, 0))
End Sub

shpKeys(2).FillColor = IIf(GetKeyState(VK_SCROLL), vbGreen, RGB(0, 128, 0))
Ist eine VB-Funktion die
shpKeys(2).FillColor (Eine Form oder sonst was auf der UF)
= IIf(GetKeyState(VK_SCROLL) (Die ScrollTaste wurde aktiviert
, vbGreen, (Färbt diese Form Grün)
RGB(0, 128, 0)) (sonst Dunkelrot)

Private Sub cmdKey_Click(Index As Integer)
Ist eine Sub-Funktion dieser Form aus VB.
Der Code kann so nicht ohne weiteres auf VBA umgesetzt werden.
Da sind schon ein paar Änderungen nötig ;-)
Gruss Rainer

Anzeige
AW: Tasten abschalten
04.11.2005 00:00:56
Werner
Hallo und DANKE an alle!!
Das ist alles zu hoch für mich!
Ich habe mich entschlossen, eine Abdeckung für die nicht benötigten Tasten zu basteln.
Gruß
Werner
AW: Tasten abschalten
04.11.2005 08:26:50
Harald
Hallo Rainer,
danke für den Einblick.
Fuchst mich ja ohne Ende.
Letztendlich wäre es nur die automatisierte Aktivierung der NumLock Taste vor der Eingabe, die ich benötige....ohne gefärbte Buttons, ohne UF.
Nungut ich nehm das Ganze mal als Ansatz und versuche mit meinen begrenzten Mitteln dem Code Leben einzuhauchen.
Wenn alle Stricke reissen, kann Werner mir vielleicht die Bauanleitung seiner Abdeckung zusenden ;-)))
Gruss Harald
Anzeige
AW: Tasten abschalten
04.11.2005 08:57:16
Ramses
Hallo
Kuck mal
'-----------------------------------------------
'Funktion um die NUM-Lock Taste einzuschalten bzw. auszuschalten
'Die Funktion "SwitchNumLock()" erwartet als Parameter "Wahr/True", wenn NumLock eingeschaltet und "Falsch/False", wenn NumLock ausgeschaltet werden soll. Um die Funktion "SwitchNumLock()" an die betreffenden Felder zu binden, öffnen Sie das jeweilige Formular im Entwurfsmodus,
'markieren der Reihe nach die gewünschten Felder und setzen die folgenden Eigenschaften:
Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As Long
Private Declare Sub keybd_event Lib "User32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Declare Function GetKeyboardState Lib "User32" (pbKeyState As Byte) As Long
Private Declare Function SetKeyboardState Lib "User32" (lppbKeyState As Byte) As Long
Private Const VK_NUMLOCK = &H90
Private Const KEYEVENTF_EXTENDEDKEY = &H1
Private Const KEYEVENTF_KEYUP = &H2
Private Const VER_PLATFORM_WIN32_NT = 2
Private Const VER_PLATFORM_WIN32_WINDOWS = 1
Private Type OSVERSIONINFO
    dwOSVersionInfoSize As Long
    dwMajorVersion As Long
    dwMinorVersion As Long
    dwBuildNumber As Long
    dwPlatformId As Long
    szCSDVersion As String * 128
End Type

Function SwitchNumLock(OnOff As Boolean) As Boolean
    Dim ovi As OSVERSIONINFO
    Dim R As Variant
    Dim NumLockOn As Boolean
    Dim KeyTable(0 To 255) As Byte
    
    'Länge der Struktur setzen
    ovi.dwOSVersionInfoSize = Len(ovi)
    'Versionsinfos holen
    R = GetVersionEx(ovi)
    'Tastaturstatus holen
    R = GetKeyboardState(KeyTable(0))
    'Aktueller Status, True|False
    NumLockOn = (KeyTable(VK_NUMLOCK) <> 0)
    If ovi.dwPlatformId = VER_PLATFORM_WIN32_NT Then
        'Windows NT, 2000, XP
        If (OnOff And Not NumLockOn) Or (Not OnOff And NumLockOn) Then
            keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
            keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0
        End If
    Else
        'Windows 9.x/ME
        If OnOff Then
            KeyTable(VK_NUMLOCK) = 1
        Else
            KeyTable(VK_NUMLOCK) = 0
        End If
        R = SetKeyboardState(KeyTable(0))
    End If
    
End Function

Die Numlock-Taste kannst du dann per Code ein- und ausschalten
SwitchNumLock True
oder
SwitchNumLock False
Gruss Rainer
Anzeige
Spitze. Vielen Dank dafür
04.11.2005 09:37:42
Harald
Hallo Rainer,
dank der beigefügten Anmerkungen hab ich die Wirkungsweise gut nachvollziehen können.
Wie kriegt man sowas raus ?
In Excel-Bettwäsche schlafen ?
Muss mal schauen, ob Bill solche Devotionalien im Programm hat.
;-))
Herzlichen Dank nochmals
Gruß
Harald

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige