Excel VBA入門(九)操作工作薄

來源:互聯網
上載者:User

標籤:迴圈   字典   文章   部分   file   pen   get   work   教程   

雖然我前面講過,在VBA中操作工作薄並不是件明智的事,但有些時候,還是避免不了要這麼做。絕大多數情況下,我們要做的是擷取到某個工作薄對象,並以此來獲得其中的工作表對象,然後再對工作表中的資料進行處理。而後面這一部分(操作工作表)在前面已經講過了,所以本章只講如何在VBA中開啟、關閉工作薄,以及介紹兩個常用的工作薄對象。在VBA中開啟工作薄有兩種方法:顯式開啟及隱式開啟。

1. 顯式開啟

顯式開啟即跟我們手動雙擊開啟一個Excel檔案一樣,可以看到工作薄的內容,可以在裡面進行各種操作。代碼及樣本如下:

Sub workbook_operate()    ‘ 定義工作薄對象    Dim wbk As Workbook    Dim fname As String        fname = "E:/temp/test.xlsx"    ‘ 根據工作薄檔案路徑開啟工作薄    Set wbk = Application.Workbooks.Open(Filename:=fname)    MsgBox fname & "已開啟"    ‘ 關閉工作薄    wbk.CloseEnd Sub

結果如下:

然後就可以根據這個workbook對象(樣本中的wbk變數)來擷取到其中的工作表:

Set parameter_sht = wbk.Worksheets("Parameter")

或者取得這個工作薄的一些屬性:

wbk.Name

最後可以使用Close方法來關閉這個工作薄:

wbk.Close
2. 隱式開啟

使用隱式開啟的時候,這個工作薄在前端是看不到的,只有在VBE環境中(的工程視窗)可以看到它。範例程式碼及結果如下:

Sub workbook_operate()    ‘ 定義工作薄對象    Dim wbk As Workbook    Dim fname As String        fname = "E:/temp/test.xlsx"    ‘ 根據工作薄檔案路徑擷取工作薄對象    Set wbk = GetObject(fname)    Debug.Print wbk.NameEnd Sub

與顯式開啟不同的是,這是使用了GetObject方法。結果如下:

可以在VBE的工程視窗(左側)中看到有一個新的工項目被載入了。但此時是並不能看到有一個Excel檔案被開啟的,這個已經被VBA隱式開啟的檔案,只能使用VBA進行操作,在使用上與顯式開啟後得到的workbook對象沒什麼區別,如擷取其中的工作表對象、擷取它的名字、關閉它等,都是一樣的。這裡就不舉例了。

3. 關閉

無論是顯式開啟還是隱式開啟,如果在新開啟的工作薄中有更改,在使用workbook.Close方法時,會有個彈窗提示是否要儲存更改,就跟我們平時使用時一樣:

又或者被開啟的工作薄裡面有些公式,在開啟這個工作薄時公式結果變了(其實也等於是有更新了),在關閉時都會出現這個提示。如果可以確定是否需要更改,可以在儲存時加入相應的參數SaveChanges:

wbk.Close SaveChanges:=False

SaveChanges等於False時即為不儲存,等於True時即為儲存

4. ThisWorkbook與ActiveWorkbook

ThisWorkbook對象是VBA頂級對象Application下的一個特殊對象,代表當前(VBA代碼所在的)工作薄對象。

ActiveWorkbook對象也是VBA頂級對象Application下的一個特殊對象,代表當前啟用的工作薄對象。

就跟我們在使用QQ聊天時一樣,我們不可能同時單獨地發資訊給兩個不同的QQ好友,只能有一個聊天視窗是被啟用的。Excel也一樣,當前被啟用的工作薄就是ActiveWorkbook對象(同樣類似地,也有ActiveWorksheet對象)。

有些情況下,ThisWorkbook等同於ActiveWorkbook,但有些情況下並不是的。如以下代碼:

Sub workbook_operate()    ‘ 定義工作薄對象    Dim wbk As Workbook    Dim fname As String        fname = "E:/temp/ActiveMe.xlsx"    ‘ 根據工作薄檔案路徑擷取工作薄對象    Set wbk = Workbooks.Open(fname)      Debug.Print ThisWorkbook.Name    Debug.Print ActiveWorkbook.NameEnd Sub

運行結果:

因為新開啟的工作薄會被處於啟用狀態(就跟手工開啟另一個Excel檔案一樣),所以這時新開啟的ActiveMe.xlsx才是ActiveWorkbook,而當前代碼所在的工作薄(test.xlsm)則是ThisWorkbook。而如果只有一個工作薄被開啟或者是當前代碼所在工作薄處於啟用狀態時,則ThisWorkbook和ActiveWorkbook是同一個對象。

本系列教程其它文章

Excel VBA 入門(零)
Excel VBA入門(一)資料類型
Excel VBA入門(二)數組和字典
Excel VBA入門(三) 流程式控制制1-條件選擇
Excel VBA入門(四)流程式控制制2-迴圈控制
Excel VBA入門(五)Excel對象操作
Excel VBA入門(六)過程和函數
Excel VBA入門(七)注釋、宏按鈕及錯誤處理
Excel VBA入門(八)儲存格邊框
Excel VBA入門(九)操作工作薄

Excel VBA入門(九)操作工作薄

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.