访问剪贴板的第N项

时间:2016-05-26 14:31:01

标签: excel vba excel-vba clipboard

有没有办法从剪贴板中检索多个项目?我正在使用这样的东西:

Dim clipboard As MSForms.DataObject
Dim str1 As String
Dim str2 As String

Set clipboard = New MSForms.DataObject

clipboard.GetFromClipboard
str1 = clipboard.GetText(1)
str2 = clipboard.GetText(2)

但是,我收到一个错误,我在第二个变量中指定了一个值,其中包含以下内容:

  Run-time error '-2147221404 (800040064)':
  DataObject:GetText Invalid FORMATETC Structure

非常感谢帮助!

1 个答案:

答案 0 :(得分:1)

原来有两个剪贴板:Windows剪贴板和Office剪贴板。

Office剪贴板最多可以容纳24个项目(所有类型都可以是相同类型),而Windows剪贴板只能容纳每种类型的一个项目。

  • 复制到Windows剪贴板就像突出显示一样简单 键入Ctrl-C。
  • 复制到Office剪贴板非常简单 突出显示然后键入Ctrl-CC。 Office剪贴板仅处于活动状态 如果至少有一个Office应用程序打开并处于活动状态 时间。

在VBA中,使用MSForms.DataObject只能访问Windows剪贴板,因此只有一个文本项可用。经过各种搜索后,我无法找到如何使用VBA中的Office剪贴板打开/控制/复制/粘贴。

说了这么多,在编写和运行VBA宏时,几乎没有理由使用任何剪贴板。您可以(暂时)将这些值存储在工作表,公共变量,公共对象或甚至私有变量(可能具有公共可访问属性)的未使用单元格中。所有这些方法与在剪贴板中存储数据的目的完全相同。

在浏览关于此主题的interwebz时,我遇到了几个使用剪贴板在不同工作簿之间或Excel之间的应用程序之间复制数据的引用。您仍然不需要剪贴板,因为VBA可以打开远程/外部应用程序/工作簿/文档并直接复制/粘贴数据。