李红岩,谢敏敏
哈尔滨医科大学大庆校区,黑龙江 大庆 163319
作为一款功能强大的多媒体开发软件,Authorware拥有丰富的函数和强大的编程能力,提供知识对象功能,我们只需通过使用流程线以及一些工具图标,便可以制作出交互性强、具有表现力的多媒体产品。Authorware本身的作图功能不是很强,偏重于将其他应用程序制作的声音文件、电影文件、动画文件、图形文件等集成为一个多媒体文件[1]。因此,Authorware具有简单易学、编程灵活的特点,但恰恰就是因为这种特点,决定了其软件功能相对比较简单[2],局限性很强。该文目的主要是实现Authorware与Excel交互功能,进而实现Authorware报表输出的功能。通过变量、函数以及各种表达式,结合VBA编程开发进一步挖掘Authorware的潜力,集Authorware开发多媒体的功能与Microsoft Office Excel软件的报表输出等功能于一身,扩展多媒体软件的功能和应用范围。
VB提供的嵌入到Excel中的程序设计语言(visualbasic for application,VBA)是微软公司为其办公套件Microsoft Office提供的新一代标准宏语言,作为一种通用的宏语言能被所有的Microsoft可编程应用软件所共享,用于实现Office中的应用程序自动化,并创建自定义的解决方案。
VBA主要是根据用户对可编程应用软件中不同对象的操作,触发相应事件,去激活相应的程序,通过对相关对象执行不同的方法,或者修改相关对象的属性来完成特定的工作[3]。通过VB制作的ActiveX是一组基于组件模型(component object model,COM)的技术,其目标是提供一种与操作系统平台无关的、可在应用程序之间相互访问对象的机制[4]。ActiveX控件具备了语言无关性,只要经过系统注册便可被其他软件正常调用。
Authorware通过UCD的“ODBC.U32”库函数包与目前常用的Access、SQL Server、Oracle等关系型数据库实现连接[5]的方法已应用得非常普遍。该文将在ActiveX中通过VBA代码实现与数据库的连接。
首先启动Access,创建一个简单的数据库文件Prescribe.mdb,存入 D:Program Files中,其中包含一个表单prescriber。该表单内容如表1所示。
表1 prescriber表
现在所有的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文件。
使用ActiveX控件之前,先对其进行系统注册。以管理员身份运行命令提示符,输入regsvr32 XXX.OCX回车,弹出提示框显示DllRegisterServer在XXX.OCX已成功,表明系统注册成功[9]。然后在Authorware中多使用ActiveX控件注册和撤消注册两个函数进行程序代码自动注册。控件注册和撤销注册函数分别是 ActiveXControlRegister(″XXX.OCX″)和ActiveXControlRegister(″XXX.OCX″)。
在实现ActiveX控件注册之后,用户使用“插入”→“控件”→“ActiveX”命令打开SelectActiveXControl对话框。添加到之前制作的ActiveX控件流程线上,同时可对控件的属性进行设置。完成ActiveX控件添加后就可以运行程序看到最终的运行效果,如图1所示。当然,根据需要也可以对Excel进行隐藏,直接将排出的表格打印输出,这样可以形成较为复杂的报表功能。
图1 流程图与运行效果图
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