ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 2685|回复: 10

[分享] Application.CutCopyMode = False 的作用

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-2-22 22:25 | 显示全部楼层 |阅读模式
本帖最后由 makelot 于 2024-2-22 22:26 编辑

Application.CutCopyMode = False 的作用是清空剪切板,取消剪切或复制模式,并清除Excel待剪切或复制区域的动画边框 (Cancels Cut or Copy mode and removes the moving border)。

Application.CutCopyMode = False

Application.CutCopyMode = False

但这条语句仅能清空ExcelVBA自身的剪贴板。Excel与其他程序如Word交互时使用的是Windows剪贴板,使用VBA清空Windows剪贴板需要调用API函数,代码如下:
  1. Declare PtrSafe Function OpenClipboard Lib "user32" (ByVal hwnd As LongPtr) As LongPtr
  2. Declare PtrSafe Function EmptyClipboard Lib "user32" () As LongPtr
  3. Declare PtrSafe Function CloseClipboard Lib "user32" () As LongPtr
  4. Sub ClearClipboard()
  5.     OpenClipboard 0&
  6.     EmptyClipboard
  7.     CloseClipboard
  8. End Sub
复制代码


评分

3

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-2-22 22:27 | 显示全部楼层
注意程序清空Windows剪贴板的同时,也会清空ExceVBAl自身的剪贴板。
实际工作中,我们经常使用VBA循环在Excel内部拷贝粘贴大量数据,有时也从Excel向Word或PPT拷贝大量数据。
如果是后者,系统会重复使用Windows剪贴板,经常报错,导致工作中断,
Run-time error '4605': This method or property is not available because the Clipboard is empty or not valid.
出现这种情况,不少人建议在复制粘贴过程中加上 Wait 或 DoEvents 语句,以便让操作系统等待剪贴板的响应。可这样做实际效果并不好,往往还是错误频发。
比较理想的解决办法,就是在复制粘贴之前清空Windows剪贴板。反正我测试多次,程序运行时再也没有出现过4605错误。
希望这个帖子能为大家提供一点有用的信息。

TA的精华主题

TA的得分主题

发表于 2024-2-23 07:17 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-2-23 09:41 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-2-23 12:55 | 显示全部楼层
Application.CutCopyMode = False  已经失效了

API 清空 有时候会不灵  (会遇到的)

所以最好的 方案就是 用 htmlfile 清空
12 楼
https://club.excelhome.net/forum ... 06&pid=11276369

  1. '''清空 剪切板 就一行代码
  2. CreateObject("htmlfile").parentWindow.ClipboardData.clearData("Text")
复制代码


评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-2-23 22:41 | 显示全部楼层
perfect131 发表于 2024-2-23 12:55
Application.CutCopyMode = False  已经失效了

API 清空 有时候会不灵  (会遇到的)

多谢!这个办法好,但不知如果剪贴板里的内容是图片该用什么参数?刚才测试了一下,貌似"Text"参数也能把剪贴板里的图片清空,不过如果"Text"参数适用于清空一切数据类型,那这个参数就没有必要了。

TA的精华主题

TA的得分主题

发表于 2024-2-23 23:26 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
感谢分享,有用

TA的精华主题

TA的得分主题

发表于 2024-2-24 08:48 | 显示全部楼层
感谢分享,前几天还用Application.CutCopyMode = False这条语句呢,感觉不好用,原来是这个原因

TA的精华主题

TA的得分主题

发表于 2024-10-1 20:29 | 显示全部楼层
makelot 发表于 2024-2-22 22:27
注意程序清空Windows剪贴板的同时,也会清空ExceVBAl自身的剪贴板。
实际工作中,我们经常使用VBA循环在Ex ...

请问那怎样恢复到复制粘贴时就会有会动的那个虚框呢?我在网上看很多人都说用Application.CutCopyMode=True来恢复,可是操作下来不行啊

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-10-2 18:04 | 显示全部楼层
Tony412 发表于 2024-10-1 20:29
请问那怎样恢复到复制粘贴时就会有会动的那个虚框呢?我在网上看很多人都说用Application.CutCopyMode=Tr ...

应该直接不用 Application.CutCopyMode=False 这一句就可以了
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-19 05:43 , Processed in 0.054092 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表