VBA Application.InputBox:輕鬆建立1個輸入視窗

VBA Application.InputBox是很常用到的對話方塊,本文以新建工作表作為範例,教你如何設置很關鍵的Type參數,輕鬆建立1個使用者輸入視窗,同時補充專案開發的設計技巧。

上一節介紹如何以VBA方式新增工作表,雖然在VBA編輯視窗中複製貼上,在同一套巨集中,將新增一個工作表擴大為新增三個工作表很方便,但是如同在上一章範例中,逐步把取得網頁資料的方式,由Excel預設指令操作進化到VBA程式碼、再進化到自製巨集視窗,最後是以儲存格連結的InputBox對話方塊進行,如此最為直觀便利,在這一節也介紹如何將InputBox應用到新增工作表:

一、Application.InputBox方法的Type參數引數值

本書到目前為止,文章範例中用到Application.InputBox方法,Type參數引數值都是設定為「8」,亦即儲存格參照,而且只能引用儲存格,不能直接輸入,有些情況下不太方便,其實Type參數也可以作混合運用,例如設定為2+8=10,表示可以輸入文字、亦可引用參照,這樣就很符合一般Excel類似的操作方式。

E25e11

二、新增工作表程式

先定義「DataSheet」為文字變數,再以「 Application.InputBox」方法取值,參數「Type」設定為10,表示可直接輸入或引用儲存格,然後新增工作表,並將工作表命名為「DataSheet」。

E25e21

三、儲存格參照新增工作表

執行巨集,於工作表點選儲存格B4,視窗即為顯示「=B4」表示引用該儲存格的值。

E25e31

四、直接輸入新增工作表

再次執行巨集,也可以直接輸入,和上個步驟相同,只要按下確定按鈕,馬上會跳出一張新增的工作表。

E25e41

五、同一活頁簿複製程式碼

本章第一節有提到VBA程式碼如何在不同活頁簿間複製剪貼,在同一活頁簿裡不同模組的程式碼也可以快速複製剪貼。如圖所示,這裡只選取程式碼的部份,沒有「Sun」和「End Sub」。

E25e51

六、Sub程序程式合併

將上個步驟選取的程式碼貼到程序「DownloadWeb」中間適當位置,效果等同於將程序「Sub Worksheets_Add」合併到程序「Sub DownloadWeb」中,原本各自獨立的兩個程序合併執行。

注意到這裡同時也整個「Public Sub Worksheets_Add()」複製到「Module1」下方,作用稍後說明。

E25e61

七、Call呼叫其他程序

像這兩組程式碼有前後關連的情況,建議作法是像連結其他儲存格內容一樣,在程序中引用其他程序。本節程序「Public Sub WorksheetsAdd()」前面的「Public Sub」意思是公用程序,在任何模組都可以呼叫使用,相對應的是「Private Sub」,是只有目前同一模組內才可以呼叫使用,如果沒有特別陳述,VBA預設為「Public Sub」。

以圖片所示,「Module1」的「DownloadWeb」程序中的「Call Worksheets_Add」,因為「Module1」裡已經有「Worksheets_Add」,執行時會優先呼同一模組裡的程序,假設「Module1」裡沒有「Worksheets_Add」,執行時會呼叫同一專案裡「Module2」的「WorksheetsAdd」程序。

E25e71

八、相同名稱程序

最後補充,即使不同模組有相同名稱的程序,也沒有關係,執行巨集時Excel會自動將模組號加在前面。

E25e81

思考採用不同程式設計方案

上一節程式設計是依照Excel報表上清單順序,由VBA程式自動生成新的工作表,這一節則是跳出視窗,由操作者自行選擇要生成清單上哪個工作表,前者是批次產生多張工作表,後者只能一次一張工作表,然而前者雖然大量生成,程式相對是寫死的,範圍對象固定,後者雖然單次生成,但程式相對是自由的,每次交由操作者選擇。這兩者思惟模式沒有絶對的好壞,應該是依照情況不同,設計不同的流程方案。

以圖書館排行榜為例,如果是自己要取得多年度資料供參考,直接把範圍寫在程式即可,如果是要提供給別人選擇參考,交由使用者自行點選是比較好的。


贊贊小屋VBA教學中心:

Excel巨集錄製教學Excel巨集程式VBA編輯器VBA自學入門VBA基礎語法VBA基本應用VBA UserFormVBA VLOOKUP

取得範例程式請前往VBA社團,訂閱請加入VBA Line社群

VBA課程推薦:零基礎入門進階的20小時完整內容

VBA課程:20小時完整入門進階,職場及投資應用

最新文章: