与“ 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代码一样使用它,请将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”的评论:
是的,您是对的,以标题“ Problem:”开头的答案具有误导性。更改为:“与“ user3616725”的答案有关的可能问题:”。作为评论,我当然会写得更紧凑。