【问题标题】:Saving/restoring clipboard in Excel VBA在 Excel VBA 中保存/恢复剪贴板
【发布时间】:2014-02-22 05:38:41
【问题描述】:

我有一个包含许多工作表的 Excel 工作簿。大多数工作表在 Worksheet_Activate() 子例程中都有一些代码。由于某种原因,此代码会导致剪贴板的内容丢失 - 非常烦人,因为电子表格用户无法在工作表之间复制和粘贴。

为了解决这个问题,我在 Worksheet_Activate 代码的开头添加了以下几行:

Dim dClipBoard As MsForms.DataObject
On Error Resume Next
Set dClipBoard = New MsForms.DataObject
dClipBoard.GetFromClipboard

以及在 Worksheet_Activate 代码退出之前的以下几行:

On Error Resume Next
dClipBoard.PutInClipboard

不幸的是,它不起作用。当我从一张纸移动到另一张纸时,我的剪贴板仍然丢失。

【问题讨论】:

  • 这是一个长期存在的问题,似乎没有解决方案。解决方法是建议您的用户在复制时打开“Office 剪贴板任务窗格”:事件宏运行时不会擦除该剪贴板。

标签: vba excel


【解决方案1】:

对于这种情况,我可以想象两种不同的解决方法。

1- 如果可能,更改工作表中的代码。无论在哪里使用 .copy 命令,都将其替换为如下代码:

range("Some Range") = range("Some other range")

2- 如果无法更改代码(使用您当前使用的方法)而不是将数据存储到 MsForms.DataObject 您可以将它们复制到一些辅助工作表,并在退出之前从工作表中检索数据工作表事件触发器。

【讨论】:

  • 我认为 OP 指的是 手动 复制粘贴操作,而不是使用 VBA 执行的操作。
  • 没错,但是手动复制粘贴不起作用的原因是因为在代码的某个地方,vba 脚本正在执行自己的一些复制粘贴。
  • 不,那是不是的原因。问题是某些事件过程(包括 Worksheet_Activate)具有清除剪贴板的副作用。
  • 感谢您的信息。不知道那个。那么我提供的第二种方法仍然有效
  • 另外,设置状态栏 (Appication.StatusBar = "somelthing") 将清除剪贴板。
猜你喜欢
  • 1970-01-01
  • 2015-07-29
  • 2011-12-09
  • 2020-05-05
  • 2016-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多