1 / 46

VBA

VBA. 3-1 認識 VBA 及其應用. Visual Basic for Application 又稱 VBA ,是一種程式語言,可隨著不同的應用軟體透過對應的語法來設計,從 Office2000 開始, Office 間應用軟體的 VBA 即可互通了 。 VBA 應用很廣,小則應用它來設計一個 Word 沒提供的 函數, 本書此章節的目的,是要讓使用者對 Word 的 VBA 有一初步概念。. 3-2 VBA 程式語言基本結構. VBA 是一種物件導向程式語言,跟一般語言一樣,其基本架構為 Sub 函數或程序名稱 () ‘ 定義 ( 宣告 ) 函數或程序

Download Presentation

VBA

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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程式語言基本結構-續 • VBA的程式碼是由許多陳述式集合而成,包含宣告其實也是一種陳述式,陳述式會執行VBA的動作,每一個正確的指令,都會產生對應的動作,例如引發物件啟動、計算或結束程式等。 • 陳述式約分為4類:(1)宣告陳述式(2)指定陳述式及設定物件屬性(3)條件及迴圈陳述式(4)執行物件的方法。 • 剛開始時,我們可藉由前一章所錄的巨集產生的VBA成式碼來學習各種用法,對初學者效果不錯哦! • 先看一個例子感受一下!下面的 Sub 程序當文件開啟時會詢問今日日期若錯誤則離開此應用程式(Word) • Sub Document_Open() • IF InputBox(“請輸入今日日期”) = Day(Now()) Then • 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 Project),按右鍵,叫出快顯功能表,選擇此專案的屬性。

  8. VBA操作環境-續 • Step4:開啟[專案屬性]交談窗,將專案名稱改成「star」(原為Projecct),也可以用密碼保護我們的專案,不讓別人看到專案內容,如程式。

  9. VBA操作環境-續 • Step5:VBA的物件導向式語法,有非常多的方法及屬性,其中各有不同的參數,不用強記,可以在屬性或方法的字上(例如RGB)按右鍵,叫出快顯功能表,選擇「列出屬性或方法」。

  10. VBA操作環境-續 • Step6:就可直接跳到最接近的屬性或方法項下,按一下,就會出現相關的線上說明,可以複製說明檔上面的程式,直接拿過來用哦!

  11. VBA操作環境-續 • Step7:輸入方法或屬性時,若有參數,輸入「(」時會出現參數指引說明。

  12. VBA操作環境-續 • Step8:輸入程式時請用小寫英文即可,它會自動幫你轉成大小寫,以及用顏色區分,藍色為VBA與法的保留字或關鍵字,不可拼錯,黑色為程式的變數、宣告或陳述,而綠色則是註解。如果我輸入「if x1=40」 按[Enter]鍵,立刻會告訴你錯誤訊息,並告訴你怎麼做,而且用紅色的字標示出錯誤的那一列,是不是很方便,剛開始只要沒出現紅色的字,表示程式沒有大錯,就可以執行了。

  13. VBA操作環境-續 • Step9:我們先來看一個設定字型格式變化的程序,都在每一行後面有說明註解(註解以’為開始)。

  14. VBA基本結構-程序或函數 • 一般我們用VBA最多的就是程序或函數了,程序是一連串可執行的指令結合在一起,例如前一章所錄製的巨集,主要目的是讓多個重複的動作在一起執行,減少我們操作的時間;而函數則是根據使用者傳入的參數,做一些運算後傳回一個結果的值。 • Step1:執行[插入/程序]。 • Step2:在[新增程式]交談窗,輸入名稱為「leapyear」,型態為「Sub」表示為一個「程序」程式。 • Step3:按確定後,自動在程式視窗加入了一段定義程序的宣告與結束指令,我們可以開始依據需要在這個程序中間加入我們需要的程式指令了!

  15. VBA基本結構-程序或函數 • Step4:假設寫好了,想試試看如何執行,這裡我們以上一節改變字型格式的程序「font20b」來示範,到Word中,選取一段文字,按「Alt+F8」,開啟巨集交談窗,選取一個巨集名稱來[執行]。 • Step5:若沒有錯誤,就可以看到程式執行的結果。

  16. VBA基本結構-程序或函數 • Step6:現在我們在來看看「函數」程式是怎麼做跟怎麼執行的?在[新增程式]交談窗,輸入名稱為「leapyear1」,型態為「Function」表示為一個「函數」程式。在同一模組下,程序或函數名稱都不可重複。 • Step7:按確定後,一樣自動在程式視窗加入了一段定義函數的宣告與結束指令,所不同的是程序的關鍵字是Sub,而函數是Function,同樣都以End來結束程式。 • Step8:雖然透過[插入/程序]產生了一小小段程式,我們還是可以在程式視窗直接修改它哦!也可以直接複製一段程序或函數來修改,這裡我們就把「leapyear1」改為「slength」,我們想利用畢氏定理來計算三角形的斜邊,而無論是程序或函數都不一定要傳入參數,但宣告程序或函數後的「( )」左右括號一定要存在,在這裡我們需要三角型的兩邊,所以我們就在括號中定義了兩個傳入的參數x1及y1,資料型態都是整數。

  17. VBA基本結構-常數、變數與資料型態 • 通常會使用 Dim陳述式來宣告變數。 • Dim 陳述式的語法為: • Dim 變數名稱 [as 資料型態] . . . ([ ]內的表示可省略) • 在 Dim 陳述式的語法中,Dim 是必備的關鍵字。而唯一必備的元素是變數名稱。 • 變數可以宣告成下列資料型態中的一者:Boolean、Byte、Integer、Long、Currency、Single、Double、Date、String(可變長度字串)、String * length (固定長度字串)、Object 或 Variant。如果您未指定資料型態,則 Variant資料型態會被指定成預設型態。在宣告陳述式中,您不一定要提供變數的資料型態,若省略資料型態的則會將變數設成 Variant 型態。

  18. 常數、變數與資料型態 • 變數的命名規則: • (1)必須以字母為開頭。 • (2)不可以包含句號、關鍵字及型態宣告字元。 • (3)不能超過255個字。 • (4)如果這個陳述式出現在程序中,則此變數只可以在此程序中被使用。如果這個陳述式出現在模組中的 宣告 區段,則此變數可以被此模組中所有的程序所使用,但是不能被同一專案中不同的模組所含程序來使用。為了使變數可被專案中所有的程序所使用,則在變數名稱前加上Public陳述式。

  19. 常數、變數與資料型態 • 宣告常數 • 我們使用 Const 陳述式宣告部份常用到的文數字設為常數。例如: • ' 常數的預設狀態是 Private。 • Const MyVar = 459 • ' 宣告 Public 常數。 • Public Const MyString = "HELP" • ' 在同一行裏宣告多個常數。 • Const MyStr = "Hello", MyDouble As Double = 3.4567 • 宣告變數 • Dim x1 as Integer, y2 as Object • Sub slength()

  20. VBA基本結構-物件式導向語法-物件 • 物件導向程式中,有四個很重要的元件,(1)物件(2)屬性(3)方法及(4)事件,而當我們把物件相關的屬性,執行的方法,引發的事件,依物件導向語法組合在一起就是所謂的指令或陳述式。 • 物件 • Word中常見的物件有按鈕、範圍、文件等等,在程式中為了使用方便,將某些同型態的物件集合在一起,稱為物件集,其關鍵字為英文的複數型態,如Tables,例如想在第c個表格的Formlength列刪除,可以這樣寫: • Set MyTable = ActiveDocument.Tables(c) • MyTable.Rows(Formlength).Delete

  21. VBA基本結構-物件式導向語法-物件 我們可以在VBA環境的一般工具列上按瀏覽物件,可看到有相當多的物件類型。

  22. VBA基本結構-物件式導向語法-屬性 • 屬性:各種不同的物件,各有其特定的性質,我們稱之為屬性,通常我們利用屬性來控制物件的外觀,如設定儲存格的字型、顏色等,我們常用指定陳述是來達成。 • 物件.屬性=設定值 或 變數=物件.屬性 • Step1:例如在物件Font上,按右鍵,執行快顯功能表中的[說明]。

  23. VBA基本結構-物件式導向語法-屬性 • Step2:會開啟Font的線上說明,亦會介紹其相關的屬性、方法及事件等,樣可以複製到我們的程式視窗。

  24. VBA基本結構-物件式導向語法-方法 • 方法 • 除了用屬性來改變物件外,還可以使用方法來要求物件做一些動作,參下圖,可以看到Tables成員中前半部的屬性都為名詞,而後半部的方法都為動詞。

  25. VBA基本結構-物件式導向語法-事件 • 事件是指要執行或驅動某一物件執行一些動作所發出的訊息,如按一下滑鼠,按一下鍵盤或開啟文件,另外我們也可以透過我們寫的程式碼來驅動或導致某些事件的發生。如下,我們可以看物件可以有哪些事件。 • CommandButton1(按鈕)物件,有Click(按一下),DbClick(按二下)...等等事件。

  26. 程式的控制結構-使用 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 陳述式 • 若要執行多行程式碼的話,您必須使用多行的語法,而此語法須包含 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 陳述式可以定義兩個可執行的陳述式區塊:其中一個區塊會在條件式為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. 程式的控制結構-使用 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 • 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 陳述式會計算傳送給此程序的引數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 > 8 • Bonus = 100 • Case Else • Bonus = 0 • End Select • End Function

  31. 程式的控制結構-使用 Do...Loop 陳述式 • 您可以使用 Do...Loop 陳述式去執行一個區塊的陳述式,而它所用掉的時間是不確定的。當條件式為 True 或直到條件式變成 True 之前,此陳述式會一直重複。 • (1)重複陳述式直到條件式為 True • 當使用 While 關鍵字去檢查 Do...Loop 陳述式中的條件式時,可以有兩種不同的方式。您可以在進入迴圈之前檢查條件式,也可以在迴圈至少執行一次之後才檢查條件式。 • 在下面的 ChkFirstWhile 程序中,是在進入迴圈之前檢查條件式。如果 將 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 陳述式 • (2)從 Do...Loop 陳述式中離開 • 您可以使用 Exit Do 陳述式來離開 Do...Loop 陳述式。舉例而言,為了離開無窮迴圈,可以將 Exit Do 陳述式放在 If...Then...Else 陳述式或是 Select Case 陳述式中的 True 陳述式區塊。如果條件式為 False,則迴圈會像平常一樣執行。可以按下 ESC 或 CTRL+BREAK 來終止無窮迴圈。

  33. 程式的控制結構-使用 For...Next 陳述式 • 您可以使用 For...Next 陳述式去執行一個區塊的陳述式,而它所用掉的時間是特定的。For 迴圈使用一個計數變數,當反覆的執行迴圈時它的值會增加或減少。 • 下面的程序會讓電腦發出嗶聲 50 次。For 陳述式會指定計數變數 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應用簡例-以程序來判斷星座 • 我們以今日日期中的「月」和「日」的資料來判斷,因為是程序,必須,輸入如下程式,並將結果已MsgBox顯示出來。 • Step1:輸入程式後,都沒有紅色警戒(錯誤語法),先存檔。

  36. 3-3 VBA應用簡例-以函數來判斷閏年 • 判斷閏年的方法如下: • 西元年,被4整除?no->不是閏年 • yes,被100整除?-no->是閏年 yes,被400整除?no->不是閏年 yes->是閏年 • Step1:如果我們關閉了程式視窗,只要在[專案視窗]上按[檢視程式碼]即可。

  37. 3-3 VBA應用簡例-以函數來判斷閏年 • Step2:插入一函數,並輸入一參數為日期型態,取參數的「年」資料,按判斷閏年的邏輯來寫出下列程式碼,跟上一題一樣,先檢查是否為有效日期。

  38. 3-3 VBA應用簡例-以表單來作表格處理 • 大型的資訊系統開發,通常是讓使用者從主選單執行的,我們就來做一個簡單的主選單。 • Step1:再VBA操作環境下,執行[插入/自訂表單]。 • Step2:在屬性視窗中,將表單的標題(caption)改成「表格處理」。

  39. 3-3 VBA應用簡例-以表單來作表格處理 • Step3:按一般工具列上之[工具箱]鈕,叫出[工具箱]工具列。

  40. 3-3 VBA應用簡例-以表單來作表格處理 • Step4:選擇[標籤]工具。

  41. 3-3 VBA應用簡例-以表單來作表格處理 • Step5:我們依序又做了 4個標籤 4個文字盒 2個按鈕

  42. 3-3 VBA應用簡例-以表單來作表格處理 • Step6:並定義了相對的事件程序

  43. 3-3 VBA應用簡例-以表單來作表格處理 • Step6:並定義了相對的事件程序

  44. 3-3 VBA應用簡例-以表單來作表格處理 • Step7:試試看,重新開啟此文件,按[啟用巨集]鈕。

  45. 常用函數表

  46. 作業A 請撰寫表格處理的輸入動作之程式 • 須判別列與欄輸入位置是否在範圍內 • 將表格的儲存格內容以資料來取代 • 在列與欄文字盒內填入下一筆資料輸入位置

More Related