《Excel VBA與VSTO基礎實戰指南》屬于學習Excel VBA的初中級教材,重點闡述了Excel VBA的基本理論、代碼自動化以及開發Excel插件的思路。通讀《Excel VBA與VSTO基礎實戰指南》可以輕松應對制表工作中的疑難,同時還可以開發商業插件。《Excel VBA與VSTO基礎實戰指南》包括五部分內容,開頭部分簡述自動化操作的意義和成果展示;第二部分詳細剖析VBA 的所有基礎概念,包含代碼的存放位置、寫書方式、調用方式,認識對象、屬性、方法與事件,以及理解變量、常量與數據類型并且掌握循環語句、條件語句、防錯語句等知識;第三部分是VBA的高級應用,包含數組、窗體、字典、功能區設計、插件開發和撤銷代碼等知識;第四部分介紹通過VSTO開發Excel插件;第五部分提供365個VBA常見疑難解答。《Excel VBA與VSTO基礎實戰指南》每段代碼都有思路分析,且對每句代碼都提供了代碼含義的詳細注釋,力求使講解過程可以更加精準,讓代碼更易理解,為讀者提供更優秀的閱讀體驗。
目前國內 VBA 圖書講插件開發思路的書極少,而市場對插件的需求卻極大,開發插件有較廣闊的前景。《Excel VBA與VSTO基礎實戰指南》不僅用較大的篇幅講述插件開發相關的知識,而且加入了執行插件命令后可以撤銷的設計思路,這在 VBA 圖書市場上并無先例。《Excel VBA與VSTO基礎實戰指南》除 VBA 外,還提供 VSTO 知識,采用 VB.net 語法編寫。
VSTO 比 VBA 更強大,能實現的功能也更多,同時還更安全。《Excel VBA與VSTO基礎實戰指南》詳細羅列了VBA與VSTO在代碼上的差異,然后演示修改VBA代碼,使其符合VB.net語法規則的基本思路,從而讓讀者快速學會利用 VSTO 開發 Excel 插件。掌握《Excel VBA與VSTO基礎實戰指南》第16章到第19章的知識,僅需半個月即可學會VSTO,不需要像學習C#那樣,耗費半年甚至一兩年時間。
羅剛君,網名andysky,從事Excel研究及VBA二次開發10多年,擅長Excel函數、圖表、透視表和VBA,尤其對Excel VBA有著相當豐富的開發經驗和熟練的實戰技能,也擁成豐碩的開發成果。
作者擔任過近10個Excel相關論壇的版主,著有15本Excel圖書,書名如下:
1.《Excel 2007 VBA范例大全》
2.《Excel 2007技法與行業應用實例精講》
3.《Excel 2007 VBA開發技術大全》
4.《Excel 2007函數案例速查寶典》
5.《Excel VBA程序開發自學寶典》
6.《Excel 2010 VBA編程與實踐》
7.《Excel 2010函數與圖表速查手冊》
8.《Excel VBA程序開發自學寶典(第2版)》
9.《Excel函數、圖表與透視表從入門到精通》
10.《來吧!帶你玩轉Excel VBA》
11.《Excel VBA程序開發自學寶典(第3版)》
12.《Excel 2013函數案例自學寶典(實戰版)》
13.《Excel 2013 VBA編程與實踐》
14.《Excel 2016實用技巧自學寶典》
15.《Excel VBA與VSTO基礎實戰指南》
第 1 章 自動化操作 . 1
1.1 自動化操作的價值 1
1.2 利用宏簡化日常工作3
1.3 使用 VBA 強化 Excel 功能.12
1.4 Excel VBA 的發展前景 15
1.5 課后思考 16
第 2 章 代碼應用基礎 17
2.1 區分 VBE 代碼窗口 .17
2.2 錄入代碼 25
2.3 四種代碼執行方式 . 32
2.3.1 調用快捷鍵 . 32
2.4 保存代碼 36
2.5 讓代碼暢通無阻 . 37
2.6 反復調用相同代碼 39
2.7 課后思考. 40
第 3 章 從概念開始認識 VBA .42
3.1 認識過程.42
3.2 關于參數. 49
3.3 理解對象54
3.4 對象的屬性與方法 56
3.5 對象的事件. 59
3.6 課后思考 63
第 4 章 對象及其層次結構.65
4.1 查看所有對象 65
4.2 對象的層次與引用方式. 67
4.3 Range 對象 . 74
4.4 圖形對象 95
4.5 表對象 98
4.6 工作簿對象 101
4.7 Excel 應用程序對象 103
4.8 課后思考 105
第 5 章 揭密數據類型與變量、常量 106
5.1 數據類型 106
5.2 定義變量 112
5.3 定義常量 122
5.4 課后思考 123
第 6 章 條件語句與循環語句 125
6.1 If 語句解析. 125
6.2 Select Case 語句解析. 140
6.3 IIf 函數 . 145
6.4 For Next 語句解析. 147
6.5 For Each…Next 語句解析. 153
6.6 Do Loop 語句解析 . 156
6.7 課后思考 166
第 7 章 四類常見對象的應用案例 168
7.1 單元格對象 168
7.2 圖形對象 186
7.3 工作表對象 194
7.4 工作簿對象 204
7.5 課后思考 211
第 8 章 深入剖析 VBA 的各種事件 . 212
8.1 事件的級別與順序 212
8.2 禁用與啟用事件 . 215
8.3 工作表事件詳解 . 217
8.4 工作簿事件詳解 . 229
8.5 應用程序級事件詳解. 239
8.6 按時間執行代碼 242
8.7 課后思考 244
第 9 章 處理代碼錯誤 245
9.1 代碼錯誤類型分析 245
9.2 錯誤處理語句 248
9.3 案例應用 258
9.4 課后思考 265
第 10 章 使用數組提升程序效率 267
10.1 基本概念 . 267
10.2 數組函數 . 281
10.3 案例分析 . 289
10.4 課后思考 . 302
第 11 章 集合與字典的應用 .303
11.1 Collection:集合 303
11.2 Dictionary:字典 310
11.3 課后思考 . 321
第 12 章 設計程序窗體 . 323
12.1 窗體與控件簡介 323
12.2 設置屬性 . 335
12.3 窗體與控件的事件 355
12.4 窗體應用實戰 366
12.5 課后思考 . 375
第 13 章 定義 Ribbon 功能區選項卡 377
13.1 功能區選項卡開發基礎. 377
13.2 Ribbon 定制之語法分析 . 380
13.3 使用回調函數強化功能區. 395
13.4 使用模板 . 408
13.5 課后思考 . 412
第 14 章 開發通用插件. 413
14.1 插件的分類 413
14.2 漫談加載宏 414
14.3 制作工作表批量重命名插件 . 417
14.3.6 安裝并測試功能 422
14.4 課后思考 . 425
第15 章 讓 VBA 代碼也能撤銷 .426
15.1 突破撤銷限制 426
15.2 設計可撤銷的插件 428
15.3 課后思考 . 436
第 16 章 使用 VSTO 設計插件的基本步驟.437
16.1 安裝 Visual Studio 2015 437
16.2 Excel 插件開發流程 440
16.3 將插件打包成安裝程序. 444
16.4 課后思考 . 449
第 17 章 VSTO 與 VBA 的差異450
17.1 變量、常量與數據類型. 450
17.2 函數 . 452
17.3 數組 . 454
17.4 窗體 . 455
17.5 字典與正則表達式 459
17.6 菜單與功能區 460
17.7 管理文件與目錄 461
17.8 雜項 . 463
17.9 課后思考 . 465
第 18 章 將 VBA 插件升級為 VSTO 插件 466
18.1 設計插件框架 466
18.2 升級 Sub 過程“創建工資條” . 468
18.3 升級窗體“文件批量命名” . 470
18.4 升級事件過程“零值控制器” . 477
18.5 打包安裝程序 478
18.6 課后思考 481
第 19 章 VSTO 的更多高級應用482
19.1 添加窗體狀態欄 482
19.2 創建任務欄圖標 484
19.3 自動發郵件 486
19.4 全自動合并數據 488
19.5 設計任務窗格 494
19.6 課后思考 . 498
第 20 章 365 個 VBA 常見問題答疑499
1.2.4 宏的優缺點分析
根據前面三個小節,已經對宏有了基本的認識,總體來說宏有以下特性。
1.優點
(1)宏代碼嚴格來說不是程序,錄制宏及調用宏也不算編程。但是錄制宏能實現與編程相近的功能,讓原本需要多個步驟的工作一鍵完成,而且宏代碼可以反復調用。
(2)錄制宏時可以按操作順序如實記錄所有操作信息,所以執行宏與錄制宏時的操作效果是完全一致的。而在實際工作中,當步驟較多且需要重復操作時,手動操作較難確保每次的操作順序一致,也難確保結果的保存位置、大小等參數一致,甚至遺漏某個操作步驟的可能性也同樣存在。(3)宏是以代碼的形式存在的,而代碼可以調整順序或者增刪語句,所以當工作需求變化時,稍微調整宏代碼即可完成所有工作,而不需要重新執行可能需要幾十個步驟才能完成的工作。
(4)另外, 學習錄制宏僅需三分鐘, 在錄制宏時只需要做基礎操作, 不需要理會代碼的含義、語法、思路,宏代碼就會自動生成,這較之于其他不帶錄制功能的編程語言有更多的優越性。
2.缺點
微軟公司在 Office 平臺中推廣宏僅短短幾年,之后就用 VBA 替代了宏的地位,無疑是宏的局限性阻礙了它的發展,而 VBA 正好可以彌補宏的缺陷,它在靈活性、效率和全面性方面都遠遠超過宏。
首先,并非所有操作都能通過錄制宏產生相應的代碼,這意味著宏的全面性不足。
其次,錄制宏多數時候會產生一些冗余代碼,從而降低宏的執行效率。例如前面兩次錄制宏時,“設置單元格的字號為 20”這一個步驟產生的代碼包括設置字號、字體、刪除線、陰影、主題顏色等,如以下代碼所示:
With Selection.Font
.Name = "宋體"
.Size = 20
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleSingle
.ThemeColor = xlThemeColorLight1
.TintAndShade = 0
.ThemeFont = xlThemeFontMinor
End With
如果采用 VBA 編程,那么只需要“Selection.Font.Size = 20”一句代碼即可滿足工作需求,所以宏與 VBA 的效率差異較大。
再次,錄制宏時只能記錄操作,宏代碼不會執行判斷。例如可以錄制“刪除 A 列”的操作,但是無法通過錄制宏實現“假設 A 列空白則整列刪除”這類需求。而且,即使是能錄制的操作也僅針對單一的操作,無法錄制可循環的操作。例如刪除工作表 200 列數據中所有奇數列的值,如果采用錄制宏產生代碼,那么在錄制時需要刪除 100 次,產生超過 200 行的代碼。如果采用 VBA編程,那么僅需以下幾句代碼即可完成,而且將極大節省執行時間。
Sub 刪除前 200 列中奇數列的值() '此過程代碼放在模塊中執行
For i = 1 To 200 Step 2 '從 1 循環到 200,步長值為 2(即隔 2 列刪除一列的值)
Columns(i).Clear '將第 i 列的值刪除
Next i '執行下一輪循環
End Sub
最后,錄制宏的靈活性差。不管是單元格,還是工作表、圖片、圖表,在錄制宏時都采用固定的名稱,一旦實際情況變化時,錄制宏產生的代碼將會出錯。例如在空白工作表中錄制創建矩形并設置其格式的宏, Excel 會自動將圖形命名為“矩形 1”,并對“矩形 1”設置格式。然而如果實際執行宏的環境產生了變化,宏代碼在調用“矩形 1”時則可能失敗。只有采用 VBA 編程才能讓代碼具有靈活性,自動適應環境的變化,讓代碼可防錯,并且通用于不同環境。所以本書的重點是 VBA 教學,而不局限于應用宏。