VBA的Excel基本原理和應用
摘要:直到90年代早期,使應用程序自動化還是充滿挑戰(zhàn)性的領域,。對每個需要自動化的應用程序,,人們不得不學習一種不同的自動化語言。例如:可以用EXCEL的宏語言來使EXCEL自動化,,使用WORD BASIC使WORD自動化,,等等。微軟決定讓它開發(fā)出來的應用程序共享一種通用的自動化語言——Visual Basic For Application(VBA)來一統大局,。
關鍵詞:VBA,、Excel、VBA/Excel
㈠ 一些基本概念
一,、什么是VBA
Excel是什么這里就不多說了,。Visual Basic for Applications(簡稱VBA)是新一代標準宏語言,是基于Visual Basic for Windows 發(fā)展而來的,。它與傳統的宏語言不同,,傳統的宏語言不具有高級語言的特征,沒有面向對象的程序設計概念和方法,。而VBA 提供了面向對象的程序設計方法,,提供了相當完整的程序設計語言,。VBA 易于學習掌握,可以使用宏記錄器記錄用戶的各種操作并將其轉換為VBA 程序代碼,。這樣用戶可以容易地將日常工作轉換為VBA 程序代碼,,使工作自動化。因此,,對于在工作中需要經常使用Office 套裝軟件的用戶,,學用VBA 有助于使工作自動化,提高工作效率,。另外,由于VBA 可以直接應用Office 套裝軟件的各項強大功能,,所以對于程序設計人員的程序設計和開發(fā)更加方便快捷,。 可以認為VBA是非常流行的應用程序開發(fā)語言VISUAL BASIC 的子集。實際上VBA是寄生于VB應用程序的版本,。VBA和VB的區(qū)別包括如下幾個方面: 1. VB是設計用于創(chuàng)建標準的應用程序,,而VBA是使已有的應用程序(EXCEL等)自動化; 2. VB具有自己的開發(fā)環(huán)境,,而VBA必須寄生于已有的應用程序,; 3. 要運行VB開發(fā)的應用程序,用戶不必安裝VB,,因為VB開發(fā)出的應用程序是可執(zhí)行文件(*.EXE),,而VBA開發(fā)的程序必須依賴于它的父應用程序,例如EXCEL,。 盡管存在這些不同,,VBA和VB在結構上仍然十分相似。事實上,,如果已經了解了VB,,會發(fā)現學習VBA非常快,。相應的,,學完VBA會給學習VB打下堅實的基礎。而且,,當學會在EXCEL中用VBA創(chuàng)建解決方案后,,即已具備在WORD、ACCESS,、OUTLOOK,、FOXPRO、PROWERPOINT中用VBA創(chuàng)建解決方案的大部分知識,。
二,、什么是Excel應用程序
Excel知道是什么了,,那么Excel應用程序是什么呢?其實說起來很簡單:利用Excel和VBA為平臺,,開發(fā)出來的電子數據表即稱之為Excel應用程序,。
三、什么是宏
宏是一系列的命令與函數,,存儲于 Visual Basic 的模塊中,,并在需要執(zhí)行該項任務時可隨時運行。如果經常在重復某項任務,,那么可以用宏自動執(zhí)行該任務,。Office中,宏可以手動錄制,,也可以自己輸入代碼制作,。
以上是VBA的三個概念,那么為什么要用VBA,?為什么要以Excel為平臺來開發(fā)程序,?這里說幾個簡單的理由: 1. 當使用Excel為平臺時,你的程序就可以利用Excel現有的功能,,相當于站在一個小巨人的肩膀上,,這就可以大大減少開發(fā)的周期; 2. 幾乎所有的電腦中都有Excel,,也有大量的人正在是用Excel,,但并不是每個人都會使用VBA,當你了解VBA后,,以前的很多問題就可以迎刃而解了,; 3. Excel開發(fā)程序很容易,只要電腦中有Excel,,基本不需要其他的文件,,簡簡單單的復制與粘貼,就完成了程序的開發(fā),; 4. VBA的語言是相對容易學的語言,,很容易上手,如果你熟悉VB,,那你發(fā)現它們在語言方面是相通的,,而如果你對Excel比較了解,那你也就很容易理解Excel的各種對象了,。
㈡ VBA的Excel基本應用
Application對象是Excel對象模型的頂層,,表示整個Excel應用程序。在VB應用程序中調用Excel,就是使用Application對象的屬性,、方法和事件,。為此,首先要聲明對象變量:
Dim VBExcel As Object ①
或直接聲明為Excel對象:
Dim VBExcel As Excel.Application
在聲明對象變量之后,,可用CreateObject函數或GetObject函數給變量賦值新的或已存在的Application對象引用,。 1. 用CreateObject函數生成新的對象引用:
Set VBExcel=CreateObject ("Excel.Application")
字符串"Excel.Application"是提供Excel應用程序的編程ID,這個變量引用Excel應用程序本身,。 2. 用GetObject函數打開已存在的對象引用:
Set AppExcel=GetObject("SAMP.XLS")
上面語句打開文件SAMP.XLS,。
一、 Application對象常用的屬性,、方法
示例1: 求值數學表達式:
Dim VBExcel As Object Set VBExcel=CreateObject ("Excel.Application") X=VBExcel. Evaluate ("3+5*(cos (1/log (99. 9)))")
二、使用Excel應用程序
如前所述,,在VB應用程序中調用Excel應用程序,就是使用Application對象的屬性,、方法和事件,。下面分類給出其中常用的屬性和方法。
1. 使用工作薄
Workbook對象代表Excel應用程序中當前打開的一個工作簿,,包含在Workbooks集合中,。可以通過Workbooks集合或表示當前活動工作簿的Active Workbook對象訪問Workbook對象,。
下面語句可將活動工作簿的2到5頁打印3份:
ActiveWorkbook.PrintOut From:=2 To 5 Copies:=3
示例2: 生成,、保存,、關閉工作簿:
Dim VBExcel As Excel.Application Set VBExcel= CreateObject("Excel.Application") With VBExcel .Workbooks.Add With ActiveWorkbook .Save As"C:\Temp\OUTPUT.XLS" .Close End With .Quit End With
本例實際操作過程詳解: 1. 新建一個Excel表格,筆者保存在桌面,文件名為“Book1.xls”,,打開后選擇“視圖→工具欄→Visual Basic”調出Visual Basic工具欄:
2. 點擊紅圈圈住的按鈕進入Visual Basic編輯器:
3. 右鍵單擊VBAProject,,按圖示插入一個模塊:
4. 構建auto_open()函數,讓代碼在Book1.xls啟動時就自動運行,在代碼框中輸入“Sub auto_open()”,,回車后自動生成“End Sub”,,將以上代碼復制粘貼到兩者中間,如圖:
5. 保存退出VBA編輯器及Excel,,建立C:\Temp目錄:
6. 打開Book1.xls,,會跳出一個提示框,點擊“啟用宏”,,代碼中的“auto_open()”事件在Book1.xls打開時自動運行:
7. 現在可以去看C:\Temp目錄的情況了:
以下代碼不再進行詳細解說,,感興趣的話可以自行嘗試。
2. 使用工作表 Sheets集合表示工作簿中所有的工作表,??梢酝ㄟ^Sheets集合來訪問、激活,、增加,、更名和刪除工作表。一個Worksheet對象代表一個工作表,。 常用的屬性,、方法有:
示例3:將C盤工作簿中的工作表復制到F盤工作簿中:
Dim VBExcel As Excel.Application Set VBExcel=CreateObject("Excel.Application") With VBExcel .Workbooks.Open "C:\Temp\OUTPUT.XLS" .Workbooks.Open "F:\OUTPUT1.XLS" .Workbooks("OUTPUT.XLS").Sheets ("Sales").Copy .Workbooks("OUTPUT1.XLS) .Workbooks("OUTPUT1.XLS").Save .Workbooks("OUTPUT.XLS").Close .Workbooks("OUTPUTI.XLS").Close .Quit End With
3. 使用單元范圍
Range對象代表工作表的某一單元格、某一行,、某一列,、某一選定區(qū)域或者某一三維區(qū)域。 常用的屬性,、方法有:
4. 使用圖表
Chart對象代表工作簿中的圖表,。該圖表既可為嵌人式圖表(包含于ChartObject對象中)也可為分立的圖表工作表。 常用方法有:
可組合使用Add方法和ChartWizard方法,以創(chuàng)建包含工作表中數據的圖表工作表,。下例基于工作表"Sheetl"中單元格區(qū)域"A1:A20"中的數據生成新的折線圖并打印,。
With Charts.Add .ChartWizard source:=Worksheets ("sheet1").Range ("a1:a20"),gallery:=xlLine,title:="折線圖表" .Printout End With
5. 使用Excel工作表函數 在VB語句中可使用大部分的Excel工作表函數,可通過WorksheetFunction對象調用Excel工作表函數,。下面的Sub過程用Min工作表函數求出指定區(qū)域中單元格的最小值,,并通過消息框顯示結果值。
Sub UseFunction() Dim myRange As Range Set myRange=Worksheets ("Sheet1").Range("B2:F10") answer=Application.WorksheetFunction.Min(myRange) MsgBox answer End Sub
如果使用以區(qū)域引用為參數的工作表函數,,必須指定一個Range對象,。如可用Match工作表函數對A1:A10區(qū)域的所有單元格進行搜索。
Sub FindFirst() my Var=Application.WorksheetFunction.Match (9,Worksheets( 1).Range("A1:A10"),0) MsgBox myVar End Sub
要在單元格中插人工作表函數,,可將該函數指定為對應于Range對象的Formula屬性值,。在以下示例中,將當前工作簿Sheetl內A1:B3區(qū)域的Formula屬性指定為RAND工作表函數(此函數產生二個隨機數),。
Sub InsertFormula() Worksheets ("Sheet1").Range("A1:B3").Formula="RAND()" End Sub
最后,,任何東西都不是萬能的,Excel與VBA也是一樣如,,Excel是一個電子表格程序,,如果你把它強加成數據庫軟件是不公平的,在處理較少的數據,,比如幾千行的,用Excel是比較理想的,,而大量的數據時,,你就應該考慮用數據庫了,比如Microsoft Office中的Access等,,或者將兩個相結合,。充分了解Excel的基本知識與VBA的編程技巧,你就會從中獲得樂趣,,讓我們一起來吧,,走進VBA的世界中。
注解: ① 代碼部分用灰色底紋標識
參考文獻
http://baike.baidu.com/view/88461.htm http://hi.baidu.com/ztoxet/blog/item/f18149dfe2d29615495403f7.html http://tech./2006-10/11609006399673.html
【P.S:本文是我08年上學期《網絡化辦公應用教程》的期末考試論文,,大部分文字來源于網絡(絕無侵權之意),,自己排版、畫表格,,其中實例操作部分圖片,、文字原創(chuàng)為(因為第一次交上去老師要讓加圖片后重新提交,,網上又找不到圖片,就只好自己弄了- -|||),。應該不會有太多人去研究吧,,只希望對一些想要研究的朋友能有幫助咯~~】 |
|