Możliwy problem związany z odpowiedzią od „user3616725”: Używam
Windows 8.1 i wydaje się, że jest problem z połączonym kodem VBA z zaakceptowanej odpowiedzi od „user3616725”:
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
Szczegóły:
Uruchamiając powyższy kod i wklejając schowek do komórki w Excelu, otrzymuję dwa symbole złożone z kwadratów ze znakiem zapytania w środku, tak: ⍰⍰. Wklejanie do Notatnika nawet niczego nie pokazuje.
Rozwiązanie:
Po dłuższych poszukiwaniach znalazłem inny skrypt VBA od użytkownika „Nepumuk”, który korzysta z Windows API . Oto jego kod, który w końcu zadziałał dla mnie:
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
Aby użyć go w taki sam sposób jak pierwszego kodu VBA z góry, zmień Sub „Beispiel ()” z:
Public Sub Beispiel()
Call StringToClipboard("Hallo ...")
End Sub
Do:
Sub CopyCellContents()
Call StringToClipboard(ActiveCell.Value)
End Sub
I uruchom go za pomocą menu makr programu Excel, jak sugerował „user3616725” z zaakceptowanej odpowiedzi:
Wróć do programu Excel, przejdź do Narzędzia> Makro> Makra i wybierz makro o nazwie „CopyCellContents”, a następnie wybierz Opcje z okna dialogowego. Tutaj możesz przypisać makro do klawisza skrótu (np. Ctrl + c dla normalnej kopii) - ja użyłem Ctrl + q.
Następnie, jeśli chcesz skopiować pojedynczą komórkę do Notatnika / gdziekolwiek, po prostu wykonaj Ctrl + q (lub cokolwiek wybierzesz), a następnie wykonaj Ctrl + v lub Edycja> Wklej w wybranym miejscu docelowym.
Edycja (21 listopada 2015):
@ komentarz od "dotctor":
Nie, to naprawdę nie jest nowe pytanie! Moim zdaniem jest to dobry dodatek do zaakceptowanej odpowiedzi, ponieważ moja odpowiedź dotyczy problemów, z którymi możesz się spotkać korzystając z kodu z zaakceptowanej odpowiedzi. Gdybym miał więcej reputacji, stworzyłbym komentarz.
@ komentarz od „Teepeemm”:
Tak, masz rację, odpowiedzi zaczynające się od tytułu „Problem:” są mylące. Zmieniono na: „Możliwy problem w związku z odpowiedzią od„ user3616725 ”:”. Jako komentarz z pewnością napisałbym znacznie bardziej zwięźle.