当前位置:文档之家› 用ExcelVBA方法实现报表自动生成

用ExcelVBA方法实现报表自动生成

用ExcelVBA方法实现报表自动生成.txt人永远不知道谁哪次不经意的跟你说了再见之后就真的再也不见了。一分钟有多长?这要看你是蹲在厕所里面,还是等在厕所外面…… 本文由geosouth贡献
pdf文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。
第 25 卷第 1 期 2009 年 1 月
电 力 科 学 与 工 程 Electric Power Science and Engineering
Vol.25, No.1 Jan., 2009
73
用 Excel VBA 方法实现报表自动生成
王 靖 1,王 林 1,周金文 2
(1. 中国石油华北石化公司 机动设备处,河北 任丘 062552;2. 中国石油华北油田公司,河北 任丘 062552) 摘要:针对实时报表应用中的一些不足,介绍了如何利用 Excel VBA 来实现 InTouch 组态界面下报表的自 动生成.该方法不破坏 InTouch 的安全性设置,不引入第三方软件,不需要操作人员人工干预. 关键词:VBA;录制宏函数;自动报表生成 中图分类号:TP319 文献标识码:A
据库中的项目用于指定起始周期, 持续时间及采样 0 引 言 间隔等,以便访问历史数据.HistData 实用程序 采用"动态数据交换" DDE(Dynamic Data Ex众所周知, 实时报表的编写方法虽然众多, 但 change) 技术访问 InTouch 创建的历史数据文件. 是程序步骤相当繁琐, 报表功能也受到很多限制. 它可以将所选的历史数据移入提出请求的程序, 如 一些现成的水晶报表灵活性不够, 根本无法满足数 Microsoft Excel,并生成一个扩展名为 CSV 的文 据报表的多种需求. 特别是组态时, 考虑到组态软 件.该文件可以用 Excel 打开. 件浏览器的安全性设置, 只能让操作人员操作监控 历史数据的访问可通过在提出请求的程序中使 画面,而不能进入 WINDOWS 界面.第三方报表 用宏函数或直接在 InTouch 中实现,并且需要定 软件的引入势必牵涉到操作系统对该软件的激活, 义与 HistData 程序相关的各个项目.在 InTouch 这与浏览器的安全性设置相矛盾. 鉴于此, 本文提 中编写条件脚本程序,让 InTouch 在既定的时刻 出用 Excel VBA 来实现 InTouch 组态界面下报表 (如上午 9:15)将电力监控系统 6 kV 运行日志需 自动生成的方法. 要统计的 24 个整点时刻的数据写入 CSV 文件. 第 2 步,从已经生成的 CSV 文件中读取数据 1 自动生成方法的实现 放入报表文件中 (利用 EXCEL 中的 VBA 编程) . 导入 CSV 文件,利用 VBA 录制宏函数,将 报表实现过程中, 利用了常规办公软件 Office Excel 中的内嵌工具 Visual Basic 编辑器(Excel 菜单下工具——宏——Visual Basic 编辑器) ,程 序非常简单. 此方法不用制作操作界面, 不需值班 员的干预, 自动生成报文并交付打印机打印; 报表 生成时不破坏 InTouch 的安全性设置.此方法共 分 4 个步骤. 第 1 步,利用 InTouch Hist

Data 与 Intouch 条件脚本生成 CSV 文件. InTouch HistData 是工控组态软件 InTouch 的一个控件, 程序包含自己的内部数据库. 内部数 工作表有效区域的单元格中的数据填入既定的 EXCEL 工作表中(例如:1 号开闭所报表自动打印 . xls) ,生成报表表格的格式在该工作表中已设定 好. 号开闭所报表自动打印 .xls" VBA Project "1 : 中结合录制宏函数生成程序模块 kbs1, 具体如下. '录制昨天 9 点至今天 8 点的整点报表 Workbooks. Open Filename: ="E: \ 报 表. CSV" '在 Excel 中打开 Intouch 生成的 CSV 文件 Range ( "C2: AC25 " ) . Select '选定范围为需要录制的数据
收稿日期:2008 08 22. 作者简介:王靖 (1974 -), 男, 中国石油华北石化公司 机动设备处工程师.
74







2009 年
Selection. Copy Windows( "1 号开闭所报表打印 .xls").Activate '激活在 Excel 中设定好的报表格式 'ActiveSheet. Unprotect Range ( "C5" ) . Select Selection. PasteSpecial Paste: =xlValues, Operation: =xlNone, SkipBlanks: = _ False, Transpose: =False '录制昨天 9 点的有功电度 Windows ( "报表. CSV" ) . Activate Range ( "AD2: AZ2 " ) . Select Selection. Copy Windows ( "1#开闭所报表打印 .xls" ) .Activate Range ( "G43" ) . Select Selection. PasteSpecial Paste: =xlValues, Operation: =xlNone, SkipBlanks: = _ False, Transpose: =False '录制今天 9 点的有功电度 Windows ( "报表. CSV" ) . Activate Range ( "AD26: AZ26 " ) . Select Selection. Copy Windows ( "1#开闭所报表打印 .xls" ) .Activate Range ( "G44" ) . Select Selection. PasteSpecial Paste: =xlValues, Operation: =xlNone, SkipBlanks: = _ False, Transpose: =False '录制昨天和前天 9 点的电能读数, 进行相减, 得出一天的电度数 '录制昨天 9 点的无功电度 Windows ( "报表. CSV" ) . Activate Range ( "BA2: BW2 " ) . Select Selection. Copy Windows ( "1#开闭所报表打印 .xls" ) .Activate Range ( "G45" ) . Select Selection. PasteSpecial Paste: =xlValues, Operation: =xlNone, SkipBlanks: = _ False, Transpose: =False '录制今天 9 点的无功电度 Windows ( "报表. CSV" ) . Activate Range ( "BA26: BW26 " ) . Select Selection. Copy Windows ( "1#开闭所报表打印 .xls" ) .Activate Range ( "G46" ) . Select
Selection. PasteSpecial Paste: =xlValues, Operation: =xlNone, SkipBlanks: = _ False, Transpose: =False '录制报表日期(在自动生成的报表上记录下 当日的日期) Windows ( "报表. CSV" ) . Activate Range ( "A2" ) . Select Selection. Copy Windows ( "1#开闭所报表打印 .xls" ) .Activate Range ( "C2" ) . Select Selection. PasteSpecial Paste: =xlValues, Operation: =xlNone, SkipBlanks: = _ False, Transpose: =False Application. CutCopyMode = False '关闭 csv 文件 Application. CutCopyMode = False Windows ( "报表. CSV" ) . Activate ActiveWindow. Close (其它数据录制过程相同) …… '清除报表中的垃圾数据 'Row

s ( "39: 47" ) . Select 'Selection. ClearContents 'Range ( "A39" ) . Select '取消最后一次复制的模式,将光标置位 ' (如果不置位,下次程序再次启动时,会从 当前光标处开始执行录制宏,报表格式就会打乱) Application. CutCopyMode = False Range ( "A3" ) . Select '另存为以当天日期为文件名的报表(每天在 固定的目录下生成当日的运行日志) 'Dim mydate As String 'mydate = Date – 1 '今日生成的是是昨日的报表 'Dim mydir As String 'mydir = "E: \报表\" + mydate + ".xls" '指定存储的路径 'ActiveWorkbook.SaveAs Filename:=mydir, _ FileFormat: =xlNormal, Password: ="", WriteResPassword: ="", _ ReadOnlyRecommended: =False, CreateBackup: =False 'Application. WindowState = xlMinimized '打印当日报表
第1期

靖,等
用 Excel VBA 方法实现报表自动生成
75
Range ( "A1: AC37" ) . Select ActiveSheet. PageSetup. PrintArea = " $ A $1: $AC$37" '设定打印区域(在此区域外还有中间数据) ActiveWindow. SelectedSheets. PrintOut Copies: =1, Collate: =True '保存该报表 'ActiveSheet. Protect DrawingObjects: =
Run ( "kbs1" ) '执行第二步编好的 kbs1 程序模块 Application. Quit '退出应用程序 End Sub 第 4 步, InTouch 运行过程中, 在 最小化打开 EXCEL. 至此,每天的 9 时 15 分,写有上述程序的电 力监控系统 CLIENT 就会自动生成昨日 9 时至今 日 8 时的运行报表,并自动按照指定的路径存档, 同时在默认打印机上打印.
参考文献: [1] 刘国定. 自动报表生成与自动程序设计 [J]. 小型微型计 算机系统, 1988,9 (12): 51-54. [2] 叶苍. 通用数据库自动报表工具的原理与实现 [J]. 烟台 大学学报 (自然科学与工程版), 1995, (4): 69-72. [3] 陈松乔, 张盈. FoxPro for Windows 中基于专家知识的自 动报表生成程序 [J]. 中南工业大学学报, 1998,29 (2): 176-178.
True, Contents: =True, Scenarios: =True ActiveWorkbook. Save End Sub 第 3 步, 实现自动执行 EXCEL 宏函数的功能 (不隐藏 InTouch) . 首先将 EXCEL 的宏函数安全性设为最低, 以 避免每次执行宏时的安全提示. "1#开闭所报表自动打印 .xls" :VBA 中编写 针对工作薄的脚本程序,具体如下. Private Sub Workbook_Open () Application. WindowState = xlMinimized '激活 1#开闭所报表自动打印 .xls
Discussion on Method of VBA of Automatic Reporting
Wang Jing1, Wang Lin1, Zhou Jinwen2
(1. China Petroleum Natural Gas Co., Ltd., Huabei Petrochemical Branch, Renqiu 062552, China; 2. PetroChina Huabei Oilfield Company, Renqiu 062552, China) Abstract: For a number of shortcomings of applications of automatic reporting, this article presented how to use Excel and VBA to achieve automatic reporting under InTouch. This method does not undermine the security settings of InTouch and need no other software and human intervention. Key words: VBA; record macro; automatic reporting

本TXT

由“文库宝”下载:https://www.doczj.com/doc/5b4575238.html,/wenkubao

相关主题
文本预览
相关文档 最新文档