ich möchte in einem Makro abfragen ob die Strg-oder Umschalttaste gedrückt ist oder nicht. Geht sowas überhaupt?
Vielen Dank schon mal... :-)
Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Public Const VK_SHIFT = &H10 'SHIFT key
Public Const VK_CTRL = &H11 'CTRL key
Private Sub CommandButton1_Click()
Select Case True
Case CBool(GetAsyncKeyState(VK_CTRL) And &H8000) And CBool(GetAsyncKeyState(VK_SHIFT) And & _
H8000)
MsgBox "SHIFT+STRG"
Case CBool(GetAsyncKeyState(VK_CTRL) And &H8000)
MsgBox "STRG"
Case CBool(GetAsyncKeyState(VK_SHIFT) And &H8000)
MsgBox "SHIFT"
Case Else
MsgBox "keine Taste"
End Select
End Sub
Sub Durchmesser()
Set tmp = ActiveCell
tmp = tmp & ChrW(193)
ActiveCell.FormulaR1C1 = tmp
End Sub
Wenn ich dein "Public Declare... " hier einfüge bringt mir Excel 'ne Fehlermeldung.
Option Explicit
Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Public Const VK_SHIFT = &H10 'SHIFT key
Public Const VK_CTRL = &H11 'CTRL key
Sub Menu()
Dim cBar As CommandBar, cBtn As CommandBarButton, oPop As CommandBarPopup
On Error Resume Next
Application.CommandBars("Test").Delete
On Error GoTo 0
Set cBar = CommandBars.Add("Test", , , True)
Set oPop = cBar.Controls.Add(msoControlPopup)
oPop.Caption = "Test"
Set cBtn = oPop.Controls.Add(msoControlButton)
With cBtn
.Caption = "Ø"
.OnAction = "Durchmesser"
End With
cBar.Visible = True
End Sub
Sub Durchmesser()
Dim strTmp As String
strTmp = ActiveCell
If CBool(GetAsyncKeyState(VK_SHIFT) And &H8000) Then
strTmp = strTmp & UCase(Chr(216))
Else
strTmp = strTmp & LCase(ChrW(216))
End If
ActiveCell = strTmp
End Sub
Um in einem Excel VBA-Makro zu testen, ob die Strg-Taste (oder andere Tasten) gedrückt wird, kannst du den folgenden Code verwenden. Dieser nutzt die Funktion GetAsyncKeyState
, um den Tastendruck abzufragen:
Öffne den VBA-Editor in Excel (ALT + F11).
Füge ein neues Modul hinzu (Einfügen > Modul).
Füge den folgenden Code an den Anfang des Moduls ein:
Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Public Const VK_CTRL = &H11 'CTRL key
Public Const VK_SHIFT = &H10 'SHIFT key
Erstelle eine Subprozedur, die den Tastendruck abfragt, wie im folgenden Beispiel:
Sub TestTaste()
Select Case True
Case CBool(GetAsyncKeyState(VK_CTRL) And &H8000)
MsgBox "Die Strg-Taste ist gedrückt"
Case CBool(GetAsyncKeyState(VK_SHIFT) And &H8000)
MsgBox "Die Shift-Taste ist gedrückt"
Case Else
MsgBox "Keine der Tasten ist gedrückt"
End Select
End Sub
Du kannst diese Subprozedur dann mit einem Button oder direkt im VBA-Editor ausführen.
Fehlermeldung beim Declare
: Stelle sicher, dass der Public Declare
-Befehl am Anfang des Moduls steht und nicht innerhalb einer Subprozedur.
Makro funktioniert nicht: Überprüfe, ob die Sicherheitsstufe für Makros in Excel so eingestellt ist, dass die Ausführung von VBA-Makros erlaubt ist.
Falsches Zeichen: Wenn du ein Durchmesserzeichen in Excel einfügen möchtest, stelle sicher, dass du die korrekten ASCII- oder Unicode-Werte verwendest.
Falls du keine API-Funktion verwenden möchtest, kannst du auch VBA-Formularsteuerelemente nutzen, um die Tastenanschläge zu erfassen. Dies ist jedoch in der Regel weniger flexibel.
Eine andere Möglichkeit wäre, den KeyDown
-Ereignis des Excel-Arbeitsblattes zu verwenden, um Tastenanschläge zu erkennen, allerdings ist dies nur in bestimmten Kontexten nützlich.
Hier ist ein Beispiel für den Einsatz der Strg-Taste beim Einfügen eines Durchmesserzeichens:
Sub Durchmesser()
Dim strTmp As String
strTmp = ActiveCell.Value
If CBool(GetAsyncKeyState(VK_CTRL) And &H8000) Then
strTmp = strTmp & "Ø" ' Großes Durchmesserzeichen
Else
strTmp = strTmp & "ø" ' Kleines Durchmesserzeichen
End If
ActiveCell.Value = strTmp
End Sub
Mit dieser Funktion kannst du das Symbol für den Durchmesser in Excel dynamisch einfügen, abhängig davon, ob die Strg-Taste gedrückt wird oder nicht.
Verwende Option Explicit
an den Anfang deiner Module, um sicherzustellen, dass alle Variablen deklariert sind. Dies hilft, Fehler zu vermeiden.
Debugging: Nutze Debug.Print
und den VBA-Debugger, um den Fluss deines Codes zu verfolgen, insbesondere wenn du mit Tasteneingaben arbeitest.
Benutzerdefinierte Symbolleisten: Erstelle benutzerdefinierte Symbolleisten, um häufig verwendete Makros schnell zugänglich zu machen.
1. Wo ist die Strg-Taste auf meiner Tastatur?
Die Strg-Taste ist in der Regel unten links und unten rechts auf der Tastatur zu finden, beschriftet als "Ctrl" oder "Strg".
2. Kann ich andere Tasten wie die Alt-Taste abfragen?
Ja, du kannst andere Tasten abfragen, indem du die entsprechenden Konstanten für die Tasten verwendest, z.B. VK_MENU
für die Alt-Taste.
3. Funktioniert dieser Code in allen Excel-Versionen?
Ja, dieser Code sollte in den meisten modernen Excel-Versionen funktionieren, die VBA unterstützen.
Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden
Suche nach den besten AntwortenEntdecke unsere meistgeklickten Beiträge in der Google Suche
Top 100 Threads jetzt ansehen