与“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单元格中,我得到了两个由方块组成的符号,内部有一个问号,就像这样:⍰⍰。在记事本中粘贴甚至什么也不显示。
解决方法:
经过一段时间的搜索,我找到了用户“Nepumuk”发布的另一个使用Windows API的VBA脚本。这是他的代码,最终对我起作用了:
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
并按照"用户3616725"所建议的方法通过Excel宏菜单运行它:
回到Excel,选择工具>宏>宏,然后选择名为“CopyCellContents”的宏,再从对话框中选择选项。在这里,您可以将宏分配给快捷键(例如像正常复制的Ctrl+c) - 我使用了Ctrl+q。
然后,当您想要将单个单元格复制到记事本/任何位置时,只需按Ctrl+q(或您选择的其他键),然后在所选目标中进行Ctrl+v或编辑>粘贴。
编辑(2015年11月21日):
@来自“dotctor”的评论:
不,这不是一个新问题!我认为这是对接受答案时可能遇到的问题的很好补充。如果我有更多的声望,我会创建一个评论。
@来自“Teepeemm”的评论:
是的,你是对的,“问题:”开头的答案是误导人的。改为:“与“用户3616725”的答案相关的可能问题”。作为评论,我肯定会写得更紧凑。