SQL查詢Excel結果數據還可這樣輸出到窗體控件ListBox和ListView

上一期作品,我們分享了通過SQL查詢Excel的結果數據輸出到Excel自身的工作表區域。大家估計應該感覺到了SQL查詢的強大功能,它對精確或模糊查詢均無畏懼,優點是查詢檢索效率高,將查詢結果輸出的形式更加靈活,語法結構較為簡潔,沒有過多的IF結合循環結構繁瑣的語句,只需掌握幾個簡單的流程環節“連接對象、數據記錄結合對象創建-->連接對象的打開-->SQL語句的編輯創建-->執行結構化查詢-->輸出查詢結果-->關閉數據記錄結合對象和連接對象-->置空數據記錄集合對象和數據連接對象”即可。上一期作品在末尾我們提到過將SQL查詢結果輸出採用更多的形式--窗體控件展示,通過窗體控件展示我們的查詢將從界面上更加符合我們的視覺感官(直接將查詢結果拿出來顯示而不佔用Excel原有的工作表區域,進而Excel工作表很整潔不凌亂!)。

今天,我們就來著手解決這個問題。還是來認識下基於窗體的ListBox和ListView這兩個控件吧。

ListBox是ActiveX列表框控件,裡面的項目內容是一條一條的數據記錄,列表項目內容可以通過屬性“.RowSource”或“.List”的形式從外部直接載入,顯示多少列用屬性“.ColumnCount”指定。

ListView是ActiveX列表視圖控件,乍一看,它和ListBox很相似,但是ListView還是不同於它,ListView其實就是一種視圖方式的顯示,使用上比起ListBox而言更加靈活自由。這主要體現在列表視圖表頭標題的添加可以自由定義,而ListBox也不是這麼容易;還有就是ListView的列表項目數據載入的方式和ListBox不同,ListView是先添加每一行的第一列作為本行的母項目(ListView1.ListItems.Add , ,rs.Fields(rs(0).Name))),然後再緊接著添加母項目的子項目作為本行後續的列值母項目(ListView1.ListItems(i).SubItems(j) Add , ,rs.Fields(rs(j).Name))),在這裡:rs是記錄集合對象實例,rs.Fields(rs(j).Name))是返回rs中第j列字段名rs(j).Name所對應的當前記錄的該字段的屬性值rs.Fields(rs(j).Name))。有了這個知識瞭解,大家對我們後續的理解將會更加容易。

其他的SQL查詢技術和上一期作品方法是一樣的,我們本期作品不作過多的闡述,本期作品的重點是關於SQL查詢結果如何分別輸出到窗體ListBox和ListView控件上呈現的問題!

下面,我們就一起來解決ListBox和ListView呈現SQL查詢結果的問題。

一、準備用於SQL查詢的前端Excel數據及簡單交互按鈕

和上一期作品類似,準備簡單的用於待查詢的數據及添加一個簡單的表單控件按鈕用於交互。如下圖所示

SQL查詢Excel結果數據還可這樣輸出到窗體控件ListBox和ListView

圖1 SQL查詢的前端Excel數據及交互按鈕

二、VBA後臺添加一個窗體並對其佈局設置

我們插入一個窗體,然後在其上面添加兩個文本框(第一個文本框用於輸入模糊查詢的關鍵字,第二個文本框用於動態跟蹤第一個文本框輸入的內容狀態),接著添加四個標籤用於提示,最後添加一個ListBox、一個ListView,值得注意的是ListView要通過控件工具箱右鍵附加控件載入。最終效果如下圖所示

SQL查詢Excel結果數據還可這樣輸出到窗體控件ListBox和ListView

圖2 用於呈現查詢結果的後臺VBA窗體

三、體驗SQL查詢結果分別輸出到ListBox和ListView的呈現效果

(一)點擊Excel前端的按鈕,即將呈現SQL查詢結果的輸出窗體。如下圖所示

SQL查詢Excel結果數據還可這樣輸出到窗體控件ListBox和ListView

圖3 點擊按鈕欲呈現SQL輸出窗體

(二)在SQL輸出窗體的關鍵字提示的文本框輸入【姓名】字段查詢關鍵字如果是存在的,則會發現第二個文本框動態跟進第一個關鍵字文本框輸入的內容,同時,ListBox列表框和ListView列表視圖也同步呈現動態的查詢結果。如下圖所示

SQL查詢Excel結果數據還可這樣輸出到窗體控件ListBox和ListView

圖4 動態輸入關鍵字呈現的動態查詢結果

(三)如果在SQL輸出窗體的關鍵字提示的文本框中輸入【姓名】字段查詢關鍵字是不存在的,則ListBox列表框和ListView列表視圖也同步呈現為空內容

SQL查詢Excel結果數據還可這樣輸出到窗體控件ListBox和ListView

圖5 不存在的【姓名】字段關鍵字輸入後的查詢情況

(四)如果在SQL輸出窗體的關鍵字提示的文本框中回退【姓名】字段查詢關鍵字為空,則ListBox列表框和ListView列表視圖也同步呈現為空內容

SQL查詢Excel結果數據還可這樣輸出到窗體控件ListBox和ListView

圖6 回退【姓名】字段關鍵字為空的查詢情況

好了,我們接下來看看後臺是SQL查詢後是如何給ListBox列表框和ListView列表視圖傳送數據的呢?請大家看看下面的功能代碼。

四、SQL查詢後輸出給ListBox列表框和ListView列表視圖的功能代碼截圖(帶詳盡註釋)

(一)模塊1代碼截圖:

SQL查詢Excel結果數據還可這樣輸出到窗體控件ListBox和ListView

圖7 模塊1功能定義的數組轉置函數代碼截圖

這個數組轉置函數非常重要,我們通過SQL查詢的結果事實上可以賦予一個動態數組暫存,然後直接可以將這個動態數組賦予ListBox列表框的.List屬性,但是對於ListView列表視圖的列表項目內容則不能直接用這個動態數組的元素複製追加,原因是這個通過SQL查詢的結果賦予的動態數組元素結構非常奇特--是按照縱向檢索到的數據按“列”的方式存入的,而並非我們理想的按“行”的方式存入的。為此,我們必須將該動態數組轉置後用新的數組存儲,新的數組的內容存儲就是我們理想的按“行”的方式存入的模式。於是,這個新的數組就可用於ListView列表視圖的列表項目內容賦值了。

(二)窗體代碼截圖:

SQL查詢Excel結果數據還可這樣輸出到窗體控件ListBox和ListView

圖8 功能代碼截圖1

SQL查詢Excel結果數據還可這樣輸出到窗體控件ListBox和ListView

圖9 功能代碼截圖2

SQL查詢Excel結果數據還可這樣輸出到窗體控件ListBox和ListView

圖10 功能代碼截圖3

好了,本期將SQL查詢Excel的結果數據分別輸出給窗體控件ListBox和ListView就完整分享給各位了,大家可以大膽去用該方法查詢輸出你們的數據了,看看效果吧!不要忘了,大家點個贊和評價哦,在此深表感謝!

在這裡得補充一下,本來我們可以用最常用的DataGrid數據珊格控件對象更加直接接收SQL的查詢結果的,但遺憾的是VBA沒有DataGrid數據珊格控件,只能通過從外部引入到Windows目錄“Windows\System32\”下面的形式以管理員身份註冊,雖說可以註冊成功也能看到這個控件,但是不可用,原因在於該控件估計是純的Visual Basic才能用,而我們Office的VBA卻不能使用它的緣故。所以,我們這裡就沒有用DataGrid數據珊格控件而使用了ListBox和ListView控件做出了同樣的效果,望大家理解。

最後,還是老話,非常感謝各位粉絲朋友對我的關注(頭條號:跟我學Office高級辦公)、推廣和點評,有了各位的支持,我會帶著各位的鼓勵一如既往地推出更多有實用意義的作品,謝謝!


分享到:


相關文章: