VBA在剪贴板Clipboard中写入文本
【分享成果,随喜正能量】深信高禅知此意,闲行闲坐任荣枯。那些痛,一如料峭春风吹酒醒,回首之时,也无风雨也无晴。风雨中穿行,走向宽和。。
《VBA信息获取与处理》教程(10178984)是我推出第六套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。这部教程给大家讲解的内容有:跨应用程序信息获得、随机信息的利用、电子邮件的发送、VBA互联网数据抓取、VBA延时操作,剪贴板应用、Split函数扩展、工作表信息与其他应用交互,FSO对象的利用、工作表及文件夹信息的获取、图形信息的获取以及定制工作表信息函数等等内容。程序文件通过32位和64位两种OFFICE系统测试。是非常抽象的,更具研究的价值。
教程共两册,八十四讲。今日的内容是”专题十二 VBA中剪贴板(Clipboard)的应用”:VBA在剪贴板Clipboard中写入文本
第二节 剪贴板Clipboard的文本简单操作
在上一讲我们讲了一些关于剪贴板的基本知识点,从这讲开始,我们讲解剪贴板的一些操作,先从最简单的文本操作开始。
1 在剪贴板Clipboard中写入文本的操作
首先,我们看一个最简单的剪贴板操作例子:如何将文本放入剪贴板中。将文本数据放入剪贴板需要两个步骤:第一步是将文本放在DataObject变量中,然后将DataObject文本放在剪贴板中。例如,下面的代码将字符串“VBA代码解决方案”放入Windows剪贴板。
Dim DataObj As New MSForms.DataObject
Dim S As String
S = "VBA代码解决方案"
DataObj.SetText S
DataObj.PutInClipboard
这处代码和 006工作表.XLSM 的代码是一致的,是最简单的没有格式的文本操作。
使用SetText方法将文本写入剪贴板。
① SetText方法可接受包含TextDataFormat类型的格式参数。下面的代码可将字符串“This is a test string”以 RTF 文本格式写入剪贴板。
Clipboard.SetText("This is a test string.", System.Windows.Forms.TextDataFormat.Rtf)
② 使用SetData方法将数据写入剪贴板。此示例以自定义格式specialFormat向剪贴板写入DataObjectdataChunk。
Clipboard.SetData("specialFormat", dataChunk)
③ 使用SetAudio方法将音频数据写入剪贴板。此示例将创建字节数组musicReader,向其中读取文件 cool.wav,然后将其写入剪贴板。
Dim musicReader = My.Computer.FileSystem.ReadAllBytes("cool.wav")
Clipboard.SetAudio(musicReader)
注意:由于其他用户可访问剪贴板,不要将剪贴板用于存储密码或机密数据等敏感信息。
2 从剪贴板Clipboard中实现检索并提取文本
使用DataObject的PutInClipboard方法将文本放入剪贴板后,可以在应用程序中使用标准粘贴操作粘贴该文本,也可以将文本检索到字符串类型变量中。从DataObject中获取文本需要几个步骤:第一步是指示DataObject从剪贴板获取文本。第二步是将DataObject中的文本放入String变量中。例如:
Dim DataObj As New MSForms.DataObject
Dim S As String
DataObj.GetFromClipboard
S = DataObj.GetText
Debug.Print S
3 实现从剪贴板Clipboard中检索文本的前期绑定代码实现
为了实现上述第一和第二部分的代码,我们给出最初的代码:
Sub mynz()
Dim DataObj As New MSForms.DataObject
Dim S As String
S = " VBA代码解决方案"
DataObj.SetText S
DataObj.PutInClipboard
DataObj.GetFromClipboard
UU = DataObj.GetText
Debug.Print UU
End Sub
代码截图:
代码的讲解:
1)Dim DataObj As New MSForms.DataObject建立一个DataObject的对象
2)S = " VBA代码解决方案"给出要操作的字符串
3) DataObj.SetText S
DataObj.PutInClipboard
将S的内容写入剪贴板。
4)DataObj.GetFromClipboard读取剪贴板内容
5)UU = DataObj.GetText
Debug.Print UU
取得文本内容并在即时窗口打印
上述过程从理论上讲没有任何问题,好了我们运行一下看看结果:
如下图,这是为什么呢?就是因为我们没有建立前期的引用。在上一讲中我们讲过要建立
Forms 2.0 Object Library的引用,那么如何建立这个应用呢?很简单,我们只需插入一个窗体然后删除即可。如下:
这个时候我们打开引用的库:
即使删除了窗体后这个引用也是存在的:
我们再次运行程序:
这时程序正常运行。
4 实现从剪贴板Clipboard中检索文本的后期绑定代码实现
在上部分的讲解中,我们实现了前期绑定的代码,如果我们不想费事不想做前期的绑定,该如何写代码呢?我先给出下面的代码:
Sub mynzA()
Dim RR
Set RR = CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
S = " VBA代码解决方案"
RR.SetText S
RR.PutInClipboard
RR.GetFromClipboard
UU = RR.GetText
Debug.Print UU
End Sub
代码截图:
代码讲解:这种实现是一种后期绑定的方案,这种方案的讲解我在这套教程的上册中有讲解,这里不再多讲。
我们先看一下运行的结果:
在后期绑定中,是没有上述form2库引用的,我们看看后期绑定的引用库:
好了,这讲就讲到这里,我们实现了利用剪贴板的前期和后期绑定的两种方案。
本节知识点回向:
- 实现剪贴板操作的前期绑定如何实现?
② 实现剪贴板操作的前期绑定引用的是什么库?
③ 实现剪贴板操作的后期绑定如何实现?
本讲代码参考文件:012工作表.xlsm
我20多年的VBA实践经验,全部浓缩在下面的各个教程中,教程学习顺序:
【分享成果,随喜正能量】生活就是用一两分钟的甜,冲淡那七八分钟的苦。