Можлива проблема щодо відповіді від "user3616725":
Я працюю в Windows 8.1, і, схоже, є проблема зі зв'язаним кодом VBA із прийнятої відповіді від "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
Подробиці:
Запуск вище коду та вставка буфера обміну в комірку в Excel Я отримую два символи, що складаються з квадратів із знаком питання всередині, наприклад: ⍰⍰. Вставка в Блокнот навіть нічого не показує.
Рішення:
Після досить тривалого пошуку я знайшов ще один сценарій VBA від користувача "Nepumuk", який використовує API Windows . Ось його код, який нарешті спрацював для мене:
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
Щоб використовувати його так само, як перший код VBA зверху, змініть підпункт "Beispiel ()" з:
Public Sub Beispiel()
Call StringToClipboard("Hallo ...")
End Sub
Кому:
Sub CopyCellContents()
Call StringToClipboard(ActiveCell.Value)
End Sub
І запустіть його через меню макросів Excel, як запропоновано "user3616725" із прийнятої відповіді:
Повернувшись до програми Excel, перейдіть у меню Інструменти> Макрос> Макроси та виберіть макрос, який називається "CopyCellContents", а потім у діалоговому вікні виберіть Параметри. Тут ви можете призначити макрос клавіші швидкого доступу (наприклад, як Ctrl + c для звичайної копії) - я використовував Ctrl + q.
Потім, коли ви хочете скопіювати одну клітинку в Блокнот / де завгодно, просто виконайте Ctrl + q (або все, що ви вибрали), а потім виконайте Ctrl + v або Edit> Paste у вибраному вами місці призначення.
Редагувати (21 листопада 2015 р.):
@ Коментар від "dotctor":
Ні, це серйозно не нове питання! На мою думку, це гарне доповнення до прийнятої відповіді, оскільки моя відповідь стосується проблем, з якими ви можете зіткнутися, використовуючи код прийнятої відповіді. Якби у мене було більше репутації, я б створив коментар.
@ коментар від "Teepeemm":
Так, ви маєте рацію, відповіді, що починаються з назви "Проблема:", вводять в оману. Змінено на: "Можлива проблема щодо відповіді від" user3616725 ":". Як коментар я, звичайно, написав би набагато компактніше.