Mögliches Problem in Bezug auf die Antwort von "user3616725": Ich bin
unter Windows 8.1 und es scheint ein Problem mit dem verknüpften VBA-Code von der akzeptierten Antwort von "user3616725" zu geben:
Sub CopyCellContents()
' !!! IMPORTANT !!!:
' CREATE A REFERENCE IN THE VBE TO "Microsft Forms 2.0 Library" OR "Microsft Forms 2.0 Object Library"
' DO THIS BY (IN VBA EDITOR) CLICKING TOOLS -> REFERENCES & THEN TICKING "Microsoft Forms 2.0 Library" OR "Microsft Forms 2.0 Object Library"
Dim objData As New DataObject
Dim strTemp As String
strTemp = ActiveCell.Value
objData.SetText (strTemp)
objData.PutInClipboard
End Sub
Details:
Wenn Sie den obigen Code ausführen und die Zwischenablage in eine Zelle in Excel einfügen, werden zwei Symbole angezeigt, die aus Quadraten mit einem Fragezeichen bestehen: ⍰⍰. Das Einfügen in Notepad zeigt nicht einmal etwas an.
Lösung:
Nachdem ich einige Zeit gesucht hatte, fand ich ein anderes VBA-Skript vom Benutzer "Nepumuk", das die Windows-API verwendet . Hier ist sein Code, der endlich für mich funktioniert hat:
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
Public Sub Beispiel()
Call StringToClipboard("Hallo ...")
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
Um es wie den ersten VBA-Code von oben zu verwenden, ändern Sie das Sub "Beispiel ()" von:
Public Sub Beispiel()
Call StringToClipboard("Hallo ...")
End Sub
Zu:
Sub CopyCellContents()
Call StringToClipboard(ActiveCell.Value)
End Sub
Und führen Sie es über das Excel-Makro-Menü aus, wie von "user3616725" aus der akzeptierten Antwort vorgeschlagen:
Gehen Sie in Excel zu Extras> Makro> Makros, wählen Sie das Makro "CopyCellContents" aus und wählen Sie dann im Dialogfeld "Optionen". Hier können Sie das Makro einer Tastenkombination zuweisen (z. B. Strg + C für normales Kopieren) - ich habe Strg + q verwendet.
Wenn Sie dann eine einzelne Zelle in den Editor kopieren möchten, drücken Sie einfach Strg + q (oder was auch immer Sie ausgewählt haben) und dann Strg + v oder Bearbeiten> Einfügen in das von Ihnen gewählte Ziel.
Edit (21. November 2015):
@ Kommentar von "dotctor":
Nein, das ist ernsthaft keine neue Frage! Meiner Meinung nach ist dies eine gute Ergänzung für die akzeptierte Antwort, da meine Antwort Probleme behebt, die auftreten können, wenn Sie den Code aus der akzeptierten Antwort verwenden. Wenn ich mehr Ruf hätte, hätte ich einen Kommentar erstellt.
@ Kommentar von "Teepeemm":
Ja, Sie haben Recht, Antworten, die mit dem Titel "Problem:" beginnen, sind irreführend. Geändert zu: "Mögliches Problem in Bezug auf die Antwort von" user3616725 ":". Als Kommentar hätte ich sicherlich viel kompakter geschrieben.