用vba实现将记录集输出到excel模板
来源: 阅读:928 次 日期:2016-06-24 09:23:24
温馨提示: 小编为您整理了“用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

更多信息请查看脚本栏目
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:hfpxwx
咨询QQ:526150442(9:00—18:00)版权所有:
云南网警报警专用图标
Baidu
map