【分享成果,随喜正能量】人生一世,草木一秋。世间就是这样,谁也逃不过两样东西,一是因果,二是无常!心量越大,烦恼越轻;心量越小,烦恼越重。。
《VBA数组与字典方案》教程是我推出的第三套教程,目前已经是第一版修订了。这套教程定位于中级,字典是VBA的精华,我要求学员必学。七、一、三、九组合套教程掌握后,可以解决大多数工作中遇到的实际问题。
这套教程共两册,一共八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是:记录集赋值给数组后转置
第三十六讲 将记录集赋值给数组以及转置的利用
大家好,今日继续讲解VBA数组与字典解决方案第36讲,内容是:将记录集赋值给数组后,利用转置函数处理多维数组的方法。我在之前的讲解中,我讲了将记录集存入数组的方案,并通过一个Index函数在工作表中恢复数组数据的方法。今日讲的是利用转置函数来完成同样的功能。
1 实际问题的场景分析
实例讲解,我们有下面的工作表数据,
我要首先把上述的数据的工作表利用ADO连接打开,然后将打开的记录集数据赋值给数组,最后将数组的数据在工作表中显示出来。
2 解决问题的代码方案
为什么要讲这个方法呢?确实,我们可以在工作表中可以直接显示记录集的数据,但数组的功能强大,我们必须要掌握这个知识点的讲解。
下面看我给出的代码:
Sub MyNZsz_36() '第36讲 记录集赋值给数组后,利用转置函数处理多维数组的方法
Dim cnADO, rsADO As Object
Dim strPath, strSQL As String
Dim myData() As Variant
Dim myTitle() As Variant
Worksheets("36").Select
Cells.ClearContents
Set cnADO = CreateObject("ADODB.Connection")
Set rsADO = CreateObject("ADODB.Recordset")
strPath = ThisWorkbook.FullName
cnADO.Open "provider=Microsoft.ACE.OLEDB.12.0;extended properties='excel 12.0;hdr=yes;imex=1';" _
& "data source=" & strPath
strSQL = "SELECT * FROM [数据7$]"
rsADO.Open strSQL, cnADO, 1, 3
myTitle = Array("员工编号", "姓名", "年龄")
myData = rsADO.GetRows(-1, 1, myTitle)
Range("a1:C1") = myTitle
Range("a2").Resize(UBound(myData, 2) + 1, UBound(myData) + 1) = Application.Transpose(myData)
rsADO.Close
cnADO.Close
Set rsADO = Nothing
Set cnADO = Nothing
End Sub
代码截图:
代码讲解:
1) 上述的过程中首先打开一个用ADO连接,然后打开记录集,并将记录集赋值给数组,最后在工作表中还原数组。
2) myTitle = Array("员工编号", "姓名", "年龄")
myData = rsADO.GetRows(-1, 1, myTitle)
上述语句中在记录集中按myTitle数组的格式,讲记录集赋值给myData,要注意的是myData要是变体变量。
3) Range("a2").Resize(UBound(myData, 2) + 1, UBound(myData) + 1) = Application.Transpose(myData)
上述语句中UBound(myData, 2) 获得myData的第2维数的最大数值;UBound(myData) 获得myData的第1维数的最大数值.用Resize()函数扩展了工作表区域;Transpose(myData)将数组myData转置后填入区域。
下面看代码的执行结果:
今日内容回向:
1 如何将记录集的数据赋值给数组?
2 转置函数是如何利用的?
我20多年的VBA实践经验,全部浓缩在下面的各个教程及各类工具中:
【分享成果,随喜正能量】静心。静能生慧,智者无忧,计较是疼,比较是痛,淡然是福。定心。不以物喜,不以己悲。安心。尽人事而顺天意,随遇而安即得幸福。正心。心术不正损人害己,意志不坚诸事难成。。