ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享]用VBA清空Wordl剪贴板

[复制链接]

TA的精华主题

TA的得分主题

发表于 2008-3-27 10:43 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:Windows API应用

由于在Office 2003版中,VBA不直接提供操作Office剪贴板的方法,因此只能借助API函数来完成。

主要思路:
①:先载入剪贴板窗口
②:然后找到剪贴板的窗口句柄
③:向剪贴板窗口发送鼠标按下和弹起的消息,模拟按下“全部清空”

这儿,以Word为例,其它Office程序(如Excel、PowerPoint)可以如法炮制。


'*************************************************************************
'作者:Joe Was
'功能:清空Office剪贴板
'整理:
ExcelHome论坛
'测试环境:Word 2003
'相关链接:
http://www.mrexcel.com/forum/showthread.php?t=167292
'*************************************************************************

'声明API函数
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
'定义鼠标消息
Private Const WM_LBUTTONDOWN As Long = &H201&
Private Const WM_LBUTTONUP As Long = &H202&

Sub ClearClipBoard()

    Dim hWord, hClipBoard, hWindow As Long 'Word主窗口、剪贴板、临时窗口句柄
    Dim nXY As Long '剪贴板“全部清空”按钮的坐标
    Dim strCaption As String    'Word主窗口的标题

    Application.ShowClipboard  '打开剪贴板
    CommandBars("Task Pane").Visible = False '关闭任务窗格
   
'先获取Word主窗口的标题
    If Documents.Count = 0 Then   '没有文档打开
        strCaption = "Microsoft Word"
    Else
        strCaption = ActiveWindow.Caption & " - Microsoft Word"
    End If
   
    hWord = FindWindowEx(0&, 0&, "OpusApp", strCaption)   '获取Word主窗口句柄
    hWindow = FindWindowEx(hWord, 0&, "MsoWorkPane", "MsoWorkPane") '获取任务窗格窗口句柄
    hClipBoard = FindWindowEx(hWindow, 0&, "bosa_sdm_Microsoft Office Word 11.0", "Collect and Paste 2.0") '获取剪贴板窗口句柄
   
    If hClipBoard = 0 Then  '未知原因,没有找到剪贴板的窗口句柄
        MsgBox "剪贴板清空失败!"
        Exit Sub
    End If
   
    nXY = 100 + 10 * 65536   '(x,y)=(100,10),取(92,6)~(168,27)均可
   
    Call PostMessage(hClipBoard, WM_LBUTTONDOWN, 0&, nXY) '模拟鼠标按下
    Call PostMessage(hClipBoard, WM_LBUTTONUP, 0&, nXY) '模拟鼠标弹起
   
End Sub

[此贴子已经被作者于2008-3-27 11:24:25编辑过]

TA的精华主题

TA的得分主题

发表于 2008-3-28 18:58 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

非常感谢Excel.Home!

收藏!

TA的精华主题

TA的得分主题

发表于 2008-3-29 09:05 | 显示全部楼层
昨天也遇到剪切板的问题了

新建一个窗体,然后对该窗体随便添加个按钮啥的,编辑一下代码
写 dim MyData as New DataObject

然后回到VBA中就有这个对象了,然后就可以把窗体删了

大概是把哪个库给添加进去了吧,反正就是可以使用了。。。。。。。。

不知我说明白没

TA的精华主题

TA的得分主题

发表于 2008-3-29 10:19 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

经过以上步骤后,

文档排版的速度应该提高60%以上。

目前有相关软件(见一楼附件),但是太贵了2800元。

给个地址吧。http://shareware.skycn.com/soft/13615.htm

文件好大,论坛限制上传数量。

TA的精华主题

TA的得分主题

发表于 2008-8-31 21:30 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
    Dim MyData As DataObject
    Set MyData = New DataObject
    MyData.SetText ""

TA的精华主题

TA的得分主题

发表于 2008-9-1 10:55 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
感谢楼主,非常实用
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-3-29 05:46 , Processed in 0.046033 second(s), 9 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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