在Excel VBA中保存/恢复剪贴板

在Excel VBA中保存/恢复剪贴板,vba,excel,Vba,Excel,我有一本Excel工作簿,里面有很多工作表。大多数工作表的工作表_Activate()子例程中都有一些代码。由于某些原因,这些代码会导致剪贴板的内容丢失-非常烦人,因为电子表格用户无法在工作表之间复制和粘贴 为了解决这个问题,我在工作表的开头添加了以下几行代码: Dim dClipBoard As MsForms.DataObject On Error Resume Next Set dClipBoard = New MsForms.DataObject dClipBoard.GetFromCl

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

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

Dim dClipBoard As MsForms.DataObject
On Error Resume Next
Set dClipBoard = New MsForms.DataObject
dClipBoard.GetFromClipboard
On Error Resume Next
dClipBoard.PutInClipboard
并在工作表激活代码退出前显示以下行:

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

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

我可以想象这种情况下有两种不同的解决方法

1-如有可能,更改工作表中的代码。如果使用.copy命令,请将其替换为以下代码:

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

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

这是一个长期存在的问题,似乎没有解决办法。解决方法是建议用户在复制时打开“Office剪贴板任务窗格”:当事件宏运行时,剪贴板不会被擦除。我认为OP指的是手动复制粘贴操作,而不是使用VBA执行的操作。没错,但手动复制粘贴不起作用的原因是因为代码中的某个地方,vba脚本正在自己进行复制粘贴。不,这不是原因。问题是某些事件过程(包括工作表_Activate)会产生清除剪贴板的副作用。谢谢您提供的信息。我不知道。我提供的第二种方法仍然有效