Office 2013 Excel .PutInClipboard是不同的?

我已经使用了一个多年的例程来将一个纯文本string放入剪贴板,我可以将其粘贴到另一个程序中,例如:

targetData.SetText "This is a plain text string" targetData.PutInClipboard 

当我在Excel Office 2013中使用这个数据时,数据不在剪贴板中,因此我无法粘贴它。 这从来没有发生在以前的版本。

在仔细观察下,我发现这个string不是作为“系统string”,而是作为“文本”或“Unicode文本”进入剪贴板。

但是…大约10%的时间它的工作,因为它应该把string作为“文本”的剪贴板。

有任何想法吗??

user2140261的评论是正确的解决scheme:

如何:将信息发送到剪贴板

(以下只是从上面的链接复制而来)

如果您需要将窗体上的活动控件的内容或报表复制到剪贴板,则只需要以下代码:

 Private Sub cmdCopy_Click() Me!txtNotes.SetFocus DoCmd.RunCommand acCmdCopy End Sub 

然而,这是您的旧例程所需的replace:

1.创build一个模块,将其命名为“WinAPI”或其他东西,把这个代码放在里面:

 Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long Declare Function CloseClipboard Lib "User32" () As Long Declare Function OpenClipboard Lib "User32" (ByVal hwnd As Long) As Long Declare Function EmptyClipboard Lib "User32" () As Long Declare Function lstrcpy Lib "kernel32" (ByVal lpString1 As Any, ByVal lpString2 As Any) As Long Declare Function SetClipboardData Lib "User32" (ByVal wFormat As Long, ByVal hMem As Long) As Long Public Const GHND = &H42 Public Const CF_TEXT = 1 Public Const MAXSIZE = 4096 

2.在定义了旧例程的模块中,用以下代码replace旧例程:

 Function ClipBoard_SetData(MyString As String) Dim hGlobalMemory As Long, lpGlobalMemory As Long Dim hClipMemory As Long, X As Long ' Allocate moveable global memory. '------------------------------------------- hGlobalMemory = GlobalAlloc(GHND, Len(MyString) + 1) ' Lock the block to get a far pointer ' to this memory. lpGlobalMemory = GlobalLock(hGlobalMemory) ' Copy the string to this global memory. lpGlobalMemory = lstrcpy(lpGlobalMemory, MyString) ' Unlock the memory. If GlobalUnlock(hGlobalMemory) <> 0 Then MsgBox "Could not unlock memory location. Copy aborted." GoTo OutOfHere2 End If ' Open the Clipboard to copy data to. If OpenClipboard(0&) = 0 Then MsgBox "Could not open the Clipboard. Copy aborted." Exit Function End If ' Clear the Clipboard. X = EmptyClipboard() ' Copy the data to the Clipboard. hClipMemory = SetClipboardData(CF_TEXT, hGlobalMemory) OutOfHere2: If CloseClipboard() = 0 Then MsgBox "Could not close Clipboard." End If End Function 

然后,这样说:

 ' doesn't work on Windows 8: targetData.SetText "This is a plain text string" 'doesn't work on Windows 8: targetData.PutInClipboard ClipBoard_SetData ("This is a plain text string") 

您应该添加“Microsoft窗体2.0对象库”您的引用,那么您可以使用此function。 您可以通过转到Excel /开发人员/ Visual Basic(或您的VBE模块)和工具/参考select浏览,然后在您的system32文件夹中search“FM20.DLL”文件,然后通过select此文件将出现参考列表“Microsoft forms 2.0 object library”。 激活。 现在事情和以前一样好;)