VBA瞭解工作表屬性,InputBox儲存格網址取得央行資料

Excel進入VBA編輯器不但可以寫程式,還能瞭解工作表的各種屬性。本文並且會進而設計程式以 InputBox 方法出現輸入對話方塊,引用儲存格網址取得央行金融資訊。

一、央行金融指標:

希望一次取得中央銀行三個金融指標的資料,分別下載到三個工作表。

二、VBA工作表屬性

進入VBA編輯環境,在左邊的專案視窗中,「Microsoft Excel物件」資料夾選擇「工作表2(平均存款利率)」。如圖可以清楚看到,在VBA裡面工作表有兩個不同代號,例如在活頁簿上的標籤名稱是「平均存款利率」、在VBA裡則是「工作表2」,而且參考上一個步驟的擷圖,可以瞭解活頁簿上工作表次序,和實際Excel系統裡的名稱順序不一樣。以範例來說,其實有個工作表1被刪除,然後是「工作表4(彙總)」移到最前面了。如此瞭解Excel的工作表架構(程式語言的專業術語為物件模型),是進一步編寫VBA程式碼的基礎。

三、InputBox函數限制

首先如果沿續上一節的InputBox函數,會發現只要,將游標移到對話方塊外,馬上變成一顆轉個不停的藍色小球,因為InputBox函數只能直接輸入文字,若是想直接引用儲存格參照,必須改用InputBox方法。(VBA程式碼的基本結構之一:「物件.方法」,代表對某個Excel物件執行某個指令方法)。

四、改用InputBox方法

修改VBA程式碼如圖所示,綠色部份是將上一節原來的代碼,以單引號轉換成單純文字(非程式碼),藍底白字是主要更改的程式碼,由InputBox函數改為InputBox方法。「WebAress1 = Application.InputBox(“請選擇網頁網址所在儲存格”, “匯入網址”, Type:=8)」這是InputBox方法的標準結構,和InputBox函數比起來,多了一個「Type:=8」,表示輸入類型為儲存格參照。「DesCell = Application.InputBox(“請選擇資料開始儲存格”, “匯入目的”, Type:=8).Address」這一行程式碼和上一行非常接近,只是最後多加了一個「.Address」,關於這個有兩點說明:

第一點,如前所述,「物件.方法」是VBA程式碼的基本結構之一,相類似的是「物件.屬性」,於此是將所輸入的儲存格作為物件,以「.Address」傳回其VBA語言形式的範圍參照。

第二點,「WebAress1 = Application.InputBox」會將「WebAress1」設定為儲存格的值,也就是網址,「DesCell = Application.InputBox.Address」會將「DesCell」設定為儲存格本身(儲存格物件),對比接著後面的「WebAress2 = “URL;” & WebAress1」、「Destination:=Range(DesCell))」,應該較容易理解兩個之間的差異。

五、參照引用網址

於想要執行程式的工作表,例如先移到「平均存款利率」工作表,執行巨集,跳出「匯入網址」對話方塊,選擇「彙總」工作表的「C2」儲存格,就是央行平均存款利率的網址,在對話方塊立即出現「彙總!$C$2」。

六、匯入目的儲存格

接著出現「匯入目的」對話方塊,選擇「平均存款利率」工作表的「A1」儲存格,在對話方塊立即出現「$A$1」。

七、網址清單取得網頁資料

成功匯入網頁內容,以相同方法取得三個工作表資料。

注意ActiveSheet的意義和作用

最後再補充提醒,由於這裡範例程式碼為「With ActiveSheet.QueryTables.Add」,「ActiveSheet」意思是目前現用工作表,所以假設想將資料匯入「平均存款利率」工作表,必須在執行巨集之前,必須在「平均存款利率」工作表選取任何一個儲存格,如此現用工作表便會是「平均存款利率」工作表。如果希望更巨集聰明一點,直接將資料匯入任何指定的工作表,程式碼會稍為複雜一點,於此暫不介紹。

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

最新文章: