VBA儲存格參照新建工作表:Application.InputBox方法設置Type參數值

VBA的Application.InputBox方法會產生輸入視窗,透過Type參數設定,可直接輸入或儲存格參照作為新建工作表名稱,本文也補充同檔案複製程式、合併Sub程序、Call呼叫的技巧。

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

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

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

二、新增工作表程式

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

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

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

四、直接輸入新增工作表

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

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

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

六、Sub程序程式合併

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

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

七、Call呼叫其他程序

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

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

八、相同名稱程序

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

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

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

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

每天學習,每天充電:VBA爬蟲文章合集

最新文章: