网站首页  汉语字词  英语词汇  考试资料  写作素材  旧版资料

请输入您要查询的考试资料:

 

标题 用vba实现将记录集输出到Excel模板
内容
    代码如下:
    '************************************************
    '** 函数名称: ExportTempletToExcel
    '** 函数功能: 将记录集输出到 Excel 模板
    '** 参数说明:
    '** strExcelFile 要保存的 Excel 文件
    '** strSQL 查询语句,就是要导出哪些内容
    '** strSheetName 工作表名称
    '** adoConn 已经打开的数据库连接
    '** 函数返回:
    '** Boolean 类型
    '** True 成功导出模板
    '** False 失败
    '** 参考实例:
    '** Call ExportTempletToExcel(c:\\text.xls,查询语句,工作表1,adoConn)
    '************************************************
    Private Function ExportTempletToExcel(ByVal strExcelFile As String, _
    ByVal strSQL As String, _
    ByVal strSheetName As String, _
    ByVal adoConn As Object) As Boolean
    Dim adoRt As Object
    Dim lngRecordCount As Long ' 记录数
    Dim intFieldCount As Integer ' 字段数
    Dim strFields As String ' 所有字段名
    Dim i As Integer
    Dim exlApplication As Object ' Excel 实例
    Dim exlBook As Object ' Excel 工作区
    Dim exlSheet As Object ' Excel 当前要操作的工作表
    On Error GoTo LocalErr
    Me.MousePointer = vbHourglass
    '// 创建 ADO 记录集对象
    Set adoRt = CreateObject(ADODB.Recordset)
    With adoRt
    .ActiveConnection = adoConn
    .CursorLocation = 3 'adUseClient
    .CursorType = 3 'adOpenStatic
    .LockType = 1 'adLockReadOnly
    .Source = strSQL
    .Open
    If .EOF And .BOF Then
    ExportTempletToExcel = False
    Else
    '// 取得记录总数,+ 1 是表示还有一行字段名名称信息
    lngRecordCount = .RecordCount + 1
    intFieldCount = .Fields.Count - 1
    For i = 0 To intFieldCount
    '// 生成字段名信息(vbTab 在 Excel 里表示每个单元格之间的间隔)
    strFields = strFields & .Fields(i).Name & vbTab
    Next
    '// 去掉最后一个 vbTab 制表符
    strFields = Left$(strFields, Len(strFields) - Len(vbTab))
    '// 创建Excel实例
    Set exlApplication = CreateObject(Excel.Application)
    '// 增加一个工作区
    Set exlBook = exlApplication.Workbooks.Add
    '// 设置当前工作区为第一个工作表(默认会有3个)
    Set exlSheet = exlBook.Worksheets(1)
    '// 将第一个工作表改成指定的名称
    exlSheet.Name = strSheetName
    '// 清除“剪切板”
    Clipboard.Clear
    '// 将字段名称复制到“剪切板”
    Clipboard.SetText strFields
    '// 选中A1单元格
    exlSheet.Range(A1).Select
    '// 粘贴字段名称
    exlSheet.Paste
    '// 从A2开始复制记录集
    exlSheet.Range(A2).CopyFromRecordset adoRt
    '// 增加一个命名范围,作用是在导入时所需的范围
    exlApplication.Names.Add strSheetName, = & strSheetName & !$A$1:$ & _
    uGetColName(intFieldCount + 1) & $ & lngRecordCount
    '// 保存 Excel 文件
    exlBook.SaveAs strExcelFile
    '// 退出 Excel 实例
    exlApplication.Quit
    ExportTempletToExcel = True
    End If
    'adStateOpen = 1
    If .State = 1 Then
    .Close
    End If
    End With
    LocalErr:
    '*********************************************
    '** 释放所有对象
    '*********************************************
    Set exlSheet = Nothing
    Set exlBook = Nothing
    Set exlApplication = Nothing
    Set adoRt = Nothing
    '*********************************************
    If Err.Number <> 0 Then
    Err.Clear
    End If
    Me.MousePointer = vbDefault
    End Function
    '// 取得列名
    Private Function uGetColName(ByVal intNum As Integer) As String
    Dim strColNames As String
    Dim strReturn As String
    '// 通常字段数不会太多,所以到 26*3 目前已经够了。
    strColNames = A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z, & _
    AA,AB,AC,AD,AE,AF,AG,AH,AI,AJ,AK,AL,AM,AN,AO,AP,AQ,AR,AS,AT,AU,AV,AW,AX,AY,AZ, & _
    BA,BB,BC,BD,BE,BF,BG,BH,BI,BJ,BK,BL,BM,BN,BO,BP,BQ,BR,BS,BT,BU,BV,BW,BX,BY,BZ
    strReturn = Split(strColNames, ,)(intNum - 1)
    uGetColName = strReturn
    End Function
随便看

 

在线学习网考试资料包含高考、自考、专升本考试、人事考试、公务员考试、大学生村官考试、特岗教师招聘考试、事业单位招聘考试、企业人才招聘、银行招聘、教师招聘、农村信用社招聘、各类资格证书考试等各类考试资料。

 

Copyright © 2002-2024 cuapp.net All Rights Reserved
更新时间:2025/5/17 22:51:41