电竞比分网-中国电竞赛事及体育赛事平台

分享

第11章 對(duì)象概述

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

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多