Excel VBA: Inhalte in die Zwischenablage kopieren
Schritt-für-Schritt-Anleitung
Um den Inhalt einer Textbox in die Zwischenablage zu kopieren, kannst du den folgenden VBA-Code verwenden. Achte darauf, dass dieser Code für 64-Bit-Systeme geeignet ist.
-
Öffne den VBA-Editor in Excel (Alt + F11).
-
Füge ein neues Modul hinzu:
- Rechtsklick auf "VBAProject (deine Arbeitsmappe)" > Einfügen > Modul.
-
Kopiere und füge diesen Code ein:
Option Explicit
Private Declare PtrSafe Function OpenClipboard Lib "user32.dll" ( _
ByVal hwnd As LongPtr) As LongPtr
Private Declare PtrSafe Function CloseClipboard Lib "user32.dll" () As LongPtr
Private Declare PtrSafe Function EmptyClipboard Lib "user32.dll" () As LongPtr
Private Declare PtrSafe Function SetClipboardData Lib "user32.dll" ( _
ByVal wFormat As LongPtr, _
ByVal hMem As LongPtr) As LongPtr
Private Declare PtrSafe Function GlobalAlloc Lib "kernel32.dll" ( _
ByVal wFlags As LongPtr, _
ByVal dwBytes As LongPtr) As LongPtr
Private Declare PtrSafe Function GlobalLock Lib "kernel32.dll" ( _
ByVal hMem As LongPtr) As LongPtr
Private Declare PtrSafe Function GlobalUnlock Lib "kernel32.dll" ( _
ByVal hMem As LongPtr) As LongPtr
Private Declare PtrSafe Function GlobalFree Lib "kernel32.dll" ( _
ByVal hMem As LongPtr) As LongPtr
Private Declare PtrSafe Function lstrcpy Lib "kernel32.dll" ( _
ByVal lpStr1 As Any, _
ByVal lpStr2 As Any) As LongPtr
Private Const CF_TEXT As LongPtr = 1
Private Const GMEM_MOVEABLE As LongPtr = 2
Public Sub copy_to_clip()
Dim strText As String
strText = UserForm1.TextBoxEmail.Text 'Ändere UserForm1 auf den Namen deiner UserForm
Call StringToClipboard(strText)
End Sub
Private Sub StringToClipboard(strText As String)
Dim lngIdentifier As LongPtr, lngPointer As LongPtr
lngIdentifier = GlobalAlloc(GMEM_MOVEABLE, Len(strText) + 1)
lngPointer = GlobalLock(lngIdentifier)
Call lstrcpy(ByVal lngPointer, strText)
Call GlobalUnlock(lngIdentifier)
Call OpenClipboard(0)
Call EmptyClipboard
Call SetClipboardData(CF_TEXT, lngIdentifier)
Call CloseClipboard
Call GlobalFree(lngIdentifier)
End Sub
-
Füge einen Button zu deiner UserForm hinzu und verlinke ihn mit der copy_to_clip
Subroutine:
Private Sub CommandButtonCopyMail_Click()
copy_to_clip
End Sub
Häufige Fehler und Lösungen
Alternative Methoden
Falls du eine einfachere Methode bevorzugst, kannst du die CreateObject
-Methode verwenden:
Private Sub CommandButtonCopyMail_Click()
Dim Text As Variant
Text = TextBoxEmail.Text
CreateObject("HTMLfile").ParentWindow.ClipboardData.SetData "text", Text
End Sub
Diese Methode ist unkompliziert und funktioniert sowohl in 32-Bit- als auch in 64-Bit-Versionen von Excel.
Praktische Beispiele
Hier ist ein vollständiges Beispiel, wie du die copy_to_clip
Subroutine in eine UserForm integrieren kannst:
Private Sub CommandButtonCopyMail_Click()
copy_to_clip
End Sub
Public Sub copy_to_clip()
Dim strText As String
strText = UserForm1.TextBoxEmail.Text
Call StringToClipboard(strText)
End Sub
Achte darauf, dass die UserForm und die Textbox korrekt benannt sind.
Tipps für Profis
-
Zwischenablage leeren: Wenn du sicherstellen möchtest, dass die Zwischenablage vor dem Kopieren geleert wird, rufe EmptyClipboard
auf, bevor du den neuen Text hinzufügst.
-
Fehlerbehandlung: Implementiere Fehlerbehandlung in deinen Subroutinen, um unerwartete Fehler zu vermeiden, insbesondere wenn du mit API-Funktionen arbeitest.
FAQ: Häufige Fragen
1. Wie kann ich die Zwischenablage in Excel VBA leeren?
Du kannst die Zwischenablage leeren, indem du Call EmptyClipboard
aufrufst, bevor du neuen Text hinzufügst.
2. Funktioniert der Code auch auf 32-Bit-Systemen?
Ja, der Code ist so geschrieben, dass er sowohl auf 32-Bit- als auch auf 64-Bit-Systemen funktioniert, solange du die PtrSafe
-Anweisungen verwendest.
3. Warum funktioniert Application.CutCopyMode = False
nicht für die Windows-Zwischenablage?
Application.CutCopyMode
ist nur für den Excel-Inhalt zuständig und hat keinen Einfluss auf die Windows-Zwischenablage.