首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 网络安全-> 黑客攻防
利用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.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·J2EE平台介绍-JSP教程,J2ME开发
·自己制作友好的页面“确认对话框”-ASP教程,ASP应用
·DataAdapter是如何更新数据库数据的?-.NET教程,数据库应用
·jsp项目中实现关闭浏览器后吊线,只要不关闭不操作也保持在线-JSP教程,Jsp/Servlet
·企业Java技术开发技巧2则-JSP教程,Java技巧及代码
·刚刚整理好-汉字转拼音缩写的函数-.NET教程,评论及其它
·关于数据返回给调用页面-ASP教程,数据库相关
·如何使用C#压缩文件及注意的问题!-.NET教程,C#语言
·数据库安装程序-.NET教程,数据库应用
·DataGrid的自定义分页UserControl-.NET教程,数据库应用
最新文章
·王通:网站推广的18种秘笈_营销推广
·什么是mfa,以及停止mfa的好处_网赚技巧
·google adsense 域名保护功能是否作恶_网赚技巧
·关于无效点击-adsense团队资深专员如是说_网赚技巧
·google adsense将以人民币支付_站长访谈
·bbmao的神秘配方:打破中文聚类搜索的低迷_站长访谈
·你的网站为什么粘不住流量?_站长心得
·决定网站成败重要的六个因素_站长心得
·widnows vista是吃内存大户 优化vista攻略_windows vista
·首页所应该达到的几个目标(1)_站长心得
相关主题
  • 利用OleDb的GetOLEDBSchemaTable方法得到数据库架构信息-.NET教程,数据库应用
  • 利用OleDb对象,将数据库中全部表转换成XML文件-.NET教程,数据库应用
  • 西部数码虚拟主机

    友情链接
    CNNIC 西部数码
    万网 自助建站
    虚拟主机 asp空间
    域名注册 域名
    域名申请 主页空间
    论坛空间 网站空间
    国际域名 虚拟空间
    空间租用 DDOS防火墙
    成都主机托管 四川主机托管
    主机租用 服务器租用
    网站目录 自助建站
    虚拟主机 网址大全
    软件下载
    自助链接
    虚拟主机资讯 特价虚拟主机
    版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
    关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
    特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
    发表评论 打印  刷新     关闭