国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
第11章 對象概述
 
第三部分 Excel對象模型
 
  對象模型用來描述對象之間的關系。使用VBA在Excel環(huán)境下開發(fā)應用程序,實質就是訪問控制Excel各對象的過程。使用VBA在Excel中進行編程時,必須先了解Excel的對象模型。
  Excel 2007有200多個對象,如果這些對象之間沒有任何邏輯聯(lián)系的話,這些對象疳非常難于掌握和使用。事實上,Excel中所有對象都處于一個完整的體系中,每個對象都不是孤立的。
  本部分共5章,詳細介紹了Excel中常用對象的使用方法。
 
第11章 對象概述
 
  現(xiàn)實世界是由各種各樣的對象組成的,對象之間通過一定的渠道相互聯(lián)系。計算機程序設計中也引入了對象這個概念。面向對象方法是一種非常實用的軟件開發(fā)方法,由于以客觀世界中的對象為中心,其分析和設計思想符合人們的思維方式,分析和設計的結果與宏觀世界的實際比較接近,因此容易被人們所接受。
  11.1 對象和類的概念
  Excel中包括了非常多的對象,Excel窗口、工作簿、工作表、單元格和圖表等都是對象。Excel含有上百種可以通過不同方式操作的對象,所有的VBA對象都是通過層次組織起來的,一些對象可能包含其他對象。例如,Excel是一個Application對象,該對象包含其他對象,諸如工作簿對象或命令條對象;工作簿對象又包含其他對象,諸如工作表對象或圖表對象。
  11.1.1 什么是對象
  在現(xiàn)實生活中,每個實體都是對象,例如,汽車、電視機等都是現(xiàn)實世界中的對象。每個對象都有它的屬性和操作,例如電視機有外形、顏色、音量、頻道等屬性;有切換頻道、改變音量等操作。電視機的屬性值表示了電視機所處的狀態(tài),而狀態(tài)只能通過對電視機屬性的操作來改變。
  在Excel中,對象是指一組屬性及這組屬性上的專用操作的封裝體。屬性可以是一些數(shù)據(jù),也可以是另一個對象。例如,Excel工作簿為一個對象,它的屬性有工作簿名稱、保存位置、作者、工作表等;而工作表又可以是一個對象,還可以有自己的屬性。每個對象都有它自己的屬性值,屬性值表示該對象的狀態(tài)。對象中的屬性只能通過該對象所提供的操作來存取和修改。操作也稱為方法或服務,它規(guī)定了對象的行為,表示對象所能提供的服務。一個對象通??捎蓪ο竺?、屬性和操作三部分組成。
  11.1.2 類的概念
  人們習慣于把具有相似特征的事物歸為一類。在面向對象程序設計中,類是創(chuàng)建對象的模板。對象按照實現(xiàn)的共性分組為“類”,類定義了對象的屬性及用來控制對象行為的方法。
  類的定義可以看作是建立對象的原型。建立類之后,就可用它來建立許多需要的對象。與其他面向對象的程序設計語言(如C++、Java)不同的是,在使用VBA的大多數(shù)時間里,開發(fā)者都不會接觸到類的相關知識。如果開發(fā)者準備創(chuàng)建自己的對象類,可以使用VBA的類模塊來完成該任務。
  11.2 對象的屬性、事件和方法
  在應用程序中創(chuàng)建對象后,可通過設置對象的屬性改變其外觀。在程序運行過程中,隨著外部條件的改變(如單擊鼠標、輸入數(shù)據(jù)等),將觸發(fā)對應的事件。執(zhí)行事件過程,可以達到與用戶交互的目的。
  11.2.1 對象屬性
  屬性決定了一個對象的外觀和行為。要改變一個對象的外觀和行為,可以通過改變對象的屬性來實現(xiàn)。大多數(shù)對象屬性是在對象生成時自動設置的,用戶可以在設計時通過屬性窗口或運行時通過代碼改變。在運行時可以設置并可獲得值的屬性叫做讀寫屬性;在運行時只能讀取的屬性叫做只讀屬性。
  屬性定義了對象的特征,諸如大小、顏色或屏幕位置;或某一方面的行為,諸如對象是否激活或可見??梢酝ㄟ^修改對象的屬性來改變對象的特性。
  例如,工作簿對象有名稱屬性;區(qū)域對象有列、字體、公式、名稱、行、樣式和值等屬性。這些對象屬性是可以設置的。通過設置對象的屬性可以控制對象的外觀和行為。對象屬性一次只能設置為一個特定的值。例如,當前工作簿不可能同時有兩個不同的名稱。
  VBA中最難理解的部分是有些屬性同時又可以是對象。如區(qū)域(Range)對象,可以通過設置字體顏色來改變選定單元格的外觀。但是,字體(Font)可以有不同的名稱(Times New Roman,Arial,……),不同的字號(10,12,14……)和不同的樣式(粗體,斜體,下畫線,……)。這些都是字體的屬性。如果字體有屬性,那么字體也是對象。
  1. 設置屬性值
  設置屬性值可通過Visual Basic編輯器中的“屬性”窗口進行,也可在程序中使用代碼對其進行改變,具體格式如下:
  object.property = expression
  其中,object為對象名,property為對象的某個屬性。
  例如,下面的過程通過設置窗體中的Caption屬性來更改Visual Basic窗體的標題。
  Sub ChangeName(newTitle)
    myForm.Caption?。健ewTitle
  End Sub
  2. 讀取屬性值
  可以通過屬性的返回值來檢索對象的信息。讀取屬性值可以用以下語法:
   variable = object.property
  下列過程使用一個消息框來顯示標題,它顯示在當前活動窗體頂部。
  
  End Sub
  屬性值也可以作為較復雜表達式的一部分,而不必將屬性賦予變量。下面的代碼計算工作表“Sheet1”兩單元格數(shù)據(jù)之和。
  intSum = Sheet1.Cells(2,1).Value + Sheet1.Cells(2,2).Value
  工作表Sheet1對象中又包含很多對象,其中的Cells對象為工作表單元格集合對象,父對象引用子對象時通過點運算符進行連接。
  11.2.2 對象事件
  事件是某個特定的時刻所發(fā)生的事情,它是對象狀態(tài)轉換過程的描述。事件沒有持續(xù)時間,是瞬間完成的。
  事件是由對象識別的一個動作。開發(fā)人員可以編寫相應的VBA代碼來響應該動作。在VBA中,可以激發(fā)事件的用戶動作包括:切換工作表、選擇單元格、單擊鼠標等幾十種事件。當事件發(fā)生時,將執(zhí)行包含在事件過程中的代碼。如果用戶沒有定義某事件所調(diào)用的過程,那么當發(fā)生該事件時就不會產(chǎn)生任何響應。
  事件既可以由用戶動作(如單擊鼠標、按鍵等)產(chǎn)生,也可以由程序代碼或系統(tǒng)產(chǎn)生(如計時器定時產(chǎn)生的事件)。
  編寫事件響應代碼是在“代碼編輯器”中進行的,“代碼編輯器”的右邊有一個事件列表,這個事件列表從屬于左邊的控件對象,當左邊控件列表中的控件改變后,右邊的事件列表也會發(fā)生變化,如圖11-1所示。
             
  11.2.3 對象方法
  方法指的是對象能執(zhí)行的動作。例如,可以使用Add方法添加一個新工作簿或者工作表。下面的程序使用Add方法給當前工作簿增加一個新的工作表。
  Sub AddSheet()
    ActiveWorkbook.Sheets.Add
  End Sub
  對象可以使用不同的方法。例如,區(qū)域(Range)對象有清除單元格內(nèi)容的ClearCoutents方法,清除格式的ClearFormats方法,以及同時清除內(nèi)容和格式的Clear方法;另外還有選擇、復制或移動對象的方法等。
  部分對象的方法有可選參數(shù),用來確定方法執(zhí)行的具體方式。例如,工作簿(WorkBook)對象有一個Close(關閉)方法,可以使用它關閉任何打開了的工作簿。如果工作簿有改動,Excel分彈出一個信息,詢問用戶是否要保存變化。這時開發(fā)人員可以設定Close方法的SaveChanges參數(shù)為“假”(False)來關閉這個工作簿并且不管它的任何變化。
  在調(diào)用方法時使用點操作符引用對象,如果有參數(shù),在方法后加上參數(shù)值,參數(shù)間用空格隔開。在代碼中使用方法的格式如下:
  object.method
  例如,下面的代碼選中工作表Sheet1的單元格“A1”,然后清除其中的內(nèi)容:
  Sheet1.Range("A1").Select
  Sheet1.Range("A1").Clear
  11.3 對象變量和對象數(shù)組
  本書前面章節(jié)介紹了變量和數(shù)組的知識。在VBA中,變量和數(shù)組除了能保存簡單數(shù)據(jù)類型外,還可以保存和引用對象。在程序中使用變量時引用一個反復使用的對象可加快程序的執(zhí)行速度。
  11.3.1 對象變量
  對象變量是代表一個完整對象的變量,該變量中實際保存著具體對象的引用指針。與普通變量類似的是,使用對象變量也需要兩個步驟:聲明對象變量和指定對象變量到某一對象。
  1. 引用對象的成員
  可以用點操作符連接對象名來限定對某個對象成員的引用,同時也指定了該對象成員在對象層次結構中的位置。其語法格式如下:
 ?。紝ο竺荆紝ο竺荆?#8230;…
  后一對象是前一對象的成員,它限定了對前一對象所包含的對象成員的引用。如以下語句:
  Application.Workbooks("Book1.Xlsm").Worksheets("Sheet1").Range(“A1”)
表明是對工作簿Book1上的工作表Sheet1中單元格A1的引用,其中Application代表Excel應用程序本身,可省略。若Book1是當前活動工作簿,則上述語句可簡寫為:
  Worksheets("Sheet1").Range("A1")
  若Sheet1是當前活動工作表,則又可簡寫為:
  Ranet("A1")
  因此,若在引用中省略了工作簿對象,則表明使用當前活動工作表;若再省略了工作表對象,則表明使用當前活動工作表。
  2. 聲明對象變量
  可以使用Dim語句或其他的聲明語句之一(Public,Private或Static)聲明對象變量。引用對象的變量必須是Variant、Object,或是一個對象的指定類型。例如,下列聲明是有效的:
  
  注意:如果使用對象變量前沒有聲明數(shù)據(jù)類型,則對象變量默認的數(shù)據(jù)類型是Variant類型。
  在有的情況下,只有等到程序運行時才知道對象變量引用的對象類型,這時可將對象變量聲明為Object數(shù)據(jù)類型。使用Object數(shù)據(jù)類型可以創(chuàng)建任何對象的一般的引用。
  如果知道對象變量引用的對象類型,最好將其聲明為所知道的對象類型。聲明指定的對象類型提供自動的類型檢查,更快的代碼生成,并增加可讀性。例如,如果對象變量MyObject指定為Range對象類型,則可以用下列的語句來聲明:
  Dim MyObject As object                                  '聲明為一般的對象
  Dim Myobject As Range         '只聲明為Range對象
  3. 給對象變量賦值
  與普通變量的賦值不同,給對象變量賦值必須使用Set語句。例如,下面的代碼給對象變量MyCell賦值:
  Set MyCell = Worksheets(1).Range("C2")
  可以同時使用New關鍵字和Set語句來聲明對象變量,并賦值一對象給它。例如,下面的代碼首先聲明一個集合對象,然后使用New關鍵字來新建一個集合對象:
  Dim MyCollection As Collection
  Set MyCollection?。健ew Collection
  設置一個對象變量等于“Nothing”會中斷此對象變量與任何特定對象的關聯(lián),如此可預防因意外改變變量而更改對象。在關閉關聯(lián)對象后,對象變量總是設置為“Nothing”,所以可以檢測對象變量是否指向有效的對象。例如:
  If Not Myobject Is Nothing Then        '變量引用有效的對象
  ……
  End If
  當然,該檢測不能絕對地決定用戶是否已關閉包含對象變量所引用對象的應用程序。
  4. 引用對象的當前實例
  “Me”關鍵字可用來對象的當前實例,即代碼正在執(zhí)行的對象。所有與當前對象關聯(lián)的過程都可以通過“Me”來引用。使用“Me”來傳遞關于對象的當前實例信息到其他模塊中的過程顯得特別有用。例如,假設在模塊中有以下過程:
  Sub ShangeobjectColor(MyobjectName As object)
    MyobjectName.BackColor?。健GB(Rnd*256,Rnd*256,Rnd*256)
  End Sub
  使用以下語句,可以調(diào)用過程并將對象的當前的實例當做參數(shù)來傳遞:
  ChangeobjectColor Me
  使用對象變量可簡化代碼,并提高代碼的執(zhí)行速度。例如,如果在某段代碼中需要反復使用單元格C2,那么完整的引用代碼如下:
  Worksheets(1).Range("C2").Value = “地址”
  Worksheeta(1).Range("C2").Font.Name?。健?#8220;黑體”
  Worksheets(1).Range("C2").Font.Bold?。健rue
  使用對象變量后,代碼修改如下:
  Dim MyCell As Range
  Set MyCell?。健orksheets(1).Range("C2")
  MyCell.Value?。健?#8220;地址”
  MyCell.Font.Name?。健?#8220;黑體”
  MyCell.Font.Bold?。健rue
  這段代碼更易讀,并且執(zhí)行效率更高。僅從這段代碼上還不易覺察速度的提高,如果是在一個需要重復執(zhí)行幾百上千次的循環(huán)中執(zhí)行這段代碼,其執(zhí)行效率明顯提高。
  11.3.2 對象數(shù)組
  如果在程序中需要處理大量相同類型的對象,這時可使用對象數(shù)組來指定這些對象。對象數(shù)組的定義與普通類型數(shù)據(jù)的數(shù)組相同,對象數(shù)組元素的使用與對象變量的使用類似。下面以實例形式介紹對象數(shù)組的定義和使用。
  例如,如果要引用工作表中A列的前10個單元格,可使用以下代碼:
  
  程序首先定義一個具有10個元素的對象組,接著使用一個循環(huán)將各單元格的引用賦值給對象數(shù)組,最后再使用一個循環(huán)調(diào)用對象數(shù)組各元素。本例只顯示各單元格的值,另外可通過對象數(shù)組中的元素MyRange(i)來控制各單元格的字體等各種懺悔,例如:
  
  11.4 集合概念
  在使用Excel開發(fā)應用程序時,需要大量使用到集合。通過對集合的操作可簡化代碼。下面介紹集合的概念及處理集合的方法。
  11.4.1 集合的概念
  在Excel中新建一個工作簿,可以發(fā)現(xiàn)每個工作表都是相同的。像這樣一組相似的對象就稱為“集合”,集合也是對象。Excel中使用得最頻繁的集合是代表所有的工作表和圖表工作表的Sheets集合、Workbooks集合、Worksheets集合及Windows集合。當使用集合時,可以在該集合中所有的對象上執(zhí)行相同的操作。
  集合是一種特定類型的對象,代表一組相同的對象。例如,一部電話是一個對象,多部電話就組成電話集合。
  一個集合也可能是另一個對象的屬性。例如,電話中的按鍵集合是電話對象的屬性,是單個按鈕對象的集合。因此,它們之間的關系是:電話集合是多部單個電話對象組成的集合,每個電話對象有一個稱作按鍵集合的屬性,而按鍵集合是單個按鈕對象組成的集合。
  11.4.2 集合的方法和屬性
  所有的集合都有方法和屬性,可用來訪問集合中的單個對象。其中,最重要的方法和屬性中有三個,即Count屬性、Item方法和Add方法。
  1. Count屬性
  該屬性指出在集合中有多少個單個對象。例如:
  Dim numWorsheets
  numWorksheets=ActiveWorkbook.Worksheets.Count
其中,numWorksheets是一個變量,存儲ActiveWorkbook對象的數(shù)量(即工作簿中工作表的數(shù)量)。
  注意:若一個集合為空,該集合的Count屬性值為0。
  2. Item方法
  該方法訪問集合中一個特定的對象。例如:
  Set myWorksheet=ActiveWorkbook.WorkSheets.Item(2)
括號中的數(shù)字表明訪問的是哪個工作表,即在Worksheets集合中的第2個Worksheet對象,并將它賦給myWorksheet變量。
  也可以在括號中使用變量,例如:
  上面的代碼首先用變量numWorksheets來存儲在Worsheets集合中Worksheet對象的數(shù)量,然后訪問最后的工作表。因此,如果工作簿中共有5個工作表,則能指定最后項目為“5”來訪問最后的工作表,故下面的代碼與上面代碼最后一行等價:
  Set theLastWorksheet=ActiveWorkbook.Worksheets.Item(5)
  3. Add方法
  該方法允許向集合中添加對象。例如:
  Set anotherWorksheet=ActiveWorkbook.WorkSheets.Add("Sheet6")
  如何使用Add方法取決于想要添加項目的集合對象。在多數(shù)情況下,能為新的對象指定一個名字,如上面代碼中的“Sheet6”。
  11.4.3 訪問集合中的對象
  一個集合包含著具有相同類型的多個對象,除了使用上面介紹的方法向集合中增加對象外,還可通過集合的屬性訪問集合中的單個對象。
  1. Excel中的集合
  Excel中有很多系統(tǒng)定義的集合,如以下代碼可在當前工作簿中增加一張工作表(工作表集合中增加一個對象):
  Set ws = ActiveWorkbook.Worksheets.Add
  Worksheets是Worksheet(工作表)對象的集合,也是ActiveWorkbook對象的一個屬性。在這是也可以得出集合的用處:一個工作簿可以包含任意多個工作表,而Worksheets集合提供了管理這些工作表的簡單的方法。
  Excel中的常用的集合對象還有以下幾類:
  ●Sheets,工作簿中所有工作表的集合;
  ●Workbooks,所有打開的工作簿的集合;
  ●Charts,工作簿中圖表工作表的集合。
  2. 引用集合中的對象
  使用VBA可以處理某個對象的整個集合,或者某集合中的一個單獨的對象。引用集合中的對象的方法是:
  集合(“對象名”)或集合(對象索引號)
  引用集合中的某個對象,即引用對象名或對象索引號所打賭對象。例如,以下代碼引用集合Worksheets中的工作表Sheet1:
  Worksheets("Sheet1")
  若Sheet1是集合中的第一個工作表對象,還可以寫為以下形式:
  Worksheets(1)
  注意:“Sheets”集合由工作簿中的所有工作表(包括圖表工作表)組成。若要引用工作稍事 的第一個工作表,可采用語句Sheet(1)表示。
  11.5 處理對象和集合
  在Excel編程過程中,需要大量地處理對象和集合。VBA提供了兩個非常有用的結構,用于處理對象和集合。
  11.5.1 使用With……End With語句
  很多時候,需要對同一個對象進行多個操作(即編寫多行代碼),這時若重復輸入相同的對象引用代碼,會增加了錄入量,從而可能造成更多的輸入錯誤。同時,這些重復輸入的代碼,也降低了程序執(zhí)行效率。
  使用With……End With語句可以對某個對象執(zhí)行一系列的操作,而不必重復指出該對象的名稱。其語法格式如下:
  With?。紝ο螅?/div>
    [語句代碼]
  End With
  其中,<對象>表示W(wǎng)ith語句要執(zhí)行操作的具體對象;[語句代碼]為對某對象執(zhí)行操作的一條或多條語句,前面以點操作符開頭。
  下面的代碼對當前工作簿中的工作表Sheet1上的單元格區(qū)域A1:C10進行操作,設置該區(qū)域的字體樣式、字體大小、下畫線及字體顏色等屬性。
  
  將該代碼使用With……End With語句重新編寫,得到下面的代碼:
  
該代碼執(zhí)行與前面的代碼完全一樣的操作。
  不能用一個With……End With語句來設置多個不同的對象,但可以將With塊放在另一個之中而產(chǎn)生嵌套的With語句,使用時必須在內(nèi)層的With塊中使用完整的對象引用來指出在外層的With塊中的對象的成員,例如:
  使用With語句,不僅能避免反復輸入相同的代碼,使程序代碼更簡潔,而且更重要的是,能使程序運行得更快。在上面的“設置格式”程序中,可稍微感覺到兩個程序之間速度的差異,若數(shù)據(jù)量再加大,則這種運行速度之間的差異將更明顯。
  在錄制宏時,Excel將大量使用With……End With結構,可參見本書第2章的內(nèi)容。
  11.5.2 使用For Each……Next語句
  上一節(jié)介紹了集合的概念,其包含的是一組相關的對象。如果需要對集合中的每個對象執(zhí)行相同的操作,首先需通過集合對象的Count屬性獲取集合中包含的對象數(shù)量,然后通過循環(huán)語句對集合中的每個對象執(zhí)行相同的操作。例如,以下代碼將選中區(qū)域單元格中的英文字母轉換為大寫:
  Dim i As Long
  j = Selection.Count
  For i =1 To j
   Selection.Cells(i) = UCase(Selection.Cells(i))
  Next
  在VBA中提供了一個For Each……Next語句,該循環(huán)語句可以逐個處理集合中每個對象。使用該語句處理集合時,不必知道集合中有多個元素。其語法結構如下:
  For Each 元素 In 集合
    [語句系列1]
    [Exit For]
    [語句系列2]
  Next [element]
  使用For Each……Next語句或將前面例子中的代碼改寫為以下形式:
  Dim MyCell As Range
  For Each MyCell In Selection
    MyCell?。健Case(MyCell)
  Next
 
本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服