大家好,我们今日讲解”VBA信息获取与处理”教程中第十二个专题”VBA中剪贴板(Clipboard)的应用”的第五节”提取剪贴板中所有数据格式到工作表”,这个专题是非常有用的知识点,希望大家能掌握利用。
第五节 提取剪贴板中所有数据格式到工作表
在上面的几节中主要讲了理论上的一些必要的知识点,这讲就利用这些知识点完成一些必要的操作,讲解如何把剪贴板上的数据格式分析提取到工作表之中。
1 提取剪贴板所有数据格式的思路分析
为了实现提取剪贴板所有数据格式,我们要首先利用的函数是EnumClipBoardFormats函数,同时为了把剪贴板相关的函数或许都可能利用到,我将把一些必要的函数都给罗列出来,分别是:OpenClipboard、GetClipboardData、CloseClipboard、CopyMemory(GlobalLock、GlobalUnlock、GlobalSize)、GetClipboardFormatName。同时还要给出标准的各个数据格式的名称。
在实现的过程中我将利用EnumClipboardFormats()来定位每个数据格式的代码和名称,将反馈回的数据写入工作表中,其中名称将利用一个GetFormatName自定义的函数获得。这个函数中将利用一个case语句完成。
2 提取剪贴板所有数据格式的代码
下面我给出代码部分:
Public Declare Function OpenClipboard Lib “user32” (ByValhwnd As Long) As Long
Public Declare Function CloseClipboard Lib “user32” () As Long
Public Declare Function EnumClipboardFormats Lib “user32” (ByValwFormat As Long) As Long
Public Declare Function GetClipboardFormatName Lib “user32” Alias “GetClipboardFormatNameA” (ByValwFormat As Long, ByVallpString As String, ByValnMaxCount As Long) As Long
Public Const CF_TEXT = 1
Public Const CF_BITMAP = 2
Public Const CF_METAFILEPICT = 3
Public Const CF_SYLK = 4
Public Const CF_DIF = 5
Public Const CF_TIFF = 6
Public Const CF_OEMTEXT = 7
Public Const CF_DIB = 8
Public Const CF_PALETTE = 9
Public Const CF_PENDATA = 10
Public Const CF_RIFF = 11
Public Const CF_WAVE = 12
Public Const CF_UNICODETEXT = 13
Public Const CF_ENHMETAFILE = 14
Public Const CF_HDROP = 15
Public Const CF_LOCALE = 16
Public Const CF_MAX = 17
Dim lFormat As Long
Sub mynzC()
Sheets(“SHEET2”).Select
Cells().ClearContents
Sheets(“SHEET4”).Select
Cells().Copy
Sheets(“SHEET2”).Select
If OpenClipboard(ByVal 0&) Then
lFormat = EnumClipboardFormats(0)
If lFormat<> 0 Then
i = 1
Cells(i, 1) = “格式代码”
Cells(i, 2) = “格式名称”
i = i + 1
Do While lFormat<> 0
Cells(i, 1) = lFormat
Cells(i, 2) = GetFormatName(lFormat)
i = i + 1
lFormat = EnumClipboardFormats(lFormat)
Loop
End If
CloseClipboard
End If
End Sub
Public Function GetFormatName(lFormat As Long) As String
Select Case lFormat
Case 1
GetFormatName = “CF_Text”
Case 2
GetFormatName = “CF_Bitmap”
Case 3
GetFormatName = “CF_MetaFilePict”
Case 4
GetFormatName = “CF_SYLK”
Case 5
GetFormatName = “CF_Dif”
Case 6
GetFormatName = “CF_Tiff”
Case 7
GetFormatName = “CF_OEMText”
Case 8
GetFormatName = “CF_DIB”
Case 9
GetFormatName = “CF_Pallette”
Case 10
GetFormatName = “CF_PenData”
Case 11
GetFormatName = “CF_Riff”
Case 12
GetFormatName = “CF_Wave”
Case 13
GetFormatName = “CF_UnicodeText”
Case 14
GetFormatName = “CF_EnhMetaFile”
Case 15
GetFormatName = “CF_HDrop”
Case 16
GetFormatName = “CF_Locale”
Case 17
GetFormatName = “CF_Max”
Case Else:
‘以下是非标准部分
Dim sBuffer As String
sBuffer = String(100, Chr(0))
GetClipboardFormatNamelFormat, sBuffer, 100
GetFormatName = Trim(sBuffer)
End Select
End Function
Sub mynzD()
CloseClipboard
End Sub
代码的截图:
代码的讲解:代码的整个过程是比较简单的,就不再过多地讲解。需要指出的是
Sub mynzD()
CloseClipboard
End Sub
这处的代码是为了测试方便写的,不然在测试的过程中总会出现”内存不足”的提示,所以我要及时关闭剪贴板。
3 提取剪贴板所有数据格式的实现结果
下面是第四个工作表的界面:
复制后,剪贴板的数据格式为:
好了,这讲的讲解就到这里,内容有些枯燥,但掌握后我们关于VBA的操作以及计算机的理论将有所提高。
本节知识点回向:
① 实现提取剪贴板数据格式操作的API函数有哪些?
② 在程序调试过程中,出现内存不足,如何解决?
本讲代码参考文件:012工作表.xlsm
积木编程的思路内涵:
在我的系列书籍中一直在强调”搭积木”的编程思路,这也是学习利用VBA的主要方法,特别是职场人员,更是要采用这种方案。其主要的内涵:
1 代码不要自己全部的录入。你要做的是把积木放在合适的位置然后去修正代码,一定要拷贝,从你的积木库中去拷贝,然后修正代码,把时间利用到高效的思考上。
2 建立自己的”积木库”。平时在学习过程中,把自己认为有用的代码放在一起,多积累,在用到的时候,可以随时拿来。你的积木库资料越多,你做程序的思路就会越广。
VBA的应用界定及学习教程:
VBA是利用Office实现个人小型办公自动化的有效手段(工具)。这是我对VBA的应用界定。在取代OFFICE新的办公软件没有到来之前,谁能在数据处理方面做到极致,谁就是王者。其中登峰至极的技能非VBA莫属!
我记得20年前自己初学VBA时,那时的资料甚少,只能看源码自己琢磨,真的很难。20年过去了,为了不让学习VBA的朋友重复我之前的经历,我根据自己多年VBA实际利用经验,推出了六部VBA专门教程:
第一套:VBA代码解决方案 是VBA中各个知识点的讲解,教程共147讲,覆盖绝大多数的VBA知识点,提供的程序文件更是一座不可多得的代码宝库,是初学及中级人员必备教程;目前这套教程提供的版本是修订第二版,程序文件通过32位和64位两种OFFICE系统测试。
第二套:VBA数据库解决方案 数据库是数据处理的专业利器,教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法和实例操作,适合中级人员的学习。目前这套教程提供的是修订第一版教程,程序文件通过32位和64位两种OFFICE系统测试。
第三套:VBA数组与字典解决方案 数组和字典是VBA的精华,字典是VBA代码水平提高的有效手段,值得深入的学习,是初级及中级人员代码精进的手段。目前这套教程提供的版本是修订第一版,程序文件通过32位和64位两种OFFICE系统测试。
第四套:VBA代码解决方案之视频 是专门面向初学者的视频讲解,可以快速入门,更快的掌握这门技能。这套教程是第一套教程(修订一版)的视频讲解,听元音更易接受。这套教程还会额外提供通过32位和64位两种OFFICE系统测试的程序文件。
第五套:VBA中类的解读和利用 这是一部高级教程,讲解类的虚无与肉身的度化,类的利用虽然较少,但仔细的学习可以促进自己VBA理论的提高。这套教程的领会主要是读者的领悟了,领悟一种佛学的哲理。
第六套教程:《VBA信息获取与处理》,这是一部高级教程,涉及范围更广,实用性更强,面向中高级人员。教程共二十个专题,包括:跨应用程序信息获得、随机信息的利用、电子邮件的发送、VBA互联 数据抓取、VBA延时操作,剪切板应用、Split函数扩展、工作表信息与其他应用交互,FSO对象的利用、工作表及文件夹信息的获取、图形信息的获取以及定制工作表信息函数等等内容。
上述教程的学习顺序:1→3→2→6→5或者4→3→2→6→5。提供的程序文件更是一座巨大的代码库,供读者使用,如需要可以WeChat: NZ9668
学习VBA是个过程,也需要经历一种枯燥的感觉
“众鸟高飞尽,孤云独去闲。相看两不厌,只有敬亭山”。学习的过程也是修心的过程,修一个平静的心。在代码的世界中,心平静了,心情好了,身体自然而然就好。心静则正,内心里没有那么多邪知邪见,也就没有那么多妄想。利人就是利己。我的教程助力给正在努力的朋友。
“水善利万物而不争”,绵绵密密,微则无声,巨则汹涌。学习亦如此,知道什么是自己所需要的,不要蜷缩在一小块自认为天堂的世界里,待到暮年时再去做自欺欺人的言论。要努力提高自己,用一颗充满生机的心灵,把握现在,这才是进取。越是有意义的事情,困难会越多。愿力决定始终,智慧决定成败。不管遇到什么,都是风景。看淡纷争,看轻得失。学习时微而无声,利用时则巨则汹涌。”路漫漫其修远兮,吾将上下而求索”
每一分收获都是成长的记录,怎无凭,正是这种执着,成就了朝霞的灿烂。最后将一阙词送给致力于VBA学习的朋友,让大家感受一下学习过程的枯燥与执着:
浮云掠过,暗语无声,
唯有清风,惊了梦中啼莺。
望星,疏移北斗,
奈将往事雁同行。
阡陌人,昏灯明暗,
忍顾长亭。
多少VBA人,
暗夜中,悄声寻梦,盼却天明。
怎无凭!
分享我多年工作实际经验的成果,随喜这些有用的东西,给确实需要利用VBA的同路人。回向学习利用VBA的历历往事,不胜感慨,谨以这些文字以纪念,
分享成果,随喜正能量
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!