本篇是 Excel VBA 系列教程的一部分,後臺回復「VBA」獲取所有教程。
從本篇開始,我們進入 VBA 語法的另外一個重要概念,程序結構。
上一章學習的變量、數據類型、運算符等概念,是 VBA 中"靜態"的部分。相對的,程序結構是 VBA 中 "動態" 的部分。學習完程序結構,才能真正寫出可以運行的 VBA 程序。
本篇我們先介紹程序結構最常用的部分,深入學習前有一個基本概念。本章餘下的教程中,將詳細介紹每一個程序結構。
程序結構示例首先,本篇將使用以下代碼,介紹各種程序結構,大家可以先看一下。
Sub MyCode()
Dim i As Integer
Dim isBlank As Boolean
For i = 2 To 10
isBlank = Cells(i, 1).Value = ""
If isBlank Then
Cells(i, 1) = Cells(i - 1, 1)
End If
Next i
End Sub
以上代碼運行後,在 A2:A10 單元格區域,依次判斷每一個單元格是否為空,如果是空,則用上一個單元格的值填充。
過程過程是 VBA 中,程序實際運行的最小結構。單獨的一行或多行代碼無法運行,必須把它們放置在一個過程裡,才能運行。
在示例中,Sub 過程名() 開頭,End Sub 為結尾部分是一個過程的主題,其餘代碼需要放置在兩者之間。
Sub MyCode()
End Sub
語句,是表示一個完整意思的一行代碼。
例如,示例中第一行,聲明變量就是一條語句。它表示,聲明一個整型變量。同理,第二行、第三行和其餘的每一行都是語句。VBA 中的過程,就是由這樣一條條語句構成的。
Dim i As Integer
Dim isBlank As Boolean
通常,一行就是一個語句,除非它用換行符或合併符號,具體可以閱讀「VBA 運算符入門」。
Excel VBA 對象我們學習 VBA 的最終目的是操縱 Excel,完成一些特定的目標。其中,操縱 Excel 就是通過 Excel VBA 對象完成的。
在示例中,Cells() 就是一個 Excel VBA 對象,表示一個單元格,提供行號和列號指定單元格。
程序運行結構接下來是程序結構中最核心的部分,也是最有意思的部分,程序運行結構。大部分程式語言都具備基本的三種程序運行結構,分別是順序結構、循環結構、判斷結構。各種簡單到複雜的算法,都是由這三種基本的結構,相互組合而完成。
1.順序結構首先是基本的順序結構。順序結構,顧名思義就是按照順序依次執行。VBA 中的順序就是從上到下、從左到右的順序。
在示例中,首先運行兩個聲明語句,然後運行循環結構,以此類推。值得注意的事,當程序有嵌套時,嵌套的部分也是按照順序指定的。
2.循環結構第二個基本結構是循環結構。當使用循環結構時,循環部分代碼,按照指定的循環次數,循環重複執行。
在我們的示例中,For 至 Next i 之間的代碼就是一個循環代碼。
VBA 中,有多種循環結構,本例中是 For 循環結構。For 循環結構中,第一行指定循環次數,最後一行表示開始下一個循環。
For i = 2 To 10
Next i
最後一種基本結構是,判斷結構。簡單來說,該結構中,當提供的表達式為真(True)時,判斷結構的主體部分才會被執行,否則跳過。
在示例代碼中,If 開頭和 End If 結尾處是典型的判斷結構。第一行,判斷 isBlank 變量是否為真,如果是,則執行判斷結構主體部分,否則跳過。
If isBlank Then
Cells(i, 1) = Cells(i - 1, 1)
End If
通常,一段代碼寫完後,不會完全沒問題。在實際使用過程中可能需要修改,符合最新的需求。過一段時間再打開查看時,可能已經忘記了當時的思路,不能很快想起來有些代碼實際的用途,更不用說讓別人查看了。這時,就需要注釋出場了。
注釋是對代碼的一種解釋,不影響代碼的運行。VBA 中的注釋語句是,以英文單引號 (')開頭,後接需要解釋說明的內容。
注釋可以讓代碼更容易理解,建議從一開始就養成寫注釋的習慣。
運行下面,我們實際運行我們的示例代碼,看一看它具體的效果。
總結現在你學會了基本的 VBA 程序結構。可以運行的最小單位是 VBA 過程,一個 VBA 過程由一個或多個語句組成,每一個語句表示一個完整的含義。VBA 是按順序結構執行,遇到循環結構和判斷結構時,根據提供的參數循環重複執行,或跳過某一段代碼。
本章餘下教程,將詳細介紹以上每一部分。學完本章後,你就可以寫出一個完整可運行的 VBA 程序了。