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

Forumthread: In einem Makro testen ob die Strg-Taste gedrückt

In einem Makro testen ob die Strg-Taste gedrückt
24.01.2014 11:55:10
Hugo
Hallo
ich möchte in einem Makro abfragen ob die Strg-oder Umschalttaste gedrückt ist oder nicht. Geht sowas überhaupt?
Vielen Dank schon mal... :-)

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: In einem Makro testen ob die Strg-Taste gedrückt
24.01.2014 12:15:09
Rudi
Hallo,
in welchem Zusammenhang?
Gruß
Rudi

AW: In einem Makro testen ob die Strg-Taste gedrückt
24.01.2014 12:35:41
Hugo
Hallo Rudi,
nun ja. Ich füge mit einer selbst erstellten Symbolleiste Sonderzeichen in eine Zelle ein.
Ähnlich wie bei der Groß- und Kleinschreibung soll das Zeichen mal als Großformat mal als Kleinformat eingetragen werden.
z.B. Eine Schaltfläche fügt ein Durchmesserzeichen ein.
Beim Anklicken soll das Kleine "ø" eingefügt werden - bei gedrückter Taste das Große "Ø"
Gruß Hugo

Anzeige
AW: In einem Makro testen ob die Strg-Taste gedrückt
24.01.2014 12:53:36
Rudi
Hallo,
als Beispiel.
in ein allg. Modul:
 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

für den Cmd:
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

Gruß
Rudi

Anzeige
AW: In einem Makro testen ob die Strg-Taste gedrückt
24.01.2014 13:11:15
Hugo
Hallo Rudi,
ich komme so nicht klar. Mein Makro schaut so aus und ist in einem Modul.
Zunächst wir die Zelle ausgelesen. Anschließend das Ausgelesene und das Durchmesserzeichen eingefügt.
Und wie gesagt, das alles mit einer Schaltfläche in einer benutzerdefinierten Symbolleiste.
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.
Gruß Hugo

Anzeige
Das 'Declare' gehört ja auch an den Anfang ...
24.01.2014 13:34:15
Luc:-?
…des Moduls, nicht in irgendeine Subprozedur, Hugo;
das hatte Rudi ja auch so geschrieben!
Übrigens, Øø sind keine Durchmesserzeichen, das gibt's extra und nur in 1 Variante, sondern dänisch-norwegische Buchstaben, die unserem Öö entsprechen.
Gruß Luc :-?

Anzeige
AW: In einem Makro testen ob die Strg-Taste gedrückt
24.01.2014 13:47:57
Hugo
Es funzt!! :-)
Danke für den Hinweis Luc:-?
Und danke für den Code, Rudi!!
Fantastisch... :-)

AW: In einem Makro testen ob die Strg-Taste gedrückt
24.01.2014 13:50:33
Rudi
Hallo,
mein Testaufbau:
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

Gruß
Rudi
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Strg-Taste in Excel VBA abfragen


Schritt-für-Schritt-Anleitung

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:

  1. Öffne den VBA-Editor in Excel (ALT + F11).

  2. Füge ein neues Modul hinzu (Einfügen > Modul).

  3. 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
  4. 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
  5. Du kannst diese Subprozedur dann mit einem Button oder direkt im VBA-Editor ausführen.


Häufige Fehler und Lösungen

  • 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.


Alternative Methoden

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.


Praktische Beispiele

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.


Tipps für Profis

  • 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.


FAQ: Häufige Fragen

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.

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