Office中国论坛/Access中国论坛

标题: 使用EXCEL获取ACCESS MDB数据的技巧 [打印本页]

作者: toolssoft    时间: 2012-6-20 09:23
标题: 使用EXCEL获取ACCESS MDB数据的技巧
增加点人气

【功能简介】
    MS ACCESS虽然提供有数据导出的功能,但是如果MDB有大量数据需要导出到EXCEL表中时,
  会遇到超过EXCEL表格的最大上限值,而无法打开。
    这时候,使用EXCEL VBA程序,通过ADODB.Connection连接,就可以把数据进行灵活分割,
  从而实现导出数据的功能。
  1. Sub MDB2XLS()
  2.     Dim dbCon As ADODB.Connection
  3.     Dim dbRes As ADODB.Recordset

  4.     '连接MDB
  5.     Set dbCon = New ADODB.Connection
  6.     On Error Resume Next
  7.     dbCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strMDBName & ";"
  8.     If Err.Number <> 0 Then
  9.         MsgBox vbCrLf & Err.Description
  10.         Err.Clear
  11.         On Error GoTo 0
  12.         Set dbCon = Nothing
  13.         Exit Sub
  14.     End If
  15.     'SQL处理
  16.     '(省略)
  17.     strSQL="SELECT * FROM test;"
  18.    
  19.     '从MDB中检索数据
  20.     Set dbRes = New ADODB.Recordset
  21.     dbRes.Open strSQL, dbCon, adOpenKeyset, adLockReadOnly
  22.     On Error GoTo 0
  23.     If dbRes.EOF Then
  24.         MsgBox "没有检索到数据。"
  25.         dbRes.Close
  26.         Set dbRes = Nothing
  27.         dbCon.Close
  28.         Set dbCon = Nothing
  29.         Exit Sub
  30.     End If

  31.     Set SH = ActiveSheet
  32.     With SH
  33.         .Cells.ClearContents
  34.         '在EXCEL表中生成字段名
  35.         For COL = 1 To dbRes.Fields.Count
  36.             .Cells(1, COL).Value = dbRes.Fields(COL - 1).Name
  37.             '根据MDB中数据属性,修改EXCEL表中的对应属性
  38.             With .Columns(COL)
  39.                 Select Case dbRes.Fields(COL - 1).Type
  40.                         'case xxx
  41.                         '省略
  42.                     Case 7                  ' 日期格式
  43.                         dteDate = dbRes.Fields(COL - 1).Value
  44.                         lngDate = CLng(dteDate)
  45.                         If lngDate <> dteDate Then
  46.                             .NumberFormatLocal = "yyyy/mm/dd hh:mm"
  47.                         Else
  48.                             .NumberFormatLocal = "yyyy/mm/dd"
  49.                         End If
  50.                         .HorizontalAlignment = xlHAlignCenter
  51.                     Case Else               ' 其他类型都当作文字串
  52.                         .NumberFormatLocal = "@"
  53.                         .HorizontalAlignment = xlHAlignLeft
  54.                 End Select
  55.             End With
  56.         Next COL
  57.         '一次性数据拷贝
  58.         .Range("A2").CopyFromRecordset dbRes
  59.     End With
  60.     dbRes.Close
  61.     Set dbRes = Nothing
  62.     dbCon.Close
  63.     Set dbCon = Nothing
  64. End Sub
复制代码

作者: YOUYOUC    时间: 2015-1-26 23:13
学习了




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3