电信主站 网通分站
购买流程 付款方式 常见问题 在线提问 续租服务 购物车
用户名: 密 码: 忘记密码?
首 页
域名注册
虚拟主机
双线主机
服务器租用
VPS主机
企业邮局
代理专区
客服中心
虚拟主机行业资讯 虚拟主机评测对比 互联网最新动态 技术学院 站长资讯 在线教程 网站运营
搜索优化 服务器 网络编程 图形图象 站长之家 网页制作 操作系统
冲浪宝典 软件教学 视频通信 办公软件 邮件系统 网络安全 认证考试
您当前位置:西部数码->资讯中心-> 认证考试-> Adobe认证
利用ole自动化解决acess97中文版报表生成器直线不能往下顺延的缺陷_visualbasic教程
作者:网友供稿 点击:0
  西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!虚拟主机可在线rar解压,自动数据恢复设置虚拟目录等.虚拟主机免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金!
文章页数:[1] 
->ACCESS97是一个非常优秀的数据库软件,它不仅能充当办公自动化的桌面数据管理工具,也是一个开发Client/Server产品的优秀前端开发工具.它的特点是易学易用、工具丰富、不需写大量代码就可以在很短的时间内开发出界面优美且功能强大的系统,长期以来受到广大开发者的青睐。但笔者在使用时发现其报表生成器中有一个明显不适合我国国情的缺陷,就是当设置报表DETAIL节上的字段长度因为横向空间不够而设为自动向下顺延(CanGrow属性为True)时,如果字段旁有竖线(国内大部分公文报表都有竖线,而国外则很少有),则竖线不能和字段一起向下顺延。使整个报表看起来不美观。这个缺陷在ACCESS2.0和ACCESS97中文版上都有,而在FoxPro2.5B/3.0/5.0下却没有。据微软技术服务部的工作人员说是由于本地化时测试不够原因所致。为此,笔者在ACCESS内采用了OLE自动化!
方法,将ACCESS97查询生成的表送交EXCEL97进行处理(分类汇总、打印、预演),较好地解决了这个问题。由于ACCESS97和EXCEL97的VBA在97版本上几乎完全兼容,在EXCEL97下录制的宏代码只需在ACCESS下稍加修改就行了,所以采用此方法和用内部报表生成器设计所用的时间差不多。整个工作需要下面几步:

在EXCEL97下设计好报表的样式,包括表头、页眉、页码等,对需要自动翻转的列,在"单元格格式设置"下设为"自动换行"。

在EXCEL97下录制好当数据送入后进行的操作宏(如分类汇总、加边框线,加空行、打印输出、预演等动作)。

在ACCESS下用VBA语句和DAO对象的方法将数据送入EXCEL表内,并将EXCEL下宏操作变成ACCESS下的语句。
  以下是ACCESS97下的程序代码,实际应用程序界面是一个对话框屏幕(FORM),上面有五个下拉框(Comb_)和一个文字框(Text),由用户选择相应的信息,然后用户按"确定"命令按钮执行程序。其中有些属性和方法在ACCESS2.0下不能使用,可采用相应的语句.
PrivateSub确认_Click()
OnErrorGoToErrorHandler
DimstDocNameAsString
DimkAsInteger
stDocName="Pqry_YEAR"
  DoCmd.OpenQuerystDocName从原始表内根据用户输入的信息条件运行"生成表查询",生成一个供打印用的表.
  增加空记录处理--为了保证记录数少时也打印整张表.


    IfVal(Me![Comb空行])>0Then如果用户输入了大于0的数值,表示加空行


  Fork=1ToVal(Me![Comb空行])
   CurrentDb.Execute"INSERTINTOPqry_YEAR
  (项目类)VALUES(空行空行空行);"
  Nextk
EndIf
DimmsgVarAsInteger 
定义EXCEL对象变量
------------------------------
DimxlobjAsObject
DimxlsheetobjAsObject
DimxlrangeAsObject
------------------------------
定义ACESS记录集对象变量
DimdbsAsDatabase,rstAsRecordset
DimstrSQLAsString
DimrecTotal,fieldTotalAsIntegerrecTotal:
    表示该表内记录总数;
    fieldTotal表示字段总数
Dimi,jAsInteger
i=0
j=0
Returnreferencetocurrentdatabase.
Setdbs=CurrentDb当前数据库
Setrst=dbs.OpenRecordset("Pqry_YEAR")选择记录集
recTotal=rst.RecordCount得出记录数
fieldTotal=rst.Fields.Count 得出字段数
----------------------------------
建立EXCEL对象
Setxlobj=CreateObject("Excel.Application.8")
打开设计好的EXCEL表--REPORT.XLS
xlobj.Workbooks.OpenFileName:=pPathname&"REPORT.xls"
Setxlsheetobj=xlobj.ActiveWorkbook.Worksheets("REPORT")
 指向工作表
如果是改动过的表,不再打开
IfMsgBox("当前打印表格文件中已有数据,
 是否需要更新?"
 &Chr(13)&_
 "提示:只有对数据进行改动后,才需要更新.",68)
 =vbYesThen
DoCmd.HourglassTrue 由于时间较长,
将鼠标设为沙漏形状
 xlsheetobj.Rows("5:200").Select 选定区域
xlobj.Selection.DeleteShift:=-4162 
    注意!原录制宏中-4162为xlnone,是EXCEL97的常量,但在ACCESS下却不认,只能到EXCEL下的对象浏览器去查询对应的常数.
 开始向EXCEL传送数据
 DoUntilrst.EOF
  Forj=1TofieldTotal
    xlsheetobj.cells(5 i,j).Value=rst.Fields(j-1)
  Nextj
  rst.MoveNext
  i=i 1
 Loop
 rst.Close

 在EXCEL中调整,具体常数参见EXCEL下的对象浏览器
xlsheetobj.Range("A4:Q"&Trim(Str(recTotal 4))).
 Select选定范围
 以下为设置边框线录制的宏代码,已删除了相似的语句.
 xlobj.Selection.Borders(5).LineStyle=-4142
 xlobj.Selection.Borders(6).LineStyle=-4142
 Withxlobj.Selection.Borders(7)
   .LineStyle=1
   .Weight=-4138
   .ColorIndex=-4105
 EndWith

 Withxlobj.Selection
 确定是合计在表上还是在表尾
  IfMe![Fram位置]=1Then
    .SubtotalGroupBy:=2,Function:=-4157,
     TotalList:=Array(6,9,10,_
     11,12,13,14,15,16),Replace:=True,
     PageBreaks:=False,_
     SummaryBelowData:=False
  Else
    .SubtotalGroupBy:=2,Function:=-4157,
    TotalList:=Array
    (6,9,10,_
     11,12,13,14,15,16),Replace:=True,
     PageBreaks:=False,_
     SummaryBelowData:=True
  EndIf
 EndWith
 根据用户的选择设置页眉和页尾。
 Withxlsheetobj.PageSetup
   .LeftHeader=""&Chr(10)&""&Chr(10)&"
   "&Mid(Me![Cmbo单位],4)
   .CenterHeader="&""宋体,加粗""&18"&Me!
   [Cmbo年度]&"年"&Mid(Me![Cmbo类别],4)&"XXX表"
 EndWith
 xlsheetobj.Range("A1").Select
 将空行内容清掉
 k=Val(Me![Comb空行])
 IfVal(Me![Comb空行])>0Then
   DimcontentAsString
   i=5
   content=xlsheetobj.cells(i,2).formulaR1C1
   DoWhileInStr(1,content,"空行空行空行")=0
     i=i 1
     content=xlsheetobj.cells(i,2).formulaR1C1
   Loop
   xlsheetobj.Range("B"&Trim(Str(i-k 5))&":"&"Q"
   &Trim(Str(i 5))).Select
   xlobj.Selection.ClearContents
   xlsheetobj.Range("A1").Select
 EndIf

Else 不更新
 xlsheetobj.Activate
EndIf
xlobj.ActiveWindow.SelectedSheets.PrintPreview 预演报表
如为打印:xlobj.ActiveWindow.SelectedSheets.PrintOut
DoCmd.HourglassFalse恢复鼠标形状
xlobj.Visible=True 让EXCEL可见
清除对象变量空间,节省内存
Setdbs=Nothing
Setxlobj=Nothing
xlobj.quit 关闭EXCEL
ExitSub
ErrorHandler: 出错处理
DoCmd.HourglassFalse
MsgBox"Errornumber"&Err.Number&":"&Err.Description
 Resumewithstatementfollowingoccurrenceoferror.
 ResumeNext
EndSub
    通过这个例子我们看到在OFFICE97下利用OLE自动化扩展应用程序的功能是多么方便和强大。用EXCEL完成的报表的优点是格式美观,修改方便.缺点是第一次生成EXCEL表格时速度较慢.
    本例是用EXCEL对数据进行报表操作,其实也可参照此例的方法在EXCEL上建立图形统计、财务分析、数据透视表分析等应用程序,只要在EXCEL下录制相应的宏,再加到ACCESS下就行了。->
->


文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
相关主题
文章页数:[1] 
Google
热门文章
·photoshop照片特效处理:隐藏脸部轮廓凸显五官_photoshop教程
·vbcom基础讲座之编译的实例选项_visualbasic教程
·ado三大对象的属性、方法、事件及常数(二)_visualbasic教程
·access下如何使用通用对话框_visualbasic教程
·多用户应用程序中应注意的其它问题(1)--多客户环境下vb数据库编程之(8)_visualbasic教程
·用sendmessage函数实现vb程序的查询功能_visualbasic教程
·利用ole自动化解决acess97中文版报表生成器直线不能往下顺延的缺陷_visualbasic教程
·电影结束画面的卷动效果_visualbasic教程
·vb软件开发中的错误捕获及处理技术_visualbasic教程
·创建新表时,快速拷贝字段_visualbasic教程

最新文章
·photoshop打造花朵图案铂金胸针_photoshop教程
·adobe photoshop 认证试题三_adobe认证
·adobe photoshop 认证试题二_adobe认证
·adobe photoshop 认证试题一_adobe认证
·photoshop头发融入背景抠图教程_photoshop教程
·用photoshop快速打造美女肖像速写_photoshop教程
·photoshop模拟玻璃相框上的水滴字“圣诞快乐”_photoshop教程
·教你上网前保证windows xp安全的办法_windows xp
·关于photoshop抠图的初步认识_photoshop教程
·fireworks打造精致播放器水晶图标_fireworks教程


 
 


版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
  打印  刷新  关闭
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 虚拟主机 | 资讯中心 | 友情链接 | 网站地图

版权所有 西部数码(www.west263.com)
CopyRight (c) 2002~2006 west263.com all right reserved.
公司地址:四川成都市万和路90号天象大厦4楼 邮编:610031
电话总机:028-86262244 86263048 86263408 86263960 86264018 86267838
售前咨询:总机转201 202 203 204 206 208
售后服务:总机转211 212 213 214
财务咨询:总机转224 223 传真:028-86264041 财务QQ:点击发送消息给对方635483282
售前咨询QQ:点击发送消息给对方2182518 点击发送消息给对方241975952 点击发送消息给对方275026793 点击发送消息给对方408235859
售后服务QQ:点击发送消息给对方17708515 点击发送消息给对方307742704 点击发送消息给对方287976517 点击发送消息给对方363783715
《中华人民共和国增值电信业务经营许可证》编号:川B2-20030065号