Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: CTRL-V abfangen

CTRL-V abfangen
14.05.2018 07:08:34
Stefan
Hallo liebes Forum,
ich möchte die CTRL-V (Einfügen)-Tastenkombination abfangen und basierend auf dem Inhalt der Zwischenablage entweder eine eigene Bearbeitung anspringen oder die Standardbearbeitung aufrufen. Das Abfangen mit "Application.OnKey "^v", "Einfuegen_Check" funktioniert, ebenso das Auslesen der Zwischenablage und die eigene Bearbeitung.
Der Aufruf der Standardbearbeitung macht aber Probleme. Wenn mich der Inhalt der Zwischenablage nicht interessiert, probiere ich die Standardbearbeitung mit folgendem Code aus meinem Makro aufzurufen:
Sub "Einfuegen_Check"()
"Application.OnKey "^v"  ' Standardbearbeitung von CTRL-V wieder einschalten
SendKeys "^v", True      ' Aufruf der Standardbearbeitung
"Application.OnKey "^v", "Einfuegen_Check"  ' CRTL-V wieder abfangen
End Sub
Dieser Code führt offenbar zu einer Endlosschleife. Beim Ausführen im Einzelschrittmodus des Debuggers wird außerdem beim Ausführen des Sendkey-Kommandos die Numlock-Taste aktiviert. Anschließend wird der Inhalt der Zwischenablage in das Makrofenster gepasted (das ist ja ok). Ausführen ohne Debugger führt, wie gesagt, zu einer Endlosschleife.
Herzlichen Dank für jedes Hilfsangebot!
Stefan
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: CTRL-V abfangen
14.05.2018 08:22:25
ChrisL
Hi Stefan
NumLock ist ein bekanntes Problem. Siehe Google. NumLock einfach wieder aktivieren...
Sendkeys "{NUMLOCK}", True
Deine Endlosschleife kann ich mit XL2016 nicht reproduzieren. Hier der Test:
Sub Einfuegen_Check()
Application.OnKey "^v"  ' Standardbearbeitung von CTRL-V wieder einschalten
SendKeys "^v", True      ' Aufruf der Standardbearbeitung
MsgBox "hallo welt"
Application.OnKey "^v", "Einfuegen_Check"  ' CRTL-V wieder abfangen
End Sub
cu
Chris
Anzeige
AW: CTRL-V abfangen
14.05.2018 17:39:21
Stefan
Hallo Chris,
danke für den Versuch, aber wenn Du in Deiner Version die MsgBox-Zeile auskommentierst, wirst Du vermutlich das gleiche Problem haben. Ich habe es inzwischen auch unter EXCEL 2016 reproduziert.
Der Code führt beim Einfügen zu einem flackernden Cursor, der für mich auf eine Endlosschleife hindeutet.
Stefan
Anzeige
AW: CTRL-V abfangen
15.05.2018 08:19:27
ChrisL
Hi Stefan
Ja stimmt. Siehe Antwort Daniel oder benutze DoEvents...
Sub Einfuegen_Check()
Application.OnKey "^v"  ' Standardbearbeitung von CTRL-V wieder einschalten
SendKeys "^v", True      ' Aufruf der Standardbearbeitung
DoEvents
Application.OnKey "^v", "Einfuegen_Check"  ' CRTL-V wieder abfangen
End Sub
cu
Chris
Anzeige
AW: CTRL-V abfangen
14.05.2018 18:03:07
Daniel
Hi
wenn du "normal" einfügen willst dann führe einfach den Befehl ActiveSheet.Paste aus.
das entspricht dem CTRL-V und du sparst dir damit das Umschalten und das SendKeys.
Gruß Daniel
AW: CTRL-V abfangen
16.05.2018 20:49:29
Stefan
Hi Daniel,
ja, es kann so einfach sein. Tausend Dank, so funktioniert es!
Danke auch an Chris für den Versuch.
Cheers, Stefan
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

CTRL-V Abfangen in Excel VBA


Schritt-für-Schritt-Anleitung

Um die CTRL-V (Einfügen)-Tastenkombination in Excel mit VBA abzufangen, kannst Du folgende Schritte befolgen:

  1. Öffne den Visual Basic for Applications (VBA) Editor in Excel (ALT + F11).

  2. Erstelle ein neues Modul (Einfügen > Modul).

  3. Füge den folgenden Code in das Modul ein:

    Sub Einfuegen_Check()
       Application.OnKey "^v", "Einfuegen_Check"  ' Abfangen von CTRL-V
       SendKeys "^v", True  ' Aufruf der Standardbearbeitung
       Application.OnKey "^v", "Einfuegen_Check"  ' CRTL-V wieder abfangen
    End Sub
  4. Schließe den VBA-Editor und teste die Funktion in Excel, indem Du etwas kopierst und versuchst, es mit CTRL-V einzufügen.


Häufige Fehler und Lösungen

  • Endlosschleife beim Einfügen: Wenn Du die Endlosschleife erlebst, kann dies an der Verwendung von SendKeys liegen. Stattdessen kannst Du ActiveSheet.Paste verwenden, um das Einfügen direkt durchzuführen:

    Sub Einfuegen_Check()
       Application.OnKey "^v", "Einfuegen_Check"
       ActiveSheet.Paste  ' Einfügen ohne SendKeys
    End Sub
  • NumLock aktiviert sich: Ein bekanntes Problem bei der Verwendung von SendKeys ist, dass die NumLock-Taste aktiviert wird. Um dies zu umgehen, kannst Du den folgenden Befehl hinzufügen, um NumLock wieder zu aktivieren:

    SendKeys "{NUMLOCK}", True

Alternative Methoden

Wenn Du die Standardbearbeitung ohne SendKeys aufrufen möchtest, ist der direkte Befehl ActiveSheet.Paste die einfachste Methode. Dies entspricht dem CTRL-V und umgeht die Probleme, die mit der Verwendung von SendKeys verbunden sind.

  • Beispiel:

    Sub Einfuegen_Check()
       Application.OnKey "^v", "Einfuegen_Check"
       ActiveSheet.Paste  ' Einfügen ohne SendKeys
    End Sub

Praktische Beispiele

Hier sind einige praktische Beispiele, wie Du das Abfangen von CTRL-V in Excel VBA effizient nutzen kannst:

  1. Einfügen mit Bearbeitung:

    Sub Einfuegen_Check()
       Application.OnKey "^v", "Einfuegen_Check"
       ' Hier kannst Du eine eigene Bearbeitung einfügen
       MsgBox "Einfügen wird bearbeitet"
       ActiveSheet.Paste
    End Sub
  2. Einfügen mit Validierung:

    Sub Einfuegen_Check()
       Application.OnKey "^v", "Einfuegen_Check"
       If Not IsEmpty(Clipboard.GetText) Then
           ActiveSheet.Paste
       Else
           MsgBox "Die Zwischenablage ist leer."
       End If
    End Sub

Tipps für Profis

  • DoEvents verwenden: Um sicherzustellen, dass Excel alle vorherigen Aufgaben abgeschlossen hat, bevor der nächste Befehl ausgeführt wird, kannst Du DoEvents in Deinen Code einfügen:

    DoEvents
  • Einfache Tastenkombinationen anpassen: Du kannst auch andere Tastenkombinationen abfangen, indem Du die Zeichenfolgen in Application.OnKey anpasst. Beispielsweise kannst Du Application.OnKey "^c", "CopyFunction" hinzufügen, um CTRL-C für eine eigene Kopierfunktion zu verwenden.


FAQ: Häufige Fragen

1. Was bedeutet "SendKeys" in VBA?
SendKeys ist eine Methode in VBA, mit der Du Tasteneingaben simulieren kannst, als ob sie von der Tastatur eingegeben werden.

2. Wie kann ich die Standardbearbeitung von CTRL-V aufrufen?
Um die Standardbearbeitung für CTRL-V aufzurufen, kannst Du ActiveSheet.Paste anstelle von SendKeys "^v" verwenden, um das Einfügen durchzuführen.

3. Gibt es eine Möglichkeit, die Zwischenablage vor dem Einfügen zu überprüfen?
Ja, Du kannst die Zwischenablage überprüfen, indem Du den Inhalt der Zwischenablage ausliest. Dies erfordert jedoch zusätzliche Funktionen, um den Inhalt zu verarbeiten.

4. Funktioniert das Abfangen von CTRL-V in allen Excel-Versionen?
Der Code sollte in den meisten modernen Excel-Versionen, einschließlich Excel 2016, funktionieren. Ältere Versionen könnten jedoch einige Unterschiede aufweisen.

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