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.