VBA在剪贴板Clipboard中写入文本

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库引用的,我们看看后期绑定的引用库:

好了,这讲就讲到这里,我们实现了利用剪贴板的前期和后期绑定的两种方案。

本节知识点回向:

  1. 实现剪贴板操作的前期绑定如何实现?

② 实现剪贴板操作的前期绑定引用的是什么库?

③ 实现剪贴板操作的后期绑定如何实现?

本讲代码参考文件:012工作表.xlsm

我20多年的VBA实践经验,全部浓缩在下面的各个教程中,教程学习顺序:

【分享成果,随喜正能量】生活就是用一两分钟的甜,冲淡那七八分钟的苦。

发布于 2022-10-01 06:46