大家好,对VBA常用代码:使用ADODB功能,在不打开其他Excel的情况下获取所需的清单、数据感兴趣的小伙伴,下面一起跟随三零脚本的小编来看看VBA常用代码:使用ADODB功能,在不打开其他Excel的情况下获取所需的清单、数据的例子吧。
'来自:三零脚本(www.q3060.com)
Dim conn as New ADODB.Connection
'ADODB可以通过录制excel里的“数据”—“现有连接”来查找后台数据的方式来录制代码,但注意删减录制结果。
conn.open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=\\255.255.1.1\后台数据\数据表.xlsx; Extended Properties=""excel 12.0; HDR=YES"""
'\\255.255.1.1\后台数据\数据表.xlsx 表示在IP为255.255.1.1的服务器上查找“后台数据”文件夹中的“数据表”。若只为自用,则IP可相应改为C盘或D盘。 此功能极力推荐部门共用,由一人按一定周期更新后台文件,其他人使用此宏工具快速获取所需清单、所需查询的信息。
Range("A2").CopyFromRecordset conn.Execute("select 部门,姓名,年龄,性别 from [sheet1$]" where 工作经验>'5' and 在职状态=‘在职’ )
'指从后台Excel的Sheet1中获取工作经验大于5年、还在职的人员信息,所需要的信息为该人员所属的部门,姓名,年龄,性别。获取的清单粘贴在点击宏之前的活动工作表的A2为首的单元格内。此功能可以拓展为共享文件夹放置所有常用数据、信息,宏开发人员为各类匹配关系各写1个宏,这样部门同事可以一起使用宏来快速匹配想获取的信息。如:
Dim conn as New ADODB.Connection
conn.open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=\\255.255.1.1\后台数据\数据表.xlsx; Extended Properties=""excel 12.0; HDR=YES"""
Dim Startrow,Lastrow,Newcolumn,Startcolumn,i,j,k as Integer
Startrow=Selection.Row '确定要查询的信息开始的行数
Startcolumn=Selection.Column '确定要查询的信息所在的列数
Lastrow=Cell(65536,Startcolumn).End(xlUp).Row '确定要查询的信息结束的行数
Newcolumn=Startcolumn+1 '查询结果准备返回在待查询信息的下一列
Selection.Offset(0,1).EntireColumn.Insert shift:=xlToRight, CopyOrigin:=xlFormatFromRightOrAbove '在查询的信息后插入1列,用于放置查询回来的信息
Dim info as string
Dim arr 'arr 为数组,本段代码将把后台的表格全复制下来,存到arr中,匹配信息时只要从arr里抓数据即可,避免每个单元格查询都要进后台数据查一遍造成的低效。使用arr能提升几十倍的运行速度
arr=conn.Excute(select * from [sheet1$]) '将后台sheet1的信息全部复制到arr中
j=UBound(arr,2) '由于我们不知道后台数据表有多少行,使用此句代码即可将行数复制给j
For i=Startrow to Lastrow '准备从第1个待查询的单元格查到最后1个
info=Cells(i,Starcolumn) '将待查询值赋值给info
For K= 0 to j
if arr(2,k)=info Then '指数组里的第3列中是否有和info相等的值,如果有的话
Cells(i,Newcolumn)=arr(3,k) '则在所查询的单元格的下一列填入数组里对应的第4列的值(数组从0开始计数,所以3为第4列。第X列为所需查找的信息由开发者根据实际自己调整)
End if
Next
Next
conn.close
以上代码可以适配任意信息查询功能