Возможная проблема в связи с ответом от "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», который использует Windows API. . Вот его код, который наконец-то сработал для меня:
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, приведенный выше, измените Sub «Beispiel ()» с:
Public Sub Beispiel()
Call StringToClipboard("Hallo ...")
End Sub
Кому:
Sub CopyCellContents()
Call StringToClipboard(ActiveCell.Value)
End Sub
И запустите его через меню макросов Excel, как это было предложено пользователем 3616725 из принятого ответа:
Вернувшись в Excel, выберите «Инструменты»> «Макрос»> «Макросы» и выберите макрос «CopyCellContents», а затем выберите «Параметры» в диалоговом окне. Здесь вы можете назначить макрос сочетанию клавиш (например, Ctrl + c для обычного копирования) - я использовал Ctrl + q.
Затем, когда вы хотите скопировать одну ячейку в Блокнот / где угодно, просто нажмите Ctrl + q (или что угодно, что вы выбрали), а затем выполните Ctrl + v или Правка> Вставить в выбранное место назначения.
Изменить (21 ноября 2015 г.):
@ комментарий от "dotctor":
Нет, серьезно, это не новый вопрос! На мой взгляд, это хорошее дополнение к принятому ответу, поскольку мой ответ касается проблем, с которыми вы можете столкнуться при использовании кода из принятого ответа. Если бы у меня было больше репутации, я бы написал комментарий.
@ комментарий от "Teepeemm":
Да, вы правы, ответы, начинающиеся с заголовка "Проблема:", вводят в заблуждение. Изменено на: «Возможная проблема в связи с ответом пользователя« user3616725 »:». В качестве комментария я бы, конечно, написал намного компактнее.