用vba实现将记录集输出到Excel模板_VBA教程-查字典教程网
用vba实现将记录集输出到Excel模板
用vba实现将记录集输出到Excel模板
发布时间:2016-12-28 来源:查字典编辑
摘要:复制代码代码如下:'************************************************'**函数名称:Expo...

复制代码 代码如下:

'************************************************

'**函数名称:ExportTempletToExcel

'**函数功能:将记录集输出到Excel模板

'**参数说明:

'**strExcelFile要保存的Excel文件

'**strSQL查询语句,就是要导出哪些内容

'**strSheetName工作表名称

'**adoConn已经打开的数据库连接

'**函数返回:

'**Boolean类型

'**True成功导出模板

'**False失败

'**参考实例:

'**CallExportTempletToExcel(c:text.xls,查询语句,工作表1,adoConn)

'************************************************

PrivateFunctionExportTempletToExcel(ByValstrExcelFileAsString,_

ByValstrSQLAsString,_

ByValstrSheetNameAsString,_

ByValadoConnAsObject)AsBoolean

DimadoRtAsObject

DimlngRecordCountAsLong'记录数

DimintFieldCountAsInteger'字段数

DimstrFieldsAsString'所有字段名

DimiAsInteger

DimexlApplicationAsObject'Excel实例

DimexlBookAsObject'Excel工作区

DimexlSheetAsObject'Excel当前要操作的工作表

OnErrorGoToLocalErr

Me.MousePointer=vbHourglass

'//创建ADO记录集对象

SetadoRt=CreateObject(ADODB.Recordset)

WithadoRt

.ActiveConnection=adoConn

.CursorLocation=3'adUseClient

.CursorType=3'adOpenStatic

.LockType=1'adLockReadOnly

.Source=strSQL

.Open

If.EOFAnd.BOFThen

ExportTempletToExcel=False

Else

'//取得记录总数,+1是表示还有一行字段名名称信息

lngRecordCount=.RecordCount+1

intFieldCount=.Fields.Count-1

Fori=0TointFieldCount

'//生成字段名信息(vbTab在Excel里表示每个单元格之间的间隔)

strFields=strFields&.Fields(i).Name&vbTab

Next

'//去掉最后一个vbTab制表符

strFields=Left$(strFields,Len(strFields)-Len(vbTab))

'//创建Excel实例

SetexlApplication=CreateObject(Excel.Application)

'//增加一个工作区

SetexlBook=exlApplication.Workbooks.Add

'//设置当前工作区为第一个工作表(默认会有3个)

SetexlSheet=exlBook.Worksheets(1)

'//将第一个工作表改成指定的名称

exlSheet.Name=strSheetName

'//清除“剪切板”

Clipboard.Clear

'//将字段名称复制到“剪切板”

Clipboard.SetTextstrFields

'//选中A1单元格

exlSheet.Range(A1).Select

'//粘贴字段名称

exlSheet.Paste

'//从A2开始复制记录集

exlSheet.Range(A2).CopyFromRecordsetadoRt

'//增加一个命名范围,作用是在导入时所需的范围

exlApplication.Names.AddstrSheetName,=&strSheetName&!$A$1:$&_

uGetColName(intFieldCount+1)&$&lngRecordCount

'//保存Excel文件

exlBook.SaveAsstrExcelFile

'//退出Excel实例

exlApplication.Quit

ExportTempletToExcel=True

EndIf

'adStateOpen=1

If.State=1Then

.Close

EndIf

EndWith

LocalErr:

'*********************************************

'**释放所有对象

'*********************************************

SetexlSheet=Nothing

SetexlBook=Nothing

SetexlApplication=Nothing

SetadoRt=Nothing

'*********************************************

IfErr.Number<>0Then

Err.Clear

EndIf

Me.MousePointer=vbDefault

EndFunction

'//取得列名

PrivateFunctionuGetColName(ByValintNumAsInteger)AsString

DimstrColNamesAsString

DimstrReturnAsString

'//通常字段数不会太多,所以到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

EndFunction

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新VBA学习
    热门VBA学习
    脚本专栏子分类