暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

记录集赋值给数组后转置

VBA语言専攻 2022-06-29
116
【分享成果,随喜正能量】人生一世,草木一秋。世间就是这样,谁也逃不过两样东西,一是因果,二是无常!心量越大,烦恼越轻;心量越小,烦恼越重。
《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实践经验,全部浓缩在下面的各个教程及各类工具中:


【分享成果,随喜正能量】静心。静能生慧,智者无忧,计较是疼,比较是痛,淡然是福。定心。不以物喜,不以己悲。安心。尽人事而顺天意,随遇而安即得幸福。正心。心术不正损人害己,意志不坚诸事难成。
文章转载自VBA语言専攻,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论