首页 > 解决方案 > PutInClipboard 方法的结果不一致

问题描述

我设置了一个电子表格,其中存储了大文本条目,以便选择性地复制并粘贴到另一个应用程序中;我正在尝试为用户设计一种简单的方法来(有选择地)将文本从任何单元格复制到剪贴板,以便他们可以轻松地将其粘贴到另一个应用程序中;始终保护源材料的完整性。

以下代码可以根据需要工作:

 **Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
     Dim OutputObject    As DataObject
     Dim CellText        As String

     CellText = Target.Text
     Set OutputObject = New DataObject
     OutputObject.SetText CellText
     OutputObject.PutInClipboard

 End Sub**

但是,双击的结果将单元格指针留在单元格内(在 EDIT 模式下),这会使单元格的内容面临被覆盖的风险。插入“CANCEL = True”应该通过取消双击的效果来解决问题,使单元格处于选中状态但不在编辑模式下。但是,这会导致剪贴板为空,因为没有任何内容粘贴到外部应用程序(记事本)中。

完全相同的代码——出于某种莫名其妙的原因——在 Worksheet_SelectionChange(ByVal Target As Range) 子例程中不能按预期工作!?!?!

我还尝试在电子表格上创建一个 ActiveX 按钮;该按钮使用相对方向逻辑来确定要复制哪个单元格的文本,但是 AGAIN ...没有任何内容粘贴到外部应用程序(记事本)中。

有什么想法吗?

标签: excelvbaclipboard

解决方案


Using SendKeys in an Event Procedure

  • SendKeys statement
  • You could add the following to your Worksheet BeforeDoubleClick event code.

The Code

 With Application
     .ScreenUpdating = False
     .SendKeys "{ENTER}{UP}"
     .ScreenUpdating = True
 End With

推荐阅读