利用VBA实现多媒体软件调用Excel的数据库应用方法

2013-03-16 07:51李红岩谢敏敏
中国医学教育技术 2013年5期
关键词:控件调用报表

李红岩,谢敏敏

哈尔滨医科大学大庆校区,黑龙江 大庆 163319

作为一款功能强大的多媒体开发软件,Authorware拥有丰富的函数和强大的编程能力,提供知识对象功能,我们只需通过使用流程线以及一些工具图标,便可以制作出交互性强、具有表现力的多媒体产品。Authorware本身的作图功能不是很强,偏重于将其他应用程序制作的声音文件、电影文件、动画文件、图形文件等集成为一个多媒体文件[1]。因此,Authorware具有简单易学、编程灵活的特点,但恰恰就是因为这种特点,决定了其软件功能相对比较简单[2],局限性很强。该文目的主要是实现Authorware与Excel交互功能,进而实现Authorware报表输出的功能。通过变量、函数以及各种表达式,结合VBA编程开发进一步挖掘Authorware的潜力,集Authorware开发多媒体的功能与Microsoft Office Excel软件的报表输出等功能于一身,扩展多媒体软件的功能和应用范围。

1 VBA概述

VB提供的嵌入到Excel中的程序设计语言(visualbasic for application,VBA)是微软公司为其办公套件Microsoft Office提供的新一代标准宏语言,作为一种通用的宏语言能被所有的Microsoft可编程应用软件所共享,用于实现Office中的应用程序自动化,并创建自定义的解决方案。

VBA主要是根据用户对可编程应用软件中不同对象的操作,触发相应事件,去激活相应的程序,通过对相关对象执行不同的方法,或者修改相关对象的属性来完成特定的工作[3]。通过VB制作的ActiveX是一组基于组件模型(component object model,COM)的技术,其目标是提供一种与操作系统平台无关的、可在应用程序之间相互访问对象的机制[4]。ActiveX控件具备了语言无关性,只要经过系统注册便可被其他软件正常调用。

2 用VB制作ActiveX控件

2.1 数据库文件的建立

Authorware通过UCD的“ODBC.U32”库函数包与目前常用的Access、SQL Server、Oracle等关系型数据库实现连接[5]的方法已应用得非常普遍。该文将在ActiveX中通过VBA代码实现与数据库的连接。

首先启动Access,创建一个简单的数据库文件Prescribe.mdb,存入 D:Program Files中,其中包含一个表单prescriber。该表单内容如表1所示。

表1 prescriber表

2.2 创建ActiveX控件

现在所有的Office组件都支持VBA编程[6]。Visual Basic编辑器是为用户设计的编辑宏代码的开发环境。宏是一系列命令和函数组成的任务集合,存储于Visual Basic模块中,在需要执行该项任务时可随时运行[7]。Visual Basic编辑的ActiveX控件主要有OCX类型和DLL类型,开发者可按照应用需求设计控件的界面和代码。该文以OCX类控件为例。

VB的数据库应用依赖于ActiveX数据对象(activeX data objects,ADO)控件完成的。通过ADO技术,客户端应用程序能够通过任何OLE DB提供者来访问和操作数据库中的数据。VB提供的Adodc控件,实际上是将 ADO 的 Connection、Command、RecordSet、Error、Parameter和Field对象和功能结合在一个可视化的控件中[8]。在VBA中使用ADO对象之前,必须先为当前工程引用ADO的对象库,在“工程”→“引用”中选择“Microsoft ActiveX Data Objects 2.5 Library”。应用Adodc控件时,使用“工程”→“部件”命令,在窗口中勾选“Microsoft ADO Data Control”项,单击确定按钮后可在工具箱中看到Adodc控件,进行手工添加。将其Caption属性设置为Adodc1,用于数据库的连接。在初始代码窗口输入下述代码:

Adodc1.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:Program FilesPrescribe.mdb;Persist Security Info=False"

Adodc1.RecordSource="select*from prescriber"

Adodc1.CommandType=adCmdText

Adodc1.Refresh

然后在窗口拖入一个按钮,设置其Caption属性为“报表输出”,用于启动报表输出事件。为创建Excel对象,使用“工程”→“引用”命令,在窗口中勾选“Microsoft Excel 11.0 Object Library”项。该按钮的 Click事件代码如下:

Dim ExlApp As Excel.Application

Dim ExlBook As Excel.Workbook

Dim ExlSheet As Excel.Worksheet

Set ExlApp=CreateObject("Excel.Application")

Set ExlBook=ExlApp.Workbooks.Add

Set ExlSheet=ExlBook.Worksheets(1)

Dim Fieldlen()

Dim Irowcount,Icolcount As Integer

Adodc1.Recordset.MoveLast

If Adodc1.Recordset.RecordCount<1 Then

MsgBox("Error没有记录!")

Exit Sub

End If

Irowcount=Adodc1.Recordset.RecordCount

Icolcount=Adodc1.Recordset.Fields.Count

ReDim Fieldlen(Icolcount)

Adodc1.Recordset.MoveFirst

For Irow=1 To Irowcount+1

For Icol=1 To Icolcount

Select Case Irow

Case 1

ExlSheet.Cells(Irow,Icol).Value=Adodc1.Recordset.Fields(Icol-1).Name

Case 2

If IsNull(Adodc1.Recordset.Fields(Icol-1))=True Then

Fieldlen(Icol)=LenB(Adodc1.Recordset.Fields(Icol-1).Name)

Else

Fieldlen(Icol)=LenB(Adodc1.Recordset.Fields(Icol-1))

End If

ExlSheet.Columns(Icol).ColumnWidth=Fieldlen(Icol)

ExlSheet.Cells(Irow,Icol).Value=Adodc1.Recordset.Fields(Icol-1)

Case Else

Fieldlen1=LenB(Adodc1.Recordset.Fields(Icol-1))

If Fieldlen(Icol)<Fieldlen1 Then

ExlSheet.Columns(Icol).ColumnWidth=Fieldlen1

Fieldlen(Icol)=Fieldlen1

Else

ExlSheet.Columns(Icol).ColumnWidth=Fieldlen(Icol)

End If

ExlSheet.Cells(Irow,Icol).Value=Adodc1.Recordset.Fields(Icol-1)

End Select

Next

If Irow<>1 Then

If Not Adodc1.Recordset.EOF Then

Adodc1.Recordset.MoveNext

End If

Next

With ExlSheet

.Range(.Cells(1,1),.Cells(1,Icol-1)).Font.Name="隶书"

.Range(.Cells(1,1),.Cells(1,Icol-1)).Font.Bold=True

.Range(.Cells(1,1),.Cells(Irow,Icol-1)).Borders.LineStyle=xlContinuous

ExlApp.Visible=True

Set ExlApp=Nothing

End With

调试成功后,选择“文件”菜单中的“生成XXX.OCX”命令,其中的XXX代表工程名称,编译完成后在指定文件夹中可见相应的OCX文件。

3 Authorware调用ActiveX控件实现与Excel的交互

3.1 ActiveX控件的注册

使用ActiveX控件之前,先对其进行系统注册。以管理员身份运行命令提示符,输入regsvr32 XXX.OCX回车,弹出提示框显示DllRegisterServer在XXX.OCX已成功,表明系统注册成功[9]。然后在Authorware中多使用ActiveX控件注册和撤消注册两个函数进行程序代码自动注册。控件注册和撤销注册函数分别是 ActiveXControlRegister(″XXX.OCX″)和ActiveXControlRegister(″XXX.OCX″)。

3.2 Authorware调用ActiveX控件

在实现ActiveX控件注册之后,用户使用“插入”→“控件”→“ActiveX”命令打开SelectActiveXControl对话框。添加到之前制作的ActiveX控件流程线上,同时可对控件的属性进行设置。完成ActiveX控件添加后就可以运行程序看到最终的运行效果,如图1所示。当然,根据需要也可以对Excel进行隐藏,直接将排出的表格打印输出,这样可以形成较为复杂的报表功能。

图1 流程图与运行效果图

4 结论

VBA是基于VB的程序设计语言[10],该文利用VBA技术编写的OCX类控件实现了Authorware调用一个数据表的内容到Excel中进行输出的功能,这无疑是扩展了Authorware与Office组件二者的应用范围。在今后的应用中,可以继续考虑实现Authorware能够调用两个或多个数据表中的内容,形成视图后再输出到Excel中应用。

[1]杨丽,李彦国.AuthorWare与 Powerpoint应用浅析[J].电脑知识与技术,2011,(15):3689

[2]施泽权,胡鉴新.浅谈ActiveX控件在Authorware中的应用[J].中国科技信息,2008,(8):111

[3]谢丽珍.VBA文稿格式编辑自动化的研究[J].科技信息,2010,(23):481-466

[4]李红岩,李萌,宁梓淯.用VB扩展Authorware的数据库应用能力[J].中国医学教育技术,2012,26(1):35-37

[5]曹晶,唐捷,刘绍健,等.数据库在Authorware中的运用初探[J].广东技术师范学院学报,2009,(3):49

[6]王晶.浅谈Excel中使用ADO对象访问数据库[J].信息技术,2012,(12):124-126

[7]王丽,张桂香,李君.利用 VBA实现宏操作实例[J].高师理科学刊,2004,24(2):15-18

[8]蒋加伏,张林峰.Visual Basic程序设计教程[M].北京:北京邮电大学出版社,2009:291-293

[9]张学军,李建珍.在Authorware中用ActiveX控件实现具有用户认证功能的带附件的邮件发送程序[J].中国教育信息化,2007,(11):83-85

[10]刘静,张郭军.VBA程序开发在办公自动化中的应用[J].渭南师范学院学报,2009,24(5):48

猜你喜欢
控件调用报表
基于.net的用户定义验证控件的应用分析
核电项目物项调用管理的应用研究
系统虚拟化环境下客户机系统调用信息捕获与分析①
关于.net控件数组的探讨
镇长看报表
利用RFC技术实现SAP系统接口通信
基于嵌入式MINIGUI控件子类化技术的深入研究与应用
月度报表
月度报表
年终总结