版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1,VBA,2,3-1 認識VBA及其應用,Visual Basic for Application 又稱VBA,是一種程式語言,可隨著不同的應用軟體透過對應的語法來設計,從Office2000開始,Office間應用軟體的VBA即可互通了 。 VBA應用很廣,小則應用它來設計一個Word沒提供的函數,本書此章節的目的,是要讓使用者對Word的VBA有一初步概念。,3,3-2 VBA程式語言基本結構,VBA是一種物件導向程式語言,跟一般語言一樣,其基本架構為 Sub 函數或程序名稱() 定義(宣告)函數或程序 宣告1 宣告2 . 陳述式1 陳述式2 . End Sub,4,VBA程式語言基本結
2、構-續,VBA的程式碼是由許多陳述式集合而成,包含宣告其實也是一種陳述式,陳述式會執行VBA的動作,每一個正確的指令,都會產生對應的動作,例如引發物件啟動、計算或結束程式等。 陳述式約分為4類:(1)宣告陳述式(2)指定陳述式及設定物件屬性(3)條件及迴圈陳述式(4)執行物件的方法。 剛開始時,我們可藉由前一章所錄的巨集產生的VBA成式碼來學習各種用法,對初學者效果不錯哦! 先看一個例子感受一下!下面的 Sub 程序當文件開啟時會詢問今日日期若錯誤則離開此應用程式(Word) Sub Document_Open() IF InputBox(“請輸入今日日期”) = Day(Now() Then
3、 MsgBox “歡迎使用此文件” Else Application.Quit End If End Sub,5,VBA操作環境,Word提供了一個很好的VBA操作環境,來讓我們寫程式,我們現在就來看看! Step1:執行工具/巨集/Visual Basic編輯器或按Alt+F11快速鍵。,6,VBA操作環境-續,Step2:進入VBA操作環境視窗後,會看到左上方的專案視窗,左下的屬性視窗,以及右邊的程式視窗,這時你可以透過視窗工作列切換到Word環境或再切換到VBA環境,也可以透過檢視把其他工具列叫出來。,7,VBA操作環境-續,Step3:在專案視窗上,選取專案名稱(預設為VB Proje
4、ct),按右鍵,叫出快顯功能表,選擇此專案的屬性。,8,VBA操作環境-續,Step4:開啟專案屬性交談窗,將專案名稱改成star(原為Projecct),也可以用密碼保護我們的專案,不讓別人看到專案內容,如程式。,9,VBA操作環境-續,Step5:VBA的物件導向式語法,有非常多的方法及屬性,其中各有不同的參數,不用強記,可以在屬性或方法的字上(例如RGB)按右鍵,叫出快顯功能表,選擇列出屬性或方法。,10,VBA操作環境-續,Step6:就可直接跳到最接近的屬性或方法項下,按一下,就會出現相關的線上說明,可以複製說明檔上面的程式,直接拿過來用哦!,11,VBA操作環境-續,Step7:輸
5、入方法或屬性時,若有參數,輸入(時會出現參數指引說明。,12,VBA操作環境-續,Step8:輸入程式時請用小寫英文即可,它會自動幫你轉成大小寫,以及用顏色區分,藍色為VBA與法的保留字或關鍵字,不可拼錯,黑色為程式的變數、宣告或陳述,而綠色則是註解。如果我輸入if x1=40 按Enter鍵,立刻會告訴你錯誤訊息,並告訴你怎麼做,而且用紅色的字標示出錯誤的那一列,是不是很方便,剛開始只要沒出現紅色的字,表示程式沒有大錯,就可以執行了。,13,VBA操作環境-續,Step9:我們先來看一個設定字型格式變化的程序,都在每一行後面有說明註解(註解以為開始)。,14,VBA基本結構-程序或函數,一般
6、我們用VBA最多的就是程序或函數了,程序是一連串可執行的指令結合在一起,例如前一章所錄製的巨集,主要目的是讓多個重複的動作在一起執行,減少我們操作的時間;而函數則是根據使用者傳入的參數,做一些運算後傳回一個結果的值。 Step1:執行插入/程序。 Step2:在新增程式交談窗,輸入名稱為leapyear,型態為Sub表示為一個程序程式。 Step3:按確定後,自動在程式視窗加入了一段定義程序的宣告與結束指令,我們可以開始依據需要在這個程序中間加入我們需要的程式指令了!,15,VBA基本結構-程序或函數,Step4:假設寫好了,想試試看如何執行,這裡我們以上一節改變字型格式的程序font20b來
7、示範,到Word中,選取一段文字,按Alt+F8,開啟巨集交談窗,選取一個巨集名稱來執行。 Step5:若沒有錯誤,就可以看到程式執行的結果。,16,VBA基本結構-程序或函數,Step6:現在我們在來看看函數程式是怎麼做跟怎麼執行的?在新增程式交談窗,輸入名稱為leapyear1,型態為Function表示為一個函數程式。在同一模組下,程序或函數名稱都不可重複。 Step7:按確定後,一樣自動在程式視窗加入了一段定義函數的宣告與結束指令,所不同的是程序的關鍵字是Sub,而函數是Function,同樣都以End來結束程式。 Step8:雖然透過插入/程序產生了一小小段程式,我們還是可以在程式視
8、窗直接修改它哦!也可以直接複製一段程序或函數來修改,這裡我們就把leapyear1改為slength,我們想利用畢氏定理來計算三角形的斜邊,而無論是程序或函數都不一定要傳入參數,但宣告程序或函數後的( )左右括號一定要存在,在這裡我們需要三角型的兩邊,所以我們就在括號中定義了兩個傳入的參數x1及y1,資料型態都是整數。,17,VBA基本結構-常數、變數與資料型態,通常會使用 Dim 陳述式來宣告變數。 Dim 陳述式的語法為: Dim 變數名稱 as 資料型態 . . .( 內的表示可省略) 在 Dim 陳述式的語法中,Dim 是必備的關鍵字。而唯一必備的元素是變數名稱。 變數可以宣告成下列資
9、料型態中的一者:Boolean、Byte、Integer、Long、Currency、Single、Double、Date、String(可變長度字串)、String * length (固定長度字串)、Object 或 Variant。如果您未指定資料型態,則 Variant資料型態會被指定成預設型態。在宣告陳述式中,您不一定要提供變數的資料型態,若省略資料型態的則會將變數設成 Variant 型態。,18,常數、變數與資料型態,變數的命名規則: (1)必須以字母為開頭。 (2)不可以包含句號、關鍵字及型態宣告字元。 (3)不能超過255個字。 (4)如果這個陳述式出現在程序中,則此變數只可
10、以在此程序中被使用。如果這個陳述式出現在模組中的 宣告 區段,則此變數可以被此模組中所有的程序所使用,但是不能被同一專案中不同的模組所含程序來使用。為了使變數可被專案中所有的程序所使用,則在變數名稱前加上 Public 陳述式。,19,常數、變數與資料型態,宣告常數 我們使用 Const 陳述式宣告部份常用到的文數字設為常數。例如: 常數的預設狀態是 Private。 Const MyVar = 459 宣告 Public 常數。 Public Const MyString = HELP 在同一行裏宣告多個常數。 Const MyStr = Hello, MyDouble As Double
11、= 3.4567 宣告變數 Dim x1 as Integer, y2 as Object Sub slength(),20,VBA基本結構-物件式導向語法-物件,物件導向程式中,有四個很重要的元件,(1)物件(2)屬性(3)方法及(4)事件,而當我們把物件相關的屬性,執行的方法,引發的事件,依物件導向語法組合在一起就是所謂的指令或陳述式。 物件 Word中常見的物件有按鈕、範圍、文件等等,在程式中為了使用方便,將某些同型態的物件集合在一起,稱為物件集,其關鍵字為英文的複數型態,如Tables,例如想在第c個表格的Formlength列刪除,可以這樣寫: Set MyTable = Activ
12、eDocument.Tables(c) MyTable.Rows(Formlength).Delete,21,VBA基本結構-物件式導向語法-物件,我們可以在VBA環境的一般工具列上按瀏覽物件,可看到有相當多的物件類型。,22,VBA基本結構-物件式導向語法-屬性,屬性:各種不同的物件,各有其特定的性質,我們稱之為屬性,通常我們利用屬性來控制物件的外觀,如設定儲存格的字型、顏色等,我們常用指定陳述是來達成。 物件.屬性=設定值或 變數=物件.屬性 Step1:例如在物件Font上,按右鍵,執行快顯功能表中的說明。,23,VBA基本結構-物件式導向語法-屬性,Step2:會開啟Font的線上說明
13、,亦會介紹其相關的屬性、方法及事件等,樣可以複製到我們的程式視窗。,24,VBA基本結構-物件式導向語法-方法,方法 除了用屬性來改變物件外,還可以使用方法來要求物件做一些動作,參下圖,可以看到Tables成員中前半部的屬性都為名詞,而後半部的方法都為動詞。,25,VBA基本結構-物件式導向語法-事件,事件是指要執行或驅動某一物件執行一些動作所發出的訊息,如按一下滑鼠,按一下鍵盤或開啟文件,另外我們也可以透過我們寫的程式碼來驅動或導致某些事件的發生。如下,我們可以看物件可以有哪些事件。 CommandButton1(按鈕)物件,有Click(按一下),DbClick(按二下).等等事件。,26
14、,程式的控制結構-使用 If.Then.Else 陳述式,If.Then.Else 陳述式會根據條件式的值,而執行指定的陳述式或一個區塊的陳述式。If.Then.Else 陳述式可以依據您的需要而做多階層的巢狀執行。然而,為了可讀性您可能會使用 Select Case 陳述式而不使用多階層的巢狀 If.Then.Else 語法。下列的範例展示了單行語法,並省略了 Else 關鍵字: Sub FixDate() myDate = #2/13/95# If myDate Now Then myDate = Now End Sub,27,程式的控制結構-使用 If.Then.Else 陳述式,若要執
15、行多行程式碼的話,您必須使用多行的語法,而此語法須包含 End If 陳述式,如同下面範例所示: Sub AlertUser(value as Long) If value = 0 Then AlertLabel.ForeColor = Red AlertLabel.Font.Bold = True AlertLabel.Font.Italic = True End If End Sub,28,程式的控制結構-使用 If.Then.Else 陳述式,當條件式為 True,執行某些陳述式;條件式為 False,執行其餘的陳述式 使用 If.Then.Else 陳述式可以定義兩個可執行的陳述式區塊
16、:其中一個區塊會在條件式為True 時執行;而另一個區塊會在條件式為 False 時執行。 Sub AlertUser(value as Long) If value = 0 Then AlertLabel.ForeColor = vbRed AlertLabel.Font.Bold = True AlertLabel.Font.Italic = True Else AlertLabel.Forecolor = vbBlack AlertLabel.Font.Bold = False AlertLabel.Font.Italic = False End If End Sub,29,程式的控制結
17、構-使用 If.Then.Else 陳述式,當第一個條件式為 False 時,測試第二個條件式 當第一個條件式為 False 時,您可以在 If.Then.Else 陳述式中加上 ElseIf 陳述式來測試第二個條件式。舉例而言,下列的函數程序根據工作分類來計算獎金。如何所有 If 和 ElseIf 陳述式中條件式都是 False,則會執行緊接在 Else 陳述式之後的陳述式。 Function Bonus(performance, salary) If performance = 1 Then Bonus = salary * 0.1 ElseIf performance = 2 Then
18、Bonus = salary * 0.09 ElseIf performance = 3 Then Bonus = salary * 0.07 Else Bonus = 0 End If End Function,30,程式的控制結構-使用 Select Case 陳述式,將一個運算式與數個不同的值比較時,可以使用 Select Case 陳述式來取代在 If.Then.Else 陳述式中使用 ElseIf。If.Then.Else 陳述式會計算每個 ElseIf 陳述式中的運算式,而 Select Case 陳述式只會在控制結構的頂端計算一次運算式。 在下面的範例中,Select Case
19、陳述式會計算傳送給此程序的引數performance。請注意,每一個 Case 陳述式可以含有一個以上的值,一段範圍的值,或是一個組合值以及比較運算子。選擇性的 Case Else 陳述式只有在引數值無法與 Select Case 中所有的 Case 陳述式相符合時才會執行。 Function Bonus(performance, salary) Select Case performance Case 1 Bonus = salary * 0.1 Case 2, 3 Bonus = salary * 0.09 Case 4 To 6 Bonus = salary * 0.07 Case Is
20、 8 Bonus = 100 Case Else Bonus = 0 End Select End Function,31,程式的控制結構-使用 Do.Loop 陳述式,您可以使用 Do.Loop 陳述式去執行一個區塊的陳述式,而它所用掉的時間是不確定的。當條件式為 True 或直到條件式變成 True 之前,此陳述式會一直重複。 ()重複陳述式直到條件式為 True 當使用 While 關鍵字去檢查 Do.Loop 陳述式中的條件式時,可以有兩種不同的方式。您可以在進入迴圈之前檢查條件式,也可以在迴圈至少執行一次之後才檢查條件式。 在下面的 ChkFirstWhile 程序中,是在進入迴圈之
21、前檢查條件式。如果 將 myNum 的值由 20 替換成 9,則在迴圈中的陳述式將永遠不會執行。 在ChkLastWhile 程序中,在條件式變成 False 之前迴圈中的陳述式會一直執行。 Sub ChkFirstWhile() counter = 0 myNum = 20 Do While myNum 10 myNum = myNum - 1 counter = counter + 1 Loop MsgBox The loop made & counter & repetitions. End Sub,32,程式的控制結構-使用 Do.Loop 陳述式,()從 Do.Loop 陳述式中離開
22、 您可以使用 Exit Do 陳述式來離開 Do.Loop 陳述式。舉例而言,為了離開無窮迴圈,可以將 Exit Do 陳述式放在 If.Then.Else 陳述式或是 Select Case 陳述式中的 True 陳述式區塊。如果條件式為 False,則迴圈會像平常一樣執行。可以按下 ESC 或 CTRL+BREAK 來終止無窮迴圈。,33,程式的控制結構-使用 For.Next 陳述式,您可以使用 For.Next 陳述式去執行一個區塊的陳述式,而它所用掉的時間是特定的。For 迴圈使用一個計數變數,當反覆的執行迴圈時它的值會增加或減少。 下面的程序會讓電腦發出嗶聲 50 次。For 陳述
23、式會指定計數變數 x 的開始與結束值。Next 陳述式會將計數變數的值加 1。 Sub Beeps() For x = 1 To 50 Beep Next x End Sub,34,程式的控制結構-使用 For.Next 陳述式,使用 Step 關鍵字,可以增加或減少計數變數的值,並且增減值可由您指定。在下面的範例中,計數變數 j 會在迴圈重複時加上 2。當迴圈結束時,total 的值為 2、4、6、8 和 10 的總合。 Sub TwosTotal() For j = 2 To 10 Step 2 total = total + j Next j MsgBox The total is & total End Sub 為了減少計數變數的值,您可以使用負的 Step 值。在 Next 陳述式後面可以不用加上計數變數的名稱。在 For.Next 陳述式中您可以在計數變數到達它的結束值之前,使用 Exit For 陳述式來離開。舉例而言,當錯誤發生時可以將 Exit For 陳述式放在 If.Then.Else 陳述式或是 Select Case 陳述式中的 True 陳述式區塊,它是專門用來檢查此錯誤的。如果沒有錯誤發生,If.Then.Else 陳述式的值為 False,則迴圈會像預期一樣的執行。,35,3-3 VBA應用簡例-以程序來判斷星座,我們以今日日期中的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 初级西药职称考试题库及答案
- 全国科技经费投入统计调查制度
- 住院三级查房制度
- 企业的相关制度
- 企业产品成本核算制度
- 人事四项制度
- 物流园奖惩制度范本大全
- 异地恋情侣间奖惩制度
- 业务接洽人员奖惩制度
- 为防止财务资料外泄或丢失制定严格的资料查阅和备份制度
- 医疗卫生信息数据安全与隐私保护规范(标准版)
- 2026年合肥职业技术学院单招职业适应性测试题库含答案详解(基础题)
- OpenClaw发展研究报告
- 2026年春节后工地复工复产专项施工方案二
- 2025中国东方资产管理股份有限公司总部部门分公司高级管理人员社会招聘笔试历年典型考题及考点剖析附带答案详解2套试卷
- 制造业生产安全操作规范
- 2026春统编版二年级下册道德与法治教学设计(附目录)
- 《冠心病诊断与治疗指南(2025年版)》
- 2026年春人教版八年级下册英语Unit 1~Unit 8全册教案
- (081000)信息与通信工程专业考研复试高频面试题
- 外协生产管理制度范本
评论
0/150
提交评论