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

VBA - PutInClipboard bringt bei Paste zwei ??

Forumthread: VBA - PutInClipboard bringt bei Paste zwei ?

VBA - PutInClipboard bringt bei Paste zwei ?
04.10.2019 12:57:51
Arnd-Olav
Hallo,
ich fand den unteren Code, um den Wert einer Zelle ins Clipboard zu packen.
Wenn ich danach STRG-V drücke bekomme ich aber zwei "Fragezeichen".
In der Clipboard Ansicht in Excel sehe ich den tatsächlichen Zellwert und kann diesen von dort aus per Klick auch einfügen.
Nur über STRG-V bekomme ich die beiden "Fragezeichen"
Hier ist der code, weiß jemand woran das liegt?

Sub copy_to_CB3()
Dim objClip As New DataObject
Dim strTmp As String
With Worksheets("POG_UI")
Range("B100").Value = Range("B35").Value
strTmp = Worksheets("POG_UI").Cells(100, 2).Value
objClip.SetText strTmp
objClip.PutInClipboard
End With
End Sub

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA - PutInClipboard bringt bei Paste zwei ?
04.10.2019 13:40:39
Torsten
Hallo Arnd-Olav,
ich glaube das funktioniert nicht mit den Strg+V zum Einfuegen mit PutInClipboard.
Ich kann dir diese Funktion anbieten. Damit kannst du den Wert auch ausserhalb von Excel mit Strg+V einfuegen.

Option Explicit
Private Declare Function OpenClipboard Lib "user32.dll" ( _
ByVal hWnd As Long) As Long
Private Declare Function CloseClipboard Lib "user32.dll" () As Long
Private Declare Function EmptyClipboard Lib "user32.dll" () As Long
Private Declare Function SetClipboardData Lib "user32.dll" ( _
ByVal wFormat As Long, _
ByVal hMem As Long) As Long
Private Declare Function GlobalAlloc Lib "kernel32.dll" ( _
ByVal wFlags As Long, _
ByVal dwBytes As Long) As Long
Private Declare Function GlobalLock Lib "kernel32.dll" ( _
ByVal hMem As Long) As Long
Private Declare Function GlobalUnlock Lib "kernel32.dll" ( _
ByVal hMem As Long) As Long
Private Declare Function GlobalFree Lib "kernel32.dll" ( _
ByVal hMem As Long) As Long
Private Declare Function lstrcpy Lib "kernel32.dll" ( _
ByVal lpStr1 As Any, _
ByVal lpStr2 As Any) As Long
Private Const CF_TEXT As Long = 1&
Private Const GMEM_MOVEABLE As Long = 2&
Sub copy_to_CB3()
Dim objClip As New DataObject
Dim strTmp As String
With Worksheets("POG_UI")
.Range("B100").value = .Range("B35").value
strTmp = .Cells(100, 2).value
End With
Call StringToClipboard(strTmp)
End Sub
Private Sub StringToClipboard(strText As String)
Dim lngIdentifier As Long, lngPointer As Long
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
Gruss Torsten
Anzeige
AW: VBA - PutInClipboard bringt bei Paste zwei ?
04.10.2019 14:46:25
Arnd-Olav
Du bist der Beste :D
Vielen Dank fuer die Blumen...
04.10.2019 14:56:30
Torsten
...aber der Beste ist zu viel gesagt.
Schoenes WE
;
Anzeige

Infobox / Tutorial

VBA: PutInClipboard in Excel korrekt verwenden


Schritt-für-Schritt-Anleitung

Um den Wert einer Zelle in die Zwischenablage zu kopieren und sicherzustellen, dass das Einfügen mit STRG+V korrekt funktioniert, kannst du den folgenden VBA-Code verwenden:

Option Explicit
Private Declare Function OpenClipboard Lib "user32.dll" ( _
ByVal hWnd As Long) As Long
Private Declare Function CloseClipboard Lib "user32.dll" () As Long
Private Declare Function EmptyClipboard Lib "user32.dll" () As Long
Private Declare Function SetClipboardData Lib "user32.dll" ( _
ByVal wFormat As Long, _
ByVal hMem As Long) As Long
Private Declare Function GlobalAlloc Lib "kernel32.dll" ( _
ByVal wFlags As Long, _
ByVal dwBytes As Long) As Long
Private Declare Function GlobalLock Lib "kernel32.dll" ( _
ByVal hMem As Long) As Long
Private Declare Function GlobalUnlock Lib "kernel32.dll" ( _
ByVal hMem As Long) As Long
Private Declare Function GlobalFree Lib "kernel32.dll" ( _
ByVal hMem As Long) As Long
Private Declare Function lstrcpy Lib "kernel32.dll" ( _
ByVal lpStr1 As Any, _
ByVal lpStr2 As Any) As Long
Private Const CF_TEXT As Long = 1
Private Const GMEM_MOVEABLE As Long = 2

Sub copy_to_CB3()
    Dim objClip As New DataObject
    Dim strTmp As String
    With Worksheets("POG_UI")
        .Range("B100").Value = .Range("B35").Value
        strTmp = .Cells(100, 2).Value
    End With
    Call StringToClipboard(strTmp)
End Sub

Private Sub StringToClipboard(strText As String)
    Dim lngIdentifier As Long, lngPointer As Long
    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

Häufige Fehler und Lösungen

Ein häufiges Problem bei der Verwendung von PutInClipboard ist, dass du beim Einfügen mit STRG+V zwei "Fragezeichen" erhältst. Dies liegt oft daran, dass die Zwischenablage nicht korrekt gefüllt wurde. Wenn du den oben genannten Code verwendest, sollte dieses Problem behoben sein.

Wenn du weiterhin Probleme mit vba putinclipboard not working hast, prüfe Folgendes:

  • Stelle sicher, dass du die richtigen Bibliotheken eingebunden hast.
  • Überprüfe, ob du die richtigen Daten in die Zwischenablage kopierst.

Alternative Methoden

Eine Alternative zum PutInClipboard-Befehl ist die Verwendung der DataObject-Klasse, um Werte in die Zwischenablage zu kopieren. Hier ein Beispiel:

Sub CopyUsingDataObject()
    Dim objClip As New MSForms.DataObject
    objClip.SetText "Dein Text hier"
    objClip.PutInClipboard
End Sub

Diese Methode ist einfacher, kann jedoch in bestimmten Situationen weniger flexibel sein als die Verwendung der Windows-API.


Praktische Beispiele

  1. Kopieren eines Zellwerts: Um einen bestimmten Zellwert zu kopieren, passe den Code in der copy_to_CB3-Subroutine an, um die gewünschte Zelle anzugeben.

  2. Kopieren mehrerer Zellen: Du kannst auch mehrere Zellen zusammenfassen und in die Zwischenablage kopieren, indem du die Werte in einer Schleife zusammenfügst.


Tipps für Profis

  • Verwende immer die Option Explicit-Anweisung, um sicherzustellen, dass alle Variablen deklariert sind.
  • Halte deine VBA-Umgebung sauber, indem du nicht verwendete Subroutinen und Funktionen entfernst.
  • Teste deinen Code regelmäßig, um sicherzustellen, dass vba excel clipboard korrekt funktioniert.

FAQ: Häufige Fragen

1. Warum funktioniert vba putinclipboard manchmal nicht?
Das Problem kann an einer fehlerhaften Implementierung oder an fehlenden Berechtigungen für den Zugriff auf die Zwischenablage liegen.

2. Wie kann ich den Inhalt der Zwischenablage überprüfen?
Es gibt keine eingebaute Funktion in Excel, um den Inhalt der Zwischenablage anzuzeigen, aber du kannst eine einfache UserForm oder ein weiteres VBA-Skript erstellen, um dies zu tun.

3. Welche Excel-Version benötige ich für diesen Code?
Der Code sollte in allen modernen Excel-Versionen (Excel 2010 und höher) funktionieren, solange du die Microsoft Forms-Bibliothek referenzierst.

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