Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1816to1820
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
Inhaltsverzeichnis

Strg Taste

Strg Taste
11.03.2021 05:27:02
Thomas
Hallo Excelfreunde,
ich möchte gern mit einem Haken in einer Checkbox VBA die STRG Taste gedrückt halten.
Ungefähr so ( dies geht natürlich nicht )
If CheckBox1.Value = True Then
Strg-Taste = gedrückt
Else
Strg-Taste = nicht gedrückt
End If
Weiß jemand ob bzw. wie so etwas funktioniert?
mfg thomas

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Strg Taste
11.03.2021 07:12:37
Nepumuk
Hallo Thomas,
ein Beispiel:
Option Explicit

Private Declare PtrSafe Function GetKeyState Lib "user32.dll" ( _
    ByVal nVirtKey As Long) As Integer

Private Sub CheckBox1_Click()
    If GetKeyState(vbKeyControl) < 0 Then
        MsgBox "Strg gedrückt"
    End If
End Sub

Gruß
Nepumuk

Anzeige
AW: Strg Taste
11.03.2021 08:25:22
Yal
Hallo Nepumuk,
gibt es tatsächlich eine Rückgabe, auch wenn nur die Strg-Taste gedruckt wurde?
VG
Yal

AW: Strg Taste
11.03.2021 08:38:13
Nepumuk
Hallo Yal,
nicht dass ich wüsste.
Gruß
Nepumuk

AW: Strg Taste
11.03.2021 12:43:54
Thomas
Hallo Nepumuk,
besten dank für deinen Lösungsvorschlag.
Ich komme jedoch damit nicht zurecht. Ich habe anbei ein kleines Beispiel erstellt.
Kannst du dir dies mal nochmal anschauen?
https://www.herber.de/bbs/user/144660.xlsm
mfg thomas

AW: Strg Taste
11.03.2021 12:52:52
Nepumuk
Hallo Thomas,
so?
Private Sub CheckBox1_Click()
    If CheckBox1.Value Then
        If GetKeyState(vbKeyControl) < 0 Then
            MsgBox "Strg gedrückt"
        Else
            MsgBox "Strg-Taste = nicht gedrückt"
        End If
    End If
End Sub

Gruß
Nepumuk

Anzeige
AW: Strg Taste
11.03.2021 13:36:11
Thomas
Hallo Nepumuk,
mist ich habe mich nicht richtig ausgedrückt.
Solange der Haken in der CheckBox1 drin ist soll der Zustand STRG- Taste gedrückt sein.
Ich möchte erreichen, das man viele Zeilen markieren kann, ohne den Finger ständig auf der Strg haben muss. Ich habe das Problem das ich die zu markierenden Zeilen immer erst aus einem Dokument raussuchen muss. Sobald ich jedoch die Taste aus versehen mal losgelassen habe und eine Zeile markiere, muss ich alle noch einmal raus suchen. Deshalb dachte ich mir, vielleicht kann man die "Strg Taste" mit Hilfe einer Checkbox "einrasten".
mfg thomas

Anzeige
AW: Strg Taste
11.03.2021 14:16:45
Yal
Hallo Thomas,
Du kannst die Strg-Taste "einrasten", in dem Du diese 5 mal nacheinander druckst.
Nach "Einrastfunktion" nachforschen.
VG
Yal

AW: Strg Taste
11.03.2021 14:24:44
Nepumuk
Hallo Thomas,
das ist was ganz anderes. Test mal:
Option Explicit

Private Declare PtrSafe Function MapVirtualKeyA Lib "user32.dll" ( _
    ByVal wCode As Long, _
    ByVal wMapType As Long) As Long
Private Declare PtrSafe Sub keybd_event Lib "user32.dll" ( _
    ByVal bVk As Byte, _
    ByVal bScan As Byte, _
    ByVal dwFlags As Long, _
    ByVal dwExtraInfo As LongPtr)

Private Const KEYEVENTF_KEYDOWN As Long = &H0&
Private Const KEYEVENTF_KEYUP As Long = &H2

Private Sub CheckBox1_Click()
    Dim lngAltScan As Long
    If CheckBox1.Value Then
        lngAltScan = MapVirtualKeyA(vbKeyControl, 0&)
        Call keybd_event(vbKeyControl, Cbyte(lngAltScan), KEYEVENTF_KEYDOWN, 0)
    Else
        Call keybd_event(vbKeyControl, Cbyte(lngAltScan), KEYEVENTF_KEYUP, 0)
    End If
End Sub

Du musst nur darauf achten, dass du vor dem aktivieren der CheckBox schon eine Zelle des geplanten Markierungsbereich markiert ist.
Gruß
Nepumuk

Anzeige
AW: Strg Taste
11.03.2021 14:52:44
Nepumuk
Hallo Thomas,
da ist noch ein Fehler drin. So ist es richtig:
Private Sub CheckBox1_Click()
    Static slngAltScan As Long
    If CheckBox1.Value Then
        slngAltScan = MapVirtualKeyA(vbKeyControl, 0&)
        Call keybd_event(vbKeyControl, Cbyte(slngAltScan), KEYEVENTF_KEYDOWN, 0)
    Else
        Call keybd_event(vbKeyControl, Cbyte(slngAltScan), KEYEVENTF_KEYUP, 0)
    End If
End Sub

Gruß
Nepumuk

Anzeige
AW: Strg Taste
11.03.2021 14:59:50
Thomas
Hallo Yal,
besten dank für den Tipp mit der Einrastfunktion. Das funktioniert zwar aber, ich finde die die Sache mit der Checkbox irgendwie besser.
Hallo Nepumuk,
hab recht vielen vielen dank für deine Lösung. Es funktioniert super.
Das einzige was mir aufgefallen ist, das diese Funktion auch aktiv bleibt wenn man zwischendurch mal etwas z.b. googeln möchte. Kann man irgendwie prüfen ob die betroffene Arbeitsmappe den Focus hat?
mfg thomas

AW: Strg Taste
11.03.2021 15:07:39
Nepumuk
Hallo Thomas,
es gibt kein Event das ich auswerten könnte wenn Excel den Fokus verliert/bekommt. Dazu müsste ich einen Timer laufen lassen. Wäre das ok für dich?
Gruß
Nepumuk

Anzeige
AW: Strg Taste
11.03.2021 15:11:38
Thomas
Hallo Nepumuk,
ja na klar. Sehr sehr gern.
mfg thomas

AW: Strg Taste
11.03.2021 15:20:28
Thomas
Hallo Nepumuk,
ups ich habe den Haken vergessen.
mfg Thomas

riesen dank an Nepumuk
11.03.2021 18:54:58
Thomas
Hallo Nepumuk,
das klappt super. Ich hab keine Ahnung wie du das immer machst.
Hab rechtvielen vielen dank das du dir auch soviel Zeit genommen hast. Ich bin total Happy.
Nun werden sich meine grauen Haare nicht mehr ganz so schnell vermehren, nur weil ich mal von der Taste abgerutscht bin.
Ich wünsch dir noch ein schönes ruhiges Wochenende.
MFG Thomas
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige