【问题标题】:Inconsistent Results with PutInClipboard MethodPutInClipboard 方法的结果不一致
【发布时间】:2021-01-26 02:17:29
【问题描述】:

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

以下代码可以根据需要运行:

 **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**

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

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

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

有什么想法吗?

【问题讨论】:

  • CANCEL = True 应该可以解决问题。但是,当然,这一行必须是最后一行。你如何测试和推断剪贴板是空的?它完美地工作......

标签: excel vba clipboard


【解决方案1】:

在事件过程中使用 SendKeys

  • SendKeys statement
  • 您可以将以下内容添加到您的 Worksheet BeforeDoubleClick event 代码中。

守则

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

【讨论】:

    猜你喜欢
    • 2016-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-21
    • 2021-03-27
    • 2021-07-03
    • 1970-01-01
    相关资源
    最近更新 更多