45fan.com - 路饭网

搜索: 您的位置主页 > 网络频道 > 阅读资讯:Excel vba如何把记录集输出到Excel模板?

Excel vba如何把记录集输出到Excel模板?

2015-07-15 04:17:52 来源:www.45fan.com 【

Excel vba如何把记录集输出到Excel模板?

 

复制代码 代码如下:

'************************************************
'**函数名称: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

 


本文地址:http://www.45fan.com/a/question/14498.html
Tags: VBA 记录 输出
编辑:路饭网
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部