添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
  • 语法:Collection.Add (item,key,before,after)
    • item:添加到集合的项
    • key:键,唯一性的,add方法如果重复报错,注意的是key必须是 文本
    • before:插入位置,在哪个位置前面,可以是索引(数字1到Collection.count之间的数字),也可以是键
    • after:插入位置,在哪个位置后面,可以是索引(数字1到Collection.count之间的数字),也可以是键
  • 语法:Collection.Count
    • 返回 Long(长整型),其中包含集合中的对象数。 只读
Sub test()
    Dim c As New Collection
    '1是项,s是键,注意的是键是不可以重复的
    c.Add 1, "s"
    c.Add 2, "x"
    Debug.Print c.Count
End Sub

上面结果:显示2,集合的数量是从1开始计算的

读取集合特定元素内容

  • Collection.item方法
    • 里面可以写索引(1到Collection.Count之间的数字),或者键
Sub test()
    Dim c As New Collection
    c.Add 1, "s"
    c.Add 2, "x"
    Debug.Print "键的item方法:" & c.Item("s")
    Debug.Print "键的直接方法:" & c("s")
    Debug.Print "索引的item方法:" & c.Item(1)
    Debug.Print "索引的直接方法:" & c(1)
End Sub
键的item方法:1
键的直接方法:1
索引的item方法:1
索引的直接方法:1

集合删除办法

  • 对象中删除成员:Collection.remove
  • 因为集合中没办全部删除,只能一个一个删除,所以,删除的时候注意,如果要删除多个,要倒序删除
Sub test()
    Dim c As New Collection, i As Long
    c.Add 1, "s"
    c.Add 2, "x"
    c.Add 3, "z"
    c.Add 4, "y"
    c.Add 5, "q"
    c.Add 6, "h"
    For i = c.Count To 1 Step -1
        c.Remove (i)
End Sub

虽然没有整个删除的办法,但是这里可以用一个取巧的办法
Set c = Nothing或者Set c = New Collection,直接清空了重新玩

Sub test()
    Dim c As New Collection, i As Long
    c.Add 1, "s"
    c.Add 2, "x"
    c.Add 3, "z"
    c.Add 4, "y"
    c.Add 5, "q"
    c.Add 6, "h"
    'Set c = Nothing  '清空了集合,重新开始了
    set c = new Collection
    c.Add 1, "s"
End Sub

学习来源:Excelhome论坛裙子老师的一个集合帖子,感谢大佬无私分享

补充集合循环问题

特别注意: 一定要用for each方法循环
用下面代码简单测试你就会发现用for i下标的方式循环数据比较多的时候会非常慢

Sub test() Dim i&, r&, j&, y&, n&, m&, x, arr, brr Dim c As New Collection For i = 1 To 100000 c.Add i Dim t t = Timer For i = 1 To c.Count x = c(i) Debug.Print "for i方法遍历", Timer - t t = Timer For Each x In c arr = x Debug.Print "for each方法遍历", Timer - t End Sub
for i方法遍历     25.46484 
for each方法遍历    0 

谈下集合的实际应用

1)大数据当字典用

因为微软的问题,vba的字典超过10万key就会比较慢了,这个时候我们用集合的2参数当key来代替可以解决这个问题
经过测试
在这里插入图片描述
如果数据量达到40万以上key,集合方法速度完全可以接受,但是40万一下还是字典写入稍微快一点

2)数据结构的转换

比如一个数据我们列和行都不确定
这时候,我们就可以用集合来装这个结果
集合的每个元素就是一行数据,最后通过for each循环拿出对应的结果,可以大大避免我们使用一个大数组来装,或者不断是用redim 方法重新定义数组大小
同一样的,很方便一列数据转多列数据等等的数据结构转换问题

  • 比如集合套集合,转2维数组
  • 集合套一维数组,转2维数组
  • 集合套2维数组,转2维数组,比如多表合并,把结构数组,放到集合里最后一转非常方便
  • 集合套自定义类,快捷转换结构等等
VBA集合Collection创建集合集合常用属性和方法添加集合大小读取集合特定元素内容集合删除办法创建集合Dim c As New Collection集合常用属性和方法添加语法:Collection.Add (item,key,before,after)item:添加到集合的项key:键,唯一性的,add方法如果重复报错before:插入位置,在哪个位置前面,可以是索引(...
Excel VBA 中使用字典总结 collection集合)对象 VBA中有一个集合对象(collection),Collection 对象是一组可称为“单元”的有序项目的集合,可以理解为可以随意增减数量的一维数组。 Collection对象提供了一种方便的方法,可以将相关的一组项目当作单个对象进行引用。集合的成员不必共享相同的数据类型。 collection 成员 object.count 属性:long类型,返回collection对象中元素的个数 object.add(item,key
1 Sub test() 2 ’ Dim s As Collection '定义s变量为集合对象 3 ’ Set s = New Collection '初始化集合对象s (否则无法使用) 5 Dim s As New Collection '推荐这句代码,直接初始化,可以不用再Set了 7 '集合s中添加元素的方法 8 For i = 1 To 10 9 s.Add i '对于集合s,用Add方法可以加入集合元素 10 '
4)items方法: 获取字典的所有值 5)item属性: 如果 key已存在,则修改其item值;如果不存在,则新增 6) add方法: 如果 key已存在,将报错;如果不存在,则新增 Sub t() Dim d As Dictionary '定义变量 Set d = New Dictionary '创建对象 '一、获取
Dictionary对象将替换Collection对象,并提供附加的语言从而使增加和删除记录的速度比以前提高三倍,虽然Visual Basic 6.0只有很少的新特点,但是具有某些功能强大的新的对象模型,其中之一就是Dictionary对象。 Dictionary对象是无处不在的Visual Basic Collection对象的新版本。它的介绍存在于VBScript 2.0,并通过Visu
'Output data to range rngOutput = worksheets("test").range("A1") log.readRsToExcel(rngOutput) log.CloseSQL
VBACollection集合对象为我们提供了数组之外的多数据变量操作方法。但是Collection对象仍然存在一定缺陷:即只能进行元素的读取、添加和删除,以及集合元素个数的读取,实际对集合的使用中,我们往往需要更多的操作,如对修改某元素的值、读取或修改某索引对应键值、读取某键值对应的索引号、清空集合一遍重新使用等。本程序通过构建高级集合类(AdvCollection),实现集合应具有的全部功能。 Add 方法:添加元素 语法:高级集合变量.add Element,[Key],[Befo...
VBA collection函数回传参考: https://social.msdn.microsoft.com/Forums/en-US/62bb4c2b-0494-43c3-bb00-be6b40686aa4/vba-function-22914203092223820659-collection?forum=232 **关于VBA集合的使用网上中文资料很少,搜来搜去都是转载的同一篇关于collection的介绍。 笔者在使用collection中发现,对于在函数function中定义了collectio
VBA(Visual Basic for Applications)是微软公司为Office套件开发的一种编程语言,可以实现自动化操作和一些重复性的计算过程。同时,PDF(Portable Document Format)文件是一种跨平台的电子文档格式。将VBA与PDF结合可以实现读取PDF文件中的数据或文本内容等目的。 实现VBA读取PDF文件大致需要以下步骤: 1. 导入Adobe Acrobat程序库。首先需要在VBA中引用Adobe Acrobat程序库,即在工具 -> 引用中选中Adobe Acrobat的版本。 2. 创建Acrobat对象。在代码中使用CreateObject函数创建一个Acrobat对象,这个对象是用来操作PDF文件的接口。 3. 打开PDF文件。使用Acrobat对象的Open函数打开PDF文件。可以指定文件路径和打开方式。 4. 提取PDF内容。使用Acrobat对象的ExtractText函数提取PDF文件中的文本内容。也可以使用其他函数提取PDF中的图片或其他格式的内容。 5. 关闭PDF文件。使用Acrobat对象的Close函数关闭已经打开的PDF文件。 需要注意的是,VBA读取PDF文件的时候需要保证Adobe Acrobat程序库已经正确安装,否则会出现错误。同时,PDF文件的格式也应该是符合标准的,非标准格式的PDF文件可能无法被读取。 总之,通过VBA读取PDF文件可以提高处理PDF文件的效率和准确度,非常适合需要大量处理PDF文件的工作场景。