日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

劃重點!告訴你什么是Excel VBA對象模型及如何引用對象

 hercules028 2022-01-14

excelperfect

標(biāo)簽:VBA,對象模型

要編寫Excel VBA程序,必須知道對象??梢哉J(rèn)為,VBA基于面向?qū)ο缶幊?,這意味著VBA程序主要是在處理(或操控)對象。因此,我們要掌握ExcelVBA編程,必須理解:

1.什么是對象

2.如何操控VBA對象

3.Excel VBA對象模型

剛開始接觸對象和對象模型的朋友,可能會被一些概念搞糊涂,這是正常的,隨著不斷地學(xué)習(xí)和使用,你的理解會越來越深入,這些概念也會逐漸清晰起來。

基本說來,Excel VBA對象模型是編程時可以使用的對象的層次結(jié)構(gòu),它使得引用要操控的對象更容易。

Image

對象層次結(jié)構(gòu)如下:

層級1:在最頂端,只有一個對象。

層級2:層次結(jié)構(gòu)頂部的對象包含的一些對象。

層級3:層級2中的對象可能包含的一些對象。

層級4:層級3中的對象可能包含的一些對象。

對象可能包含其他對象。該過程會重復(fù),直到到達不包含任何其他對象的對象。

通常,層次結(jié)構(gòu)頂部的對象是Application對象,即層級1的對象是應(yīng)用程序本身。對于Excel來說,Application對象就是Excel本身。

Application對象包含其他VBA對象。ExcelApplication對象包含的一些主要對象為:

  • AddIns,包含所有的加載項對象。
  • Windows,包含應(yīng)用程序所有Window對象。
  • Workbooks,包含所有Workbook對象。
 
這些VBA對象中的每一個又包含其他對象。例如,Workbook對象中包含的一些VBA對象如下:
  • Charts,包含Chart對象。
  • Names,包含Name對象
  • VBProjects,代表打開的項目。
  • Windows,包含指定Excel工作簿中的Window對象。
  • Worksheets,包含Worksheet對象。
 
同樣,這些VBA對象包含其他對象。例如Worksheet對象包含下列VBA對象:
  • ChartObjects,包含ChartObject對象。

  • Comment,代表單元格批注。

  • Hyperlink,代表超鏈接。

  • Name,代表為特定單元格區(qū)域定義的名稱。

  • PageSetup,用于存儲打印信息。

  • PivotTables,包含PivotTable對象。

  • Range,代表單元格、行、列、所選擇的單元格,或三維單元格區(qū)域。








 
如果以圖形描述,上述Excel VBA對象層次結(jié)構(gòu)大致如下所示:

Image

 
注:上圖僅僅是Excel VBA對象模型層次結(jié)構(gòu)的很小一部分。但不要著急,在編程時,我們通常只使用其中一些常用的對象,即便需要使用一些不常見對象,也能很快在Excel對象模型參考中找到,或者通過宏錄制器錄制宏來找到想要用的對象。
 
下面,我們來看看Excel VBA對象模型層次結(jié)構(gòu)背后的邏輯。
 
對象集合
集合有兩個顯著特征:它們本身就是對象;它們的主要目的是對同一類的VBA對象進行組合和管理。
 
因此,集合是用于組合和管理其他對象的對象。
 
在某些情況下,集合非常有用。例如,假設(shè)想對一組特定的對象執(zhí)行某些操作,如果所有這些對象都是同一集合的一部分,則可以構(gòu)造VBA代碼以遍歷集合的每個成員并執(zhí)行所需的操作??梢韵氲玫剑@種結(jié)構(gòu)比單獨列出每個集合成員更簡單。
 
所以,集合允許同時處理一組完整的VBA對象,而不是處理每個單個的對象。
 
以下是常見集合的示例:
  • Workbooks,當(dāng)前打開的所有Excel工作簿的集合。
  • Worksheets,特定工作簿中所有Excel工作表的集合。
  • Charts,特定工作簿內(nèi)所有圖表工作表。
  • Sheets,特定工作簿中所有工作表的集合,此時與工作表類型無關(guān),包含常規(guī)工作表和圖表工作表。
 
引用對象
在編寫VBA代碼時,了解如何引用對象是至關(guān)重要的。很明顯,想要開始處理特定的VBA對象時,必須先識別它,也就是說,告訴VBA要處理哪個對象。
 
如果遍歷Excel VBA對象模型的整個層次結(jié)構(gòu)來引用對象,則稱為完全限定引用。
 
我們已經(jīng)知道,Excel對象模型層次結(jié)構(gòu)的頂部是Application對象,因此引用這個對象很簡單,只需輸入:
Application
 
從這里開始,需要使用點(.)運算符開始沿著層次結(jié)構(gòu)移動,即使用點(.)將每個VBA對象連接到上一個對象(對象的父對象)。這些點(.)用于自上而下連接并引用ExcelVBA對象模型的成員。
 
例如,假設(shè)要引用Range對象,參考上圖所示的對象模型層次結(jié)構(gòu),Range對象處于第4層:

Image

 
現(xiàn)在,自頂而下使用(.)連接這些不同的對象,從而引用Range對象:
Application.Workbooks.Worksheets.Range
 
注意,這只是基本的引用框架,并沒有實際識別單個的VBA對象,即如果有幾個工作簿或工作表,如何知道引用哪個?如何知道要處理的具體單元格區(qū)域。
 
這就需要處理如何引用集合內(nèi)的特定對象??梢允褂脙煞N方法。
 
方法1:使用對象名稱,其語法為:集合名(“對象名”)。例如,如果要處理工作表Sheet1,則可以使用:
Worksheets(“Sheet1”)
或者:
Sheets(“Sheet1”)
 
方法2:使用索引號,其語法為:集合名(索引號)。這樣,上面的代碼可修改為:
Worksheets(1)
或者:
Sheets(1)
 
好了,解釋清楚這些后,我們回過去看如何引用具體的Range對象。假設(shè)要處理工作簿Book1的工作表Sheet1中的單元格A1,則其完全限定引用為:
Application.Workbooks(“Book1.xlsm”).Worksheets(“Sheet1”).Range(“A1”)
 
正如你所看到的,完全限定引用需要編寫很長的代碼,繁瑣且難以閱讀。實際上,可以簡化對象引用,使代碼更簡短。
 
之所以能夠簡化完全限定引用,是因為Excel VBA對象模型有一些默認(rèn)的對象,當(dāng)沒有明確輸入時,Excel會假設(shè)你引用的是這些對象。
 
下面來看看一些簡化引用的情形。
 
情形1Application對象
Excel總是假設(shè)你在處理Application對象,因此,可以從引用中忽略該對象。這樣,上面的完全限定引用代碼可簡化為:
Workbooks(“Book1.xlsm”).Worksheets(“Sheet1”).Range(“A1”)
 
情形2:當(dāng)前工作簿和當(dāng)前工作表
Excel總是假設(shè)你在處理當(dāng)前工作簿(標(biāo)準(zhǔn)模塊中代碼所在的工作簿),如果你的目的是處理當(dāng)前工作簿,則上面的代碼可進一步簡化為:
Worksheets(“Sheet1”).Range(“A1”)
 
如果你要處理的工作表是當(dāng)前活動工作表,代碼又可簡化為:
Range(“A1”)
 
小結(jié)
如果想要精通Excel VBA,那么必須掌握ExcelVBA對象模型的原理。隨著不斷的學(xué)習(xí)和實踐,你會更清楚其中的細節(jié),ExcelVBA對象模型的結(jié)構(gòu)和使用也會越來越熟練。

歡迎在下面留言,完善本文內(nèi)容,讓更多的人學(xué)到更完美的知識。

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多