Excel-VBA问题,怎样操作剪切板,答完再加分。

首先说:诚信帮助我的才进来,请你亲自在Excel2003里调试,必厚报。

试了一个早上了,查了很多资料,实在搞到我烦了,,,,
Excel里面的VBA,怎样才能得到剪切板里面的文字呢???
是vba,不是vb!!!
网上很多用vb的方法在vba里行不通。
实在无奈,请尊重我的提问,谢谢,
我需要把剪切板中文字数据,放到一个字符串变量里面去。

VBA获取剪切板内容是那么困难的吗,

用VBA操作Office剪贴板
这两天对用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

参考资料:http://club.excelhome.net/thread-386553-1-1.html

温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-05-25
经测试,确定可行,方法如下:

1、先得添加一个 Form,只要添加一个空的就好了,因为后面所用到的 DataObject 对象,需要Form对象;
在VBA编辑器中点菜单:插入 -> 用户窗体,即可;

2、在你的模块中放入如下示例代码:

Sub Test()
Dim MyData As DataObject, MyStr As String
Set MyData = New DataObject
MyData.GetFromClipboard '获得剪切板内容

MyStr = MyData.GetText '赋值给变量

MsgBox MyStr
End Sub

注意,运行前 从任何窗口选中一些文字 Copy 一下,再运行这个 Test 宏。

有疑问,请Hi我或给我发BaiDu消息。
GoodLuck!本回答被提问者采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网