前言:
目前朋友们对“vb过程调用数组参数传递”可能比较讲究,姐妹们都想要分析一些“vb过程调用数组参数传递”的相关内容。那么小编同时在网络上汇集了一些对于“vb过程调用数组参数传递””的相关内容,希望姐妹们能喜欢,你们快快来了解一下吧!【分享成果,随喜正能量】 在该奋斗的岁月里,对得起每一寸光阴。于高山之巅,方见大河奔涌于群峰之上,更觉长风浩荡。殷殷之情俱系华夏,寸寸丹心皆为家国。最慢的步伐不是跬步,而是徘徊;最快的脚步不是冲刺,而是坚持。。
《VBA数据库解决方案》教程是我推出的第二套教程,目前已经是第一版修订了。这套教程定位于中级,是学完字典后的另一个专题讲解。数据库是数据处理的利器,教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法和实例操作,教程第一版的修订内容主要是完成所有程序文件的32位和64位OFFICE系统测试。
这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是:记录集数据存入数组
第四十二讲 把取得的记录集数据,记入数组
大家好,今日继续讲解《VBA数据库解决方案》,今日讲解第42讲内容,把记录集的数据,如何记入数组。这讲的内容涉及到数组在数据库中的应用,如果大家对数组还有不理解之处也可以参考拙著《工作表数组与VBA数组解决方案》,数组在EXCEL及其接口程序中的应用中有着不可替代的角色,利用好了,可以给自己的工作表处理和VBA数据处理带来很大的方便。
1 应用场景的具体分析
今日实例,在数据库中有如下的数据:
我要做的是打开这个数据库,然后把内容先存到一个数组中,最后在工作表中体现出来。
2 将数据记录存入数组的代码及代码解读
看代码:
Sub mynz_42() '第42将 将数据记录存入数组的方案
Dim cnADO, rsADO As Object, Fdsarr, Arr
Dim strPath, strTable, strSQL, strMsg As String
Set cnADO = CreateObject("ADODB.Connection")
Set rsADO = CreateObject("ADODB.Recordset")
strPath = ThisWorkbook.Path & "\mydata2.accdb"
strTable = "员工信息"
cnADO.Open "Provider=Microsoft.Ace.OLEDB.12.0;Data Source=" & strPath
'汇报给用户记录数
strSQL = "SELECT * FROM " & strTable
rsADO.Open strSQL, cnADO, 1, 3
Fdsarr = Array("员工编号", "姓名", "性别", "民族", "部门", "职务", "电话", "出生日期") '字段名
Arr = Application.Transpose(rsADO.GetRows(, 1, Fdsarr)) '记录存入数组
For x = 1 To UBound(Arr)
Cells(x + 1, 1).Resize(1, 8) = Application.Index(Arr, x, 0)
Next
rsADO.Close
'释放内存
cnADO.Close
Set rsADO = Nothing
Set cnADO = Nothing
End Sub
代码截图:
代码讲解:
1) Fdsarr = Array("员工编号", "姓名", "性别", "民族", "部门", "职务", "电话", "出生日期") '字段名
Arr = Application.Transpose(rsADO.GetRows(, 1, Fdsarr)) '记录存入数组
这里利用了一个方法:rsADO.GetRows(, 1, Fdsarr)
GetRows方法:此方法传回一个二维的数组,每一行对应Recordset中的一笔记录,且每一列对应到记录中的字段。
此方法的语法如下:varArray = rs.GetRows([Rows], [Start], [Fields])
参数:
①Rows是要读取记录的数量;如果想要取得Recordset所有记录,可用-1或省略此参数。
②Start 是指出第一个被读取记录的书签;也可以是下列列举常数中的一个:0-adBookmarkCurrent(目前记录)、1-adBookmarkFirst(第一笔记录)、或2-adBookmarkLast(最后记录)。
③Fields 是可选择的栏位名称字段,其用来限制要读取的资料量。(也可指定单一字段名称、单一栏位索引、或者一个栏位索引阵列)。
2) For x = 1 To UBound(Arr)
Cells(x + 1, 1).Resize(1, 8) = Application.Index(Arr, x, 0)
Next
上面的过程中也用到了一个函数Index(Arr, x, 0),是调用工作表函数index。INDEX 返回列表或数组中的元素值,此元素由行序号和列序号的索引值给定。
INDEX 函数有两种语法形式:数组和引用。数组形式通常返回数值或数值数组,引用形式通常返回引用。
当函数 INDEX 的第一个参数为数组常数时,使用数组形式。
语法:数组形式INDEX(array,row_num,column_num)
参数:
① Array 为单元格区域或数组常量。
② 如果数组只包含一行或一列,则相对应的参数 row_num 或 column_num 为可选。
如果数组有多行和多列,但只使用 row_num 或 column_num,函数 INDEX 返回数组中的整行或整列,且返回值也为数组。
③ Row_num 数组中某行的行序号,函数从该行返回数值。如果省略 row_num,则必须有Column_num。
④ Column_num 数组中某列的列序号,函数从该列返回数值。如果省略 column_num,则必须有 row_num。
特别说明:
①如果同时使用 row_num 和 column_num,函数 INDEX 返回 row_num 和 column_num 交叉处的单元格的数值。
②如果将 row_num 或 column_num 设置为 0,函数 INDEX 则分别返回整个列或行的数组数值。Row_num 和 column_num 必须指向 array 中的某一单元格;否则,函数 INDEX 返回错误值 #REF!。
例:=INDEX(A2:B3,2,2) 返回单元格区域的第二行和第二列交叉处的值
=INDEX(A2:B3,2,1) 返回单元格区域的第二行和第一列交叉处的值:
下面看我们程序的运行结果:
本讲内容参考程序文件:VBA与数据库操作(第一册).xlsm
今日内容回向:
1 如何把记录集传递给数组?
2 GetRows 和 INDEX 是否理解呢?
【分享成果,随喜正能量】 路上,有风有雨是常态,风雨无阻是心态,风雨兼程是状态。生活是活给自己看的,你有多大成色,世界才会给你多大脸色。日日行不怕千万里,天天讲不吝千万言,时时做不惧千万事。实现梦想的过程从来都不是轻轻松松的,你要打败很多很多迷茫、委屈、懒惰、软弱,你可能随时要给自己打气加油,管住那个想退缩的自己。
我20多年的VBA实践经验,全部浓缩在下面的各个教程中:
标签: #vb过程调用数组参数传递 #vba函数数组参数传递