与“user3616725”的回答有关的可能问题:
我在 Windows 8.1 上,从“user3616725”接受的答案中链接的 VBA 代码似乎有问题:
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 中的单元格中,我得到两个由正方形组成的符号,里面有一个问号,如下所示:⍰⍰。粘贴到记事本甚至不显示任何内容。
解决方案:
经过一段时间的搜索,我找到了another VBA script from user "Nepumuk" which makes use of the 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 宏菜单运行它,如接受答案中“user3616725”的建议:
返回 Excel,转到工具>宏>宏并选择名为
“CopyCellContents”,然后从对话框中选择选项。你在这里
可以将宏分配给快捷键(例如 Ctrl+c 用于正常
复制) - 我使用了 Ctrl+q。
然后,当您想将单个单元格复制到记事本/任何地方时,
只需执行 Ctrl+q (或您选择的任何内容),然后执行 Ctrl+v 或
编辑>粘贴到您选择的目的地。
编辑(2015 年 11 月 21 日):
@来自“dotctor”的评论:
不,这真的不是新问题!在我看来,这是对已接受答案的一个很好的补充,因为我的答案解决了您在使用已接受答案中的代码时可能遇到的问题。如果我有更多的声誉,我会创建一个评论。
@来自“Teepeemm”的评论:
是的,您是对的,以标题“问题:”开头的答案具有误导性。更改为:“与来自“user3616725”的答案相关的可能问题:”。作为评论,我当然会写得更紧凑。