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

ADO导出数据到工作表并设置表格式

VBA语言専攻 2022-06-28
158
【分享成果,随喜正能量】 古人说,不作补之功,不为益之事。但当下社会凡事多考虑自身的利弊,而非其行为的对错。。
《VBA数据库解决方案》教程是我推出的第二套教程,目前已经是第一版修订了。这套教程定位于中级,是学完字典后的另一个专题讲解。数据库是数据处理的利器,教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法和实例操作,教程第一版的修订内容主要是完成所有程序文件的32位和64位OFFICE系统测试。
这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是:ADO导出数据到工作表并设置表格式

第四十八讲  导出数据到工作表后,工作表格式的设置

大家好,今日我们讲VBA解数据库解决方案的第48讲内容:从数据库中导出数据到工作表后,工作表格式的设置。为什么要讲这讲内容呢?因为我们在操作数据库的时候,需要的是数据处理,往往从数据表中导出数据后,格式会发生变化,我们需要程序来处理。避免手工的操作。

1  应用场景的具体分析

如下面截图为导出数据的信息:
很显然,这份表格中我们需要的是出生日期应该是年月日格式的日期,同时我们的第一行最好是把字体换成粗体。这需要程序的自动实现。
我们可否能让程序自动实现呢?当我们深入的学习应用VBA后,需要这类问题的解决很多,为什么呢?因为我越来越不想手工处理了,最好程序给我一份最终的报表。好了,实现是没问题的。

2  导出数据到工作表后,工作表格式设置的代码及代码解读

下面看我给出的代码:
Sub mynzRecords_48() '第48讲 从数据库中导出数据到工作表后,工作表格式的设置
    Dim cnADO, rsADO As Object
    Dim strPath, strSQL, strTable 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
    Worksheets("48").Select
    Cells.ClearContents
    For i = 0 To rsADO.Fields.Count - 1
        ActiveSheet.Cells(1, i + 1) = rsADO.Fields(i).Name
    Next i
   GoTo 200
   For i = 1 To rsADO.RecordCount
    For j = 0 To rsADO.Fields.Count - 1
     ActiveSheet.Cells(i + 1, j + 1) = rsADO.Fields(j)
   Next j
    rsADO.MoveNext
   Next i
   GoTo 100
200:
   '设置工作表格式
    With Range(Cells(1, 1), Cells(1, rsADO.Fields.Count))
        .Font.Bold = True
        .HorizontalAlignment = xlCenter
    End With
   '复制全部数据
   Range("A2").CopyFromRecordset rsADO
   ActiveSheet.Columns(rsADO.Fields.Count).NumberFormat = "yyyy-mm-dd"
   ActiveSheet.Columns.AutoFit
100:
    rsADO.Close
    cnADO.Close
    Set cnADO = Nothing
    Set rsADO = Nothing
End Sub
代码截图:

代码讲解:上述代码在执行过程中如果不执行GOTO 200,那么就是我在本文开始时讲到的那种结果了,当执行后GOTO 200 那么就有了格式的设置,下面我们看看都设置了哪些格式呢?
1)  With Range(Cells(1, 1), Cells(1, rsADO.Fields.Count))
        .Font.Bold = True
        .HorizontalAlignment = xlCenter
End With
这段代码的执行,设置了表头要按粗体来显示。这样的报表会美观些,当然这只是我个人的观点,每个人和每个人不一样。读者也可以自己设置成自己喜欢的格式。
2) ActiveSheet.Columns(rsADO.Fields.Count).NumberFormat = "yyyy-mm-dd"
 ActiveSheet.Columns.AutoFit
上面的代码就将日期列变成了类似于"yyyy-mm-dd" 这种年月日的格式了,并且自动调整。

下面看我们代码的运行结果了:
好了,非常的完美。

 


今日内容回向:
1  如何设置工作表的格式呢?
2  上述代码中如果设置其他的列该如何设置呢?


本讲内容参考程序文件:VBA与数据库操作(第二册).xlsm





我20多年的VBA实践经验,全部浓缩在下面的各个教程中:
【分享成果,随喜正能量】时光行走,不减锐气,总有那些梦想飞越沧海,总有那些力量支撑坚强,总有那些信心实践担当,总有那些脚步丈量远方。。


文章转载自VBA语言専攻,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论