delphi – 如何取消在Excel中剪切/复制模式

(Delphi XE6,Excel 2010/2013)

在为Excel编写插件时,我不得不从一张纸上复制数据并粘贴到另一张纸上。 复制和粘贴工作正常…但是,在过程结束时,我留下了“行军ant”,即select虚线,用于标识被复制的内容。

我已经尝试了几件事情….在看各种其他文章,它说,我可以做出另一个select,这将照顾这个问题。 假设我从表A中select/复制,粘贴到表B中。完成后,以编程方式更改回表单A,然后运行以下代码。

//StartingSheet.Cells(1, 1).Select; XLApp.Range['A1', 'A1'].Select; 

我的例程存在,把控制权交还给用户。 ant走了…但是,如果我切换到表B,然后回到表A,我可以看到单元格A1有一个实线,显示它有焦点,我最后的COPYselect将再次显示行军的ant。

在看文档时,有一个例程叫cutcopymode。 它不具有TRUE / FALSE值,只有xlCopy或xlPaste。

所以…

 XLApp.cutcopymode := false; 

给我一个错误。

我如何真正摆脱行军的ant?

谢谢

行军的ant指出目前在剪贴板中的细胞。 他们是一个视觉线索,帮助您预测粘贴时会发生什么。

你如何去除行军的ant? 简单地安排剪贴板不再包含这些单元格的信息。 所以,清空剪贴板就可以了。

然而,这一切都指向你以错误的方式解决了你的问题。 剪贴板由用户拥有,只能根据用户的直接请求进行修改。 由用户明确要求写入剪贴板。 如果您的加载项需要将数据从一个表单复制到另一个表单上,那么只需执行该操作,而无需修改剪贴板中的内容。 而当你这样做,你不会修改剪贴板,你不会看到行军的ant。

使用Range对象的Copy方法来执行此副本,而不修改剪贴板。 调用源范围上的方法,并传递表示目标范围的范围对象。

 sourceRange.Copy(destRange);