数组与字典解决方案第三十讲:如何将记录集的数据记入数组(数组字典序排序)

VBA数组与字典方案》教程(10144533)是我推出的第三套教程,目前已经是第二版修订了。这套教程定位于中级,字典是VBA的精华,我要求学员必学。7.1.3.9教程和手册掌握后,可以解决大多数工作中遇到的实际问题。

这套字典教程共两册,一共八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是:数组与字典解决方案第三十讲:如何将记录集的数据记入数组

【分享成果,随喜正能量】281工作中,不做伸手党,遇到问题自己先想办法,要锻炼自己思考的能力。问别人只是为了优化自己的答案。领导交代的工作,做之前先问清楚和领导确认一遍,这样做事有清晰的目标,有反馈。这样才能做得更好。

第三十讲 如何将记录集的数据记入数组

大家好,今日继续讲VBA数组与字典解决方案,今日讲解第30讲内容,记录集的数据,如何记入数组。这讲的内容涉及到数组在数据库中的应用,数组在EXCEL及其接口程序中的应用中有着不可替代的角色,利用好了,可以给自己的工作表处理和VBA数据处理带来很大的方便。

1 应用场景的具体分析

今日实例:在数据库中有如下的数据:

我要做的是打开这个数据库,然后把内容先存到一个数组中,最后在工作表中体现出来。

2 应用场景的代码实现及代码解读

代码如下:

Sub mynzUpdateRecords_30() '将数据记录存入数组的方案

Dim cnADO As Object, rsADO As Object, Fdsarr, arr

Dim strPath As String, strTable As String, strSQL As String, 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])

参数:

  1. Rows是要读取记录的数量;如果想要取得Recordset所有记录,可用-1或省略此参数。
  2. Start 是指出第一个被读取记录的书签;也可以是下列列举常数中的一个:0-adBookmarkCurrent(目前记录)、1-adBookmarkFirst(第一笔记录)、或2-adBookmarkLast(最后记录)。
  3. 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) 返回单元格区域的第二行和第一列交叉处的值。

下面看我们程序的运行结果:

今日内容回向:

1 如何把记录集传递给数组?

2 GetRows 和 INDEX 是否理解呢?

我多年的VBA实践经验,全部浓缩在以下教程中:

特别声明:[数组与字典解决方案第三十讲:如何将记录集的数据记入数组(数组字典序排序)] 该文观点仅代表作者本人,今日霍州系信息发布平台,霍州网仅提供信息存储空间服务。

猜你喜欢

1.29发 红米Turbo5Max官宣 | iQOO15Ultra定档2.4 主动散热风扇+压感肩键(红米5a发布)

今日红米和iQOO两家新机均公布了发布日期,来简单看下双方的外观和配置~ Turbo5标准版则采用6.59英寸直屏,同样是金属中框,不过后盖为玻璃材质,目前暂时只公布了海报中的「祥云白」配色,大家觉得这次外观…

1.29发 红米Turbo5Max官宣 | iQOO15Ultra定档2.4 主动散热风扇+压感肩键(红米5a发布)

『鞠婧祎』10月古偶全扑街,是剧本不行还是观众审美变了?(『鞠婧祎』古风节目)

今年10月,古偶市场可谓风起云涌,四部重量级剧集一同上线,却都集体遭遇了滑铁卢,其中『鞠婧祎』主演的剧集尤为引人注目。 从被冠上第四千年美女这一争议性标签,到她在古偶剧中的半永久『妆容』,『鞠婧祎』的表演模式似乎正在…

『鞠婧祎』10月古偶全扑街,是剧本不行还是观众审美变了?(『鞠婧祎』古风节目)

让中国施压俄罗斯?英首相拒绝回应 加强中英关系访问(让中国施压俄罗斯的人)

1月28日,斯塔默开启了英国首相八年来的首次访华之行。据路透社报道,在英美关系愈发不稳定之际,斯塔默此行旨在加强对华关系,并鼓励企业把握机遇。斯塔默尚未透露将与中方讨论哪些议题,并拒绝表示是否会要求中国向俄罗斯施压以结束乌克兰冲突

让中国施压俄罗斯?英首相拒绝回应 加强中英关系访问(让中国施压俄罗斯的人)

为何高端包装盒偏爱深色调?专家深度解析色彩与工艺的完美融合(为何高端包装盒不能用)

这不仅仅是为了好看,或者是为了在货架上显得与众不同,背后其实藏着一套严密的色彩心理学逻辑和复杂的印刷工艺。过去,为了追求深色包装盒那种油润、高级的光泽感,很多厂家会使用覆膜工艺,也就是在纸张表面贴一层塑料膜。…

为何高端包装盒偏爱深色调?专家深度解析色彩与工艺的完美融合(为何高端包装盒不能用)

内娱活宝!宋小宝自曝微调600刀没人信,真相笑翻全网(内娱小生)

这波“接地气微调”直接打破内娱医美认知,别人微调追求“换头式变美”,宋小宝只想着给眉毛“精准扶贫”,难怪大家死活不信。如今网友还在花式玩梗,有人调侃“宝哥的眉毛比我的工资还多”,有人笑称“这是内娱最诚实又最没…

内娱活宝!宋小宝自曝微调600刀没人信,真相笑翻全网(内娱小生)