目錄
第1 章 初步感受VBA 的魅力 .......................................................................................... 1
1.1 批量任務一鍵執行 ................................................................................................... 1
1.1.1 準備工作 ...................................................................................................... 1
1.1.2 程序測試 ...................................................................................................... 1
1.1.3 案例點評 ...................................................................................................... 2
1.2 數據匯總自動完成 ................................................................................................... 2
1.2.1 案例需求 ...................................................................................................... 2
1.2.2 程序測試 ...................................................................................................... 3
1.2.3 案例點評 ...................................................................................................... 3
1.2.4 開發專業程序 ............................................................................................... 4
第2 章 VBA 程序入門 ...................................................................................................... 5
2.1 如何存放代碼 ........................................................................................................... 5
2.1.1 認識模塊 ...................................................................................................... 5
2.1.2 管理模塊 ...................................................................................................... 6
2.2 如何產生代碼 ........................................................................................................... 7
2.2.1 復制現有的代碼 ........................................................................................... 7
2.2.2 錄制宏 .......................................................................................................... 7
2.2.3 手工編寫代碼 ............................................................................................... 9
2.2.4 從模板中獲取代碼 ..................................................................................... 10
2.3 如何調用代碼 ......................................................................................................... 10
2.3.1 <F5>鍵 .................................................................................................... 10
2.3.2 <Alt+F8>組合鍵 ...................................................................................... 11
2.3.3 自定義快捷鍵 ............................................................................................. 12
2.3.4 按鈕 ............................................................................................................ 12
2.3.5 菜單 ............................................................................................................ 13
2.4 如何保存代碼 ......................................................................................................... 13
2.4.1 工作簿格式 ................................................................................................ 13
2.4.2 解決丟失代碼問題 ..................................................................................... 14
2.4.3 顯示文件擴展名 ......................................................................................... 14
2.5 如何放行代碼 ......................................................................................................... 15
2.5.1 調整“宏設置” ......................................................................................... 16
2.5.2 添加受信任位置 ......................................................................................... 16
2.6 如何查詢代碼幫助 ................................................................................................. 17
2.6.1 Excel 不同版本中的幫助差異 .................................................................... 17
2.6.2 如何調用幫助系統 ..................................................................................... 17
2.7 如何簡化開發難度 ................................................................................................. 19
2.7.1 錄制宏 ........................................................................................................ 19
2.7.2 調用內置提示 ............................................................................................. 19
2.7.3 調用筆記 .................................................................................................... 21
第3 章 VBA 的程序結構詳解 ......................................................................................... 22
3.1 Sub 過程基本語法 ................................................................................................. 22
3.1.1 認識程序結構 ............................................................................................. 22
3.1.2 為VBA 程序添加注釋 ................................................................................ 23
3.2 過程的作用范圍 ..................................................................................................... 24
3.2.1 何謂作用范圍 ............................................................................................. 24
3.2.2 公有過程與私有過程的區別 ...................................................................... 24
3.3 過程的命名規則 ..................................................................................................... 25
3.4 過程的參數 ............................................................................................................ 25
3.5 過程的執行流程 ..................................................................................................... 26
3.5.1 正常的執行流程 ......................................................................................... 26
3.5.2 改變程序的執行流程 ................................................................................. 26
3.6 中斷過程 ................................................................................................................ 27
3.6.1 結束過程:End Sub .................................................................................. 27
3.6.2 中途結束過程:Exit Sub ............................................................................ 27
3.6.3 中途結束一切:End .................................................................................. 27
3.6.4 暫停過程:Stop ......................................................................................... 27
3.6.5 手動暫停程序:Ctrl+Break ....................................................................... 28
第4 章 VBA 四大基本概念 ............................................................................................. 29
4.1 Excel 的對象 .......................................................................................................... 29
4.1.1 什么是對象 ................................................................................................ 29
4.1.2 對象與對象集合 ......................................................................................... 30
4.1.3 對象的層次結構 ......................................................................................... 32
4.1.4 父對象與子對象 ......................................................................................... 33
4.1.5 活動對象 .................................................................................................... 34
4.2 對象的方法和屬性 ................................................................................................. 35
4.2.1 屬性與方法的區別 ..................................................................................... 36
4.2.2 查詢方法與屬性的兩種方法 ...................................................................... 36
4.2.3 方法與屬性的應用差異 .............................................................................. 37
4.3 對象的事件 ............................................................................................................ 40
4.3.1 什么是事件 ................................................................................................ 40
4.3.2 事件的分類及其層級關系 .......................................................................... 41
4.3.3 工作簿事件與工作表事件一覽 .................................................................. 41
4.3.4 工作簿與工作表事件的作用對象 .............................................................. 42
4.3.5 快速掌握事件過程 ..................................................................................... 44
4.3.6 何時需要使用事件過程 .............................................................................. 44
第5 章 通過變量強化程序功能 ...................................................................................... 45
5.1 數據類型 ................................................................................................................ 45
5.1.1 為什么要區分數據類型 .............................................................................. 45
5.1.2 認識VBA 的數據類型 ................................................................................ 45
5.2 聲明變量 ................................................................................................................ 47
5.2.1 變量的定義 ................................................................................................ 47
5.2.2 變量的聲明方式 ......................................................................................... 47
5.2.3 變量的賦值方式與初始值 .......................................................................... 49
5.2.4 如何確定變量的數據類型正確 .................................................................. 50
5.2.5 正確聲明變量的數據類型的優勢 .............................................................. 50
5.2.6 變量的作用域 ............................................................................................. 52
5.2.7 變量的生命周期 ......................................................................................... 53
5.3 對象變量 ................................................................................................................ 53
5.3.1 如何區分對象變量和數據變量 .................................................................. 54
5.3.2 對變量賦值 ................................................................................................ 54
5.3.3 使用對象變量的優勢 ................................................................................. 55
5.4 聲明常量 ................................................................................................................ 56
5.4.1 常量的定義與用途 ..................................................................................... 56
5.4.2 常量的聲明方式 ......................................................................................... 57
5.2.3 常量的命名規則 ......................................................................................... 57
第6 章 詳解五大常用對象 .............................................................................................. 59
6.1 對象基礎知識 ......................................................................................................... 59
6.1.1 對象的結構 ................................................................................................ 59
6.1.2 對象與對象的集合 ..................................................................................... 60
6.1.3 引用集合中的單一對象 .............................................................................. 60
6.1.4 父對象與子對象 ......................................................................................... 60
6.1.5 活動對象 .................................................................................................... 61
6.1.6 使用變量簡化對象的引用 .......................................................................... 61
6.1.7 使用With 語句簡化對象的引用 ................................................................. 62
6.2 單元格對象 ............................................................................................................ 63
6.2.1 Range("A1")方式引用單元格 ..................................................................... 64
6.2.2 Cells(1,1)方式引用單元格 ......................................................................... 66
6.2.3 [a1]方式引用單元格 .................................................................................. 67
6.2.4 Range("A1")、Cells(1,1)與[a1]比較 ................................................ 68
6.2.5 Selection 與ActiveCell:當前選區與活動單元格 ..................................... 69
6.2.6 已用區域與當前區域 ................................................................................. 69
6.2.7 SpecialCells:按條件引用區域 ................................................................. 70
6.2.8 CurrentArray:引用數組區域 .................................................................... 74
6.2.9 Resize:重置區域大小 .............................................................................. 75
6.2.10 Offset:根據偏移量引用新區域 .............................................................. 76
6.2.11 Union:多區域合集 ................................................................................. 78
6.2.12 Intersect:單元格、區域的交集 .............................................................. 79
6.2.13 End:引用源區域的區域尾端的單元格 .................................................. 80
6.2.14 EntireRow/EntireColumn:擴展至整行、整列 ........................................ 81
6.2.15 RangeSelection:工作表中的選定單元格 .............................................. 82
6.2.16 VisibleRange:指定窗口的可見區域 ...................................................... 83
6.3 批注對象 ................................................................................................................ 84
6.3.1 批注對象的特點 ......................................................................................... 84
6.3.2 判斷單元格中是否有批注 .......................................................................... 85
6.3.3 AddComment:對單元格添加批注 .......................................................... 85
6.3.4 AutoSize:讓批注框自動縮放 ................................................................... 86
6.3.5 AutoShapeType:修改批注的外觀 ........................................................... 86
6.3.6 ClearComments:清空表中所有批注 ....................................................... 86
6.4 圖形對象 ................................................................................................................ 87
6.4.1 Shapes:圖形對象集合 ............................................................................ 87
6.4.2 圖形對象的名稱 ......................................................................................... 87
6.4.3 隱藏的圖形對象集合 ................................................................................. 88
6.5 表對象 .................................................................................................................... 90
6.5.1 表的類別 .................................................................................................... 90
6.5.2 Worksheets:工作表集合.......................................................................... 90
6.5.3 引用工作表子集 ......................................................................................... 91
6.5.4 ActiveSheet:活動表 ................................................................................. 91
6.5.5 工作表的特性 ............................................................................................. 92
6.5.6 新建工作表 ................................................................................................ 93
6.6 工作簿對象 ............................................................................................................ 93
6.6.1 工作簿格式與特性 ..................................................................................... 93
6.6.2 新建工作簿 ................................................................................................ 94
6.6.3 Workbooks:工作簿集合 .......................................................................... 94
6.6.4 引用工作簿子集 ......................................................................................... 94
6.6.5 ActiveWorkbook:活動工作簿 .................................................................. 94
第7 章 常用語句解析 ..................................................................................................... 95
7.1 輸出/輸入語句........................................................................................................ 95
7.1.1 MsgBox 函數 .............................................................................................. 95
7.1.2 Application.InputBox 方法 ......................................................................... 98
7.2 條件判斷語句 ....................................................................................................... 103
7.2.1 IIf 函數的語法與應用 ............................................................................... 103
7.2.2 IIf 函數的限制 ........................................................................................... 105
7.2.3 If Then 語句的語法詳解 ........................................................................... 106
7.2.4 If Then 應用案例 ...................................................................................... 106
7.2.5 If Then Else 語句的語法與應用 ............................................................... 107
7.2.6 多條件嵌套的條件判斷語句 .................................................................... 110
7.2.7 Select Case 語法詳解 .............................................................................. 114
7.2.8 Select Case 與If Then Else 之比較 ......................................................... 117
7.2.9 借用Choose 函數簡化條件選擇 ............................................................. 118
7.3 循環語句 .............................................................................................................. 120
7.3.1 For Next 語句 ........................................................................................... 120
7.3.2 For Each Next 語句 .................................................................................. 127
7.3.3 Do Loop 語法詳解 ................................................................................... 132
7.4 錯誤處理語句 ....................................................................................................... 140
7.4.1 錯誤類型與原因 ....................................................................................... 140
7.4.2 err 對象及其屬性、方法 .......................................................................... 141
7.4.3 認識Error 函數 ........................................................................................ 142
7.4.4 On Error GoTo line ................................................................................... 142
7.4.5 On Error Resume Next ............................................................................. 146
7.4.6 On Error GoTo 0 ...................................................................................... 151
7.5 瀏覽語句 .............................................................................................................. 151
7.5.1 認識FileDialog 對象 ................................................................................ 151
7.5.2 選擇路徑 .................................................................................................. 152
7.5.3 選擇文件 .................................................................................................. 153
7.5.4 按類型選擇文件 ....................................................................................... 154
第8 章 開發自啟動程序 ............................................................................................... 157
8.1 讓宏自動執行 ....................................................................................................... 157
8.1.1 Auto 自動宏 .............................................................................................. 157
8.1.2 升級版自動宏:事件 ............................................................................... 158
8.1.3 事件的禁用與啟用 ................................................................................... 160
8.1.4 事件的特例 .............................................................................................. 161
8.2 工作表事件 .......................................................................................................... 162
8.2.1 在狀態欄提示*大值的單元格地址 ......................................................... 162
8.2.2 快速輸入出勤表 ....................................................................................... 163
8.2.3 在狀態欄顯示選區的字母、數字、漢字個數 ......................................... 164
8.2.4 實時監控單元格每一次編輯的數據與時間 ............................................. 166
8.2.5 利用數字簡化公司名輸入 ........................................................................ 168
8.2.6 輸入數據時自動跳過帶公式的單元格 ..................................................... 170
8.3 工作簿事件 .......................................................................................................... 171
8.3.1 新建工作表時自動設置頁眉 .................................................................... 171
8.3.2 未匯總則禁止打印與關閉工作簿 ............................................................ 172
8.3.3 自動選中相同值并計數 ............................................................................ 174
8.3.4 設計未啟用宏就無法打開的工作簿 ......................................................... 176
8.4 定時執行的程序 ................................................................................................... 177
8.4.1 基本語法 .................................................................................................. 178
8.4.2 每天在13:28 語音提示開會 .................................................................... 178
8.4.3 在單元格中顯示當前時期 ........................................................................ 179
第9 章 綜合應用案例 ................................................................................................... 181
9.1 Application 應用案例 ........................................................................................... 181
9.1.1 計算字符表達式 ....................................................................................... 181
9.1.2 合并相同且相鄰的單元格 ........................................................................ 182
9.1.3 定時打印文件 ........................................................................................... 184
9.1.4 模擬鍵盤快捷鍵打開高級選項 ................................................................ 185
9.1.5 使用快捷鍵合并與取消合并單元格 ......................................................... 186
9.1.6 查找至少兩月未付貨款的客戶名稱 ......................................................... 188
9.2 Range 對象應用案例 ........................................................................................... 190
9.2.1 合并工作表 .............................................................................................. 190
9.2.2 合并區域且保留所有數據 ........................................................................ 193
9.2.3 合并計算多區域的值 ............................................................................... 194
9.2.4 模糊查找公司名稱并羅列出來 ................................................................ 196
9.2.5 反向選擇單元格 ....................................................................................... 198
9.2.6 插入圖片并調整為選區大小 .................................................................... 200
9.2.7 提取唯一值 .............................................................................................. 202
9.2.8 隱藏所有公式結果為錯誤的單元格 ......................................................... 203
9.3 Comment 對象應用案例 ..................................................................................... 205
9.3.1 在所有批注末尾添加指定日期 ................................................................ 205
9.3.2 生成圖片批注 ........................................................................................... 207
9.3.3 添加個性化批注 ....................................................................................... 208
9.3.4 批量修改當前表的所有批注外形 ............................................................ 210
9.4 WorkSheet 對象應用案例 .................................................................................... 213
9.4.1 新建工作表并且命名為今日日期 ............................................................ 213
9.4.2 批量保護工作表與解除保護 .................................................................... 214
9.4.3 為所有工作表設置水印 ............................................................................ 216
9.4.4 批量命名工作表 ....................................................................................... 218
9.4.5 判斷篩選條件 ........................................................................................... 220
9.5 Workbook 對象應用案例 ..................................................................................... 223
9.5.1 拆分工作簿 .............................................................................................. 223
9.5.2 每10 分鐘備份一次工作簿 ...................................................................... 225
9.5.3 5 分鐘未編輯工作簿則自動備份 ............................................................. 226
9.5.4 記錄文件打開次數 ................................................................................... 228
9.5.5 不打開工作簿而提取數據 ........................................................................ 230
9.5.6 建立指定文件夾下所有工作簿目錄和工作表目錄 .................................. 232
第10 章 編程規則與代碼優化 ...................................................................................... 234
10.1 代碼編寫規則 ..................................................................................................... 234
10.1.1 對代碼添加注釋 ..................................................................................... 234
10.1.2 長代碼分行 ............................................................................................ 237
10.1.3 代碼縮進對齊 ......................................................................................... 238
10.1.4 聲明有意義的變量名稱 .......................................................................... 239
10.1.5 If Then End If 類配對語句的輸入方式 ................................................... 240
10.1.6 輸入屬性與方法的技巧 .......................................................................... 240
10.1.7 無提示的詞組的輸入技巧 ...................................................................... 242
10.1.8 善用公共變量 ......................................................................................... 242
10.1.9 使用常量名稱替代數值 .......................................................................... 243
10.1.10 盡可能兼容Excel 2003 到Excel 2019 之間的所有版本 ..................... 243
10.2 優化代碼思路 ..................................................................................................... 244
10.2.1 強制聲明變量 ......................................................................................... 244
10.2.2 善用常量 ................................................................................................ 244
10.2.3 關閉屏幕更新 ......................................................................................... 244
10.2.4 利用With 減少對象讀取次數................................................................. 245
10.2.5 利用變量減少對象讀取次數 .................................................................. 245
10.2.6 善用帶$的字符串處理函數 .................................................................... 246
10.2.7 不使用Select 和Activate 直接操作對象 ............................................... 246
10.2.8 將與循環無關的語句放到循環語句外 ................................................... 247
10.2.9 利用Instr 函數簡化字符串判斷 ............................................................. 247
10.2.10 使用Replace 簡化字符串連接 ............................................................ 248
10.3 借用參數簡化程序調用 ..................................................................................... 248
10.3.1 參數的概念與用途 ................................................................................. 248
10.3.2 參數的語法結構 ..................................................................................... 249
10.3.3 設計帶有必選參數的過程 ...................................................................... 249
10.3.4 設計帶有可選參數的過程 ...................................................................... 251
10.3.5 設計帶有不確定數量參數的過程 .......................................................... 253
10.3.6 參數的賦值方式 ..................................................................................... 254
第11 章 高階應用1:數組 ........................................................................................... 256
11.1 數組基礎 ............................................................................................................ 256
11.1.1 何謂數組 ................................................................................................ 256
11.1.2 數組的特點 ............................................................................................ 256
11.1.3 一維數組 ................................................................................................ 257
11.1.4 二維數組 ................................................................................................ 259
11.1.5 數組的參數 ............................................................................................ 260
11.1.6 聲明數組變量 ......................................................................................... 261
11.1.7 動態數組與靜態數組的區別 .................................................................. 263
11.1.8 釋放動態數組的存儲空間 ...................................................................... 268
11.2 數組函數 ............................................................................................................ 268
11.2.1 用函數創建數組 ..................................................................................... 268
11.2.2 獲取數組元素 ......................................................................................... 270
11.2.3 判斷變量是否為數組 ............................................................................. 270
11.2.4 轉置數組 ................................................................................................ 271
11.2.5 獲取數組的上標與下標 .......................................................................... 272
11.2.6 轉換文本與數組 ..................................................................................... 273
11.2.7 篩選數組 ................................................................................................ 275
11.3 數組實戰 ............................................................................................................ 276
11.3.1 將指定區域的單詞統一為首字母大寫 ................................................... 276
11.3.2 羅列不及格人員姓名、科目和成績 ....................................................... 277
11.3.3 跨表搜索學員信息 ................................................................................. 278
11.3.4 將職員表按學歷拆分成多個工作表 ....................................................... 280
11.3.5 將選區的數據在文本與數值間互換 ....................................................... 281
11.3.6 獲取兩列數據的相同項 .......................................................................... 283
11.3.7 無人值守的多工作簿自動匯總 .............................................................. 285
第12 章 高階應用2:正則表達式 ................................................................................ 288
12.1 何謂正則表達式 ................................................................................................. 288
12.1.1 概念 ........................................................................................................ 288
12.1.2 特點 ........................................................................................................ 288
12.1.3 調用方式 ................................................................................................ 289
12.2 語法基礎 ............................................................................................................ 290
12.2.1 調用正則表達式的基本格式 .................................................................. 290
12.2.2 正則表達式的對象、屬性和方法 .......................................................... 291
12.2.3 匹配的優先順序 ..................................................................................... 294
12.2.4 借用元字符強化搜索功能 ...................................................................... 295
12.3 正則表達式應用 ................................................................................................. 311
12.3.1 亂序字符串取值并匯總 .......................................................................... 311
12.3.2 計算建筑面積 ......................................................................................... 312
12.3.3 計算括號中的數字合計 .......................................................................... 313
12.3.4 刪除字符串首尾的空白字符 .................................................................. 314
12.3.5 將字符串中的多段數字分列 .................................................................. 315
12.3.6 提取E-mail 地址 .................................................................................... 315
12.3.7 提取文件的路徑和名稱 .......................................................................... 316
12.3.8 匯總人民幣 ............................................................................................ 317
12.3.9 開發分列函數 ......................................................................................... 318
12.3.10 刪除重復字詞 ....................................................................................... 319
第13 章 高階應用3:字典 .......................................................................................... 3