理解Excel對象模型,編寫VBA更簡單!

昨天,小編給大家簡單地介紹了VBA的一些語法知識。內容比較簡單。今天,我將對前面介紹的一些內容進行一些延伸。接下來,我將給大家分享VBA中的對象模型以及最基本的單元格對象:Range對象。

一、Excel對象模型概要

上篇文章《其實,VBA很簡單》給大家簡單地介紹了對象、方法和屬性的概念。本篇文章將對這些內容進行擴展和延伸,希望大家從整體上對VBA語言中的對象模型有所瞭解和掌握。

在編寫VBA代碼或者調用對象的方法和屬性前,熟練地掌握對象模型是有必要的。因此,我們先簡單瞭解一下Excel對象模型的整體結構,如下圖,是簡化的Excel對象模型。

理解Excel對象模型,編寫VBA更簡單!

圖1

根據上圖的對象層次結構,我們將這些對象與Excel用戶界面一一對應起來。這樣,我們可以清楚地瞭解各個對象在整個對象模型所扮演的角色了。

理解Excel對象模型,編寫VBA更簡單!

圖2

接下來,我們對Excel對象模型做一些簡單性的總結:

  • 一個Application對象代表一個Excel應用程序,它包含應用程序範圍內的設置和選項(如“文件”選項卡上“選項”對話框內的許多選項)以及返回頂級對象的方法(如 ActiveCell 和 ActiveSheet)等。
  • 一個Window對象代表一個Excel應用程序窗體,Windows對象表示所有打開應用程序窗體的集合,你可以將Window對象視作Workbook對象的容器。
  • 一個Application對象可以包含多個工作簿Workbook(Workbooks集合)。具體而言就是,我們可以同時打開多個工作簿,但在當前操作時只有一個工作簿處於編輯狀態,這個工作簿被稱作活動工作簿(ActiveWorkbook)。
  • 一個工作簿對象Workbook可以包含多張工作表Worksheet(Worksheets集合)。具體而言就是,一個工作簿可以包含多張工作表(Worksheets),但在當前操作時只有一個工作表(Worksheet)處於編輯狀態,這個工作表被稱作活動工作表(ActiveWorksheet)。另外,Workbook對象也可以包含多張圖表Chart(Charts集合)和Excel4.0宏表(如圖2所示)。
  • 一個工作簿對象Workbook可以包含很多Shapes對象。工作表中還可以包含一些圖表,標記,註釋,控件等,這些對象都是浮在單元格上面的,這些統稱為Shapes。
  • 一個工作表對象WorkSheet可以包含多個Range對象。具體而言就是,一個工作表裡面有很多單元格,單個單元格或單元格區域用Range表示。

對於上述對象或集合,或者是其他Excel對象或集合,以及它們的方法及屬性,你可以查閱中文版《Office2003開發者手冊》或《英文版Office2013開發者手冊》(文檔如下圖所示),chm手冊文檔內置在頭條號自動回覆中,中文版請私信cn,英文版請私信en即可獲取官方chm文檔。

理解Excel對象模型,編寫VBA更簡單!
理解Excel對象模型,編寫VBA更簡單!

二、Range對象的幾種表示方法

Excel中有許多對象,最常用的對象當屬單元格對象。它是Excel中各種數據的載體。VBA中對單元格的表示方式有3種,分別是:Range("A1")方式、Cells(1,1)方式及[A1]。接下來,我們將逐一介紹這3種方式。

2.1 Range("A1")方式引用單元格

使用該種方式可以將文本型單元格地址轉換為單元格對象引用,類似於工作表中的引用函數INDIRECT的用法。它可以引用單元格、區域、整行、整列及整個工作表。

2.1.1 引用單個單元格

Range引用單個單元格對象只需要將列標加行號作為參數,左右兩邊加上引號即可,而且,Range("A1")引用對象是不區分相對引用和絕對引用的。如下圖,是立即窗口中顯示的結果:

理解Excel對象模型,編寫VBA更簡單!

2.1.2 引用單個區域

Range引用區域是利用區域左上角單元格地址加上冒號:再加上區域右下角單元格地址作為參數的,如下圖所示:

理解Excel對象模型,編寫VBA更簡單!

由於引用區域包含多個對象,其值是一個數組。因此,若要獲取區域內某一特定的對象時,需要使用索引方式提取,如下所示:

理解Excel對象模型,編寫VBA更簡單!

Range表示方式也支持表達式引用和變量引用,如下所示:

理解Excel對象模型,編寫VBA更簡單!

2.1.3 引用多個區域

如果將Range對象多個引用區域參數使用逗號隔開,並在左右兩邊加上引號,那麼,它表示引用多個區域,如下所示:

理解Excel對象模型,編寫VBA更簡單!

若同時使用Range的兩個參數,那麼它表示兩個參數最小區域的的範圍,什麼是最小區域呢?簡單來講,就是指容納兩個參數區域的最小空間。如果你不清楚,看下面示例就明白了。同時,你可以與上一個截圖第二個示例對比一下,就可以發現不同之處了。

理解Excel對象模型,編寫VBA更簡單!

2.1.4 引用整行整列

利用“行號:行號”或“列標:列標”的方式可以對整行或整列的單元格區域進行引用,如果兩個行號或列標不一致,則可以引用多行或多列,如下所示:

理解Excel對象模型,編寫VBA更簡單!

2.2 Cells(1,1)方式引用單元格

2.2.1 WorkSheet.Cells(橫座標, 縱座標)

該種方式引用某一特定工作表對象指定位置的Range對象,其表現方式如下所示:

理解Excel對象模型,編寫VBA更簡單!

2.2.2 WorkSheet.Cells(行號, 列標)

此種表示方式類似於上述方式,只是將位置參數變成了行號和列標,該種方式只能引用單個單元格,不能引用區域。其表現形式如下所示:

理解Excel對象模型,編寫VBA更簡單!

2.2.3 Range.Cells(橫座標, 縱座標)

此種表示方式是以父對象Range左上角單元格作為參考系的,向下向右累加座標系數,向上向左遞減座標系數。其表現形式如下所示:

理解Excel對象模型,編寫VBA更簡單!

2.2.4 Range.Cells(索引號)

此種表示方式是以父對象Range作為參考對象的,使用索引號索引父對象指定位置對象。其表現形式如下所示:

理解Excel對象模型,編寫VBA更簡單!

2.3 [A1]方式引用單元格

該種方式引用單元格對象非常簡單,只需在左右方括號內直接錄入單元格或單元格區域引用目標區域,其表現形式如下所示:

理解Excel對象模型,編寫VBA更簡單!

單元格對象的基本表現方式大概上述幾類,都比較好理解,剩下的細節就需要大家在平常的實踐中摸索了。接下來,我們將介紹一些簡單的用例,方便大家對Excel對象的方法和屬性有所瞭解。

三、應用實例

上述內容完整地介紹了Excel對象模型及最基本的操作對象:Range對象。接下來,我們將以一些簡單的示例結束本篇文章。

3.1 添加一張名稱為“彙總”的工作表,並將工作表放在最後一個位置。

說明:首先,聲明一個工作表對象變量Sht,使用Set語句將“彙總”表對象賦值給Sht(對象變量需要使用Set語句賦值),使用Err對象的Number屬性判斷是否存在異常,如果不存在異常,說明工作簿中含有“彙總”表,那麼使用Exit Sub離開程序,否則,使用Sheets集合中的Add方法將“彙總”工作表添加到最後位置上。

理解Excel對象模型,編寫VBA更簡單!

3.2 將單個工作簿按工作表拆分,並將每個工作表存為單獨的工作簿。

理解Excel對象模型,編寫VBA更簡單!

說明:首先,聲明三個變量,分別是:FileDialog對象fd,字符串變量path,工作表對象sht。使用Set語句獲取文件對話框對象,當用戶選擇了指定工作簿文件並按壓了OK按鈕時即fd.Show = -1的情況下,獲取工作簿所在路徑的位置,否則使用Exit Sub語句離開程序。然後,循環遍歷Sheets集合,將集合中每張表複製到單獨的工作簿中,最後關閉活動工作簿。

以上示例比較簡單,基本上只涉及工作表和工作簿對象及其屬性和方法的操作,如果你有不明白的地方,請參考官方chm文檔。


分享到:


相關文章: