多少年來,我都一直認為Excel就是一個表格工具,用來記一記數據內容即可,直到后來開發同事用Excel做出了很花哨的動態報告,可以從數據庫提取數據,自動填充排版數據,可以自動計算繪圖,自動套用模版格式,自動生成pdf… 太可怕了。
我目前無法達到這樣的水平,只能從最基本的數據提取開始。
一. 開啟編程模式
1. Excel版本建議在2010以上,目前我使用的是2013;
2. 進入Excel后,依次點擊打開左上角文件 → 選項,在選項中選擇“自定義功能區”,將“開發工具”勾選,然后確定;
→
→ 
3. 回到excel主界面,可以看到開發工具選項卡已經顯示,點擊后找到最左側的Visual Basic按鈕,進入后,我們的所有編寫代碼將在里面完成;

二. 頁面布局
1. 目前進行數據提取的學習實踐,所以在excel主界面,我們需要設計一個基本布局界面,和我們平時使用excel表格,做表格樣式一樣;
2. 現在我參照sql中測試表的樣式,在excel做相同頁面布局;

三. 代碼編寫,功能實現
1. 增加觸發按鈕,如同SSMS中的執行按鈕一樣,excel界面上也需要增加一個執行按鈕,“開發工具”→“插入”→“表單控件按鈕”;

2. 按鈕綁定代碼宏,單純的按鈕是沒有功能的,所以需要跟按鈕綁定相關的代碼宏,在此我提前新建了一個宏“數據提取”,選擇后點擊確定即可,同時給按鈕重新命名一下;


3. 正式編輯宏代碼,接上圖,選擇宏后,點擊編輯按鈕,進入到了VB代碼編輯頁面,我們的功能屬於“模塊1”,之后就在右側sub和end sub中編寫代碼;

4. 首先定義變量參數;

i:循環變量;
box1,box2:按鈕條件變量,比如開始時間、結束時間;
cn:數據庫連接,ADODB.Connection數據庫連接控件;
rs:記錄集,ADODB.Recordset記錄集控件;
strCn:數據庫連接串存儲變量,下方填寫了數據庫連接;
strSQL:sql語句存儲變量;
注意:在此步一定要注意勾選引用,否則部分功能控件無法使用。
工具 → 引用,將Microsoft ActiveX Data Objects 2.6 Library勾選,確定


5. 定義box的類型

這里將用戶輸入的“日期”內容記錄到box變量。
6. 連接數據庫,編寫sql語句,打開記錄集記錄查詢到的數據;

cn.Open strCn:連接數據庫;
rs.Open strSQL, cn:將sql語句查詢出的數據記錄到記錄集;
i=2:起始行從第2行開始
7. 數據載入表格頁面;

Worksheets("Sheet1").Unprotect:解除選項頁“Sheet1”的保護,可以寫入數據;
Do While Not rs.EOF:循環讀取數據集中的數據,到達尾行則停止循環;
Worksheets("Sheet1").Cells(i, 1).Value = rs("id"):將sql查詢出的數據中的“id”字段,填入選項頁“Sheet1”的第2行開始的第1列,其他內容類似,不做重復描述;
rs.MoveNext:記錄開始下一條,與sql中的游標功能類似,逐行循環;
i = i + 1:循環遞增1;
Loop:循環語法中的執行,類似於while … do中的do;
rs.Close:結束記錄集;
cn.Close:結束數據庫連接;
8. 按照編程的操作規范,應該要進行調試,這里就不做描述;
四. 使用演示

