?

利用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控件注冊和撤消注冊兩個函數進行程序代碼自動注冊??丶院统蜂N注冊函數分別是 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控件子類化技術的深入研究與應用
月度報表
月度報表
年終總結
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合