|
这两天对用VBA操作Office剪贴板的问题产生了兴趣。VBA帮助文件对此好像并无多少提及,在网上进行过一系列的搜索,基本上是用API来操作的,只因水平所限,看不明白,便试着用别的方法处理。经反复尝试,总算有些眉目,主要是用SendKeys语句处理的,经多次测试(Word2003),似可行。这样的操作可能实用意义不大,只是作为练习,也算有点收获。
以下为相关代码,欢迎测试,并提出修改意见。
Sub test1()
'检查Office剪贴板现有粘贴项目
Dim a As String
With CommandBars("Task Pane")
WordBasic.editofficeclipboard '从任务窗格调出剪贴板
With .Controls(1)
a = .Caption '提取Office剪贴板控件的题注文本
If a Like "24*" Then
MsgBox "Office剪贴板粘贴项目已满24个!"
ElseIf a Like "#*" Then
MsgBox "Office剪贴板现有" & Split(a, "/")(0) & "个粘贴项目。"
Else
MsgBox "Office剪贴板是空的!"
End If
End With
End With
End Sub
Sub test2()
'操作Office剪贴板(全部粘贴或全部清空,以及对指定粘贴项目的粘贴或删除操作)
Dim b As Byte, c As String
Application.ScreenUpdating = False
With CommandBars("Task Pane")
WordBasic.editofficeclipboard
With .Controls(1)
b = Val(Split(.Caption, "/")(0)) '取得Office剪贴板现有粘贴项目数
If b > 0 Then
c = InputBox("Office剪贴板现有" & b & "个粘贴项目。" & vbCrLf & vbCrLf _
& "请输入要粘贴的项目序号,直接按回车粘贴全部,输入0全部清空", , "全部")
If c = "全部" Then
.SetFocus '焦点移到任务窗格(剪贴板)
SendKeys "{LEFT 3}", False '定位到第一个粘贴项(最上面的项,即最后复制的项)
SendKeys "{TAB 2}", True '定位到“全部粘贴”
SendKeys "{ }", False '执行全部粘贴
ElseIf Val(c) > 0 And Val(c) <= b Then
.SetFocus
SendKeys "{LEFT 3}", False
SendKeys "{DOWN " & Val(c) - 1 & "}", False '定位到指定的粘贴项目
SendKeys "%{DOWN 2}", False '在指定的粘贴项目下拉菜单选择“粘贴”项(前面数字改为3即“删除”项)
SendKeys "{ENTER}", False '执行粘贴(前面数字为3时执行删除)
ElseIf Val(c) = 0 Then
.SetFocus
SendKeys "{LEFT 3}", False
SendKeys "{TAB 3}", True '焦点定位到“全部清空”
SendKeys "{ }", False '执行全部清空
End If
Else
MsgBox "Office剪贴板是空的!"
End If
End With
End With
SendKeys "{ESC 2}", False '焦点从任务窗格返回文档
Application.ScreenUpdating = True
End Sub
[ 本帖最后由 sylun 于 2009-1-2 16:49 编辑 ] |
|