免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開(kāi)通VIP
Excel VBA入門(五)Excel對(duì)象操作

本章是本系列教程的重點(diǎn)。但我覺(jué)得應(yīng)該不是難點(diǎn)。從第零章開(kāi)始到學(xué)完本章,應(yīng)該可以把VBA用于實(shí)戰(zhàn)中了。

Excel對(duì)象主要有4個(gè):

  • 工作薄 Workbook
  • 工作表 Worksheet
  • 單元格區(qū)域 Range
  • 單元格 Cell

這里我只講后面3個(gè),不講工作薄。原因有2點(diǎn):

第零章里面講過(guò),工作薄其實(shí)就是一個(gè)Excel文件。我不建議直接操作Excel文件。因?yàn)槲募傩员桓牡臋C(jī)率高。比如修改了文件名,或者文件被移動(dòng)到其它地方去了,這樣的話,寫死的VBA代碼就不管用了。這是主要原因
學(xué)完本章,或者后面的章節(jié),應(yīng)該可以自己尋找到如何操作Excel工作薄的方法
在多數(shù)情況下,如果需要操作多個(gè)工作薄中的數(shù)據(jù),建議把這些工作薄里面的表復(fù)制到一個(gè)工作薄中進(jìn)行操作。這樣會(huì)方便很多。

1. 操作工作表

其實(shí)對(duì)工作表的操作,更多是對(duì)其引用。當(dāng)一個(gè)工作薄中有多個(gè)工作表而需要用到不同表中的數(shù)據(jù)時(shí),就需要分別引用不同的工作表。

引用工作表,有兩種方式:通過(guò)表名引用、通過(guò)表順序引用

1.1 按表名引用

顧名思義,表名引用即通過(guò)工作表的名字來(lái)引用相應(yīng)的工作表。除了可以直接在Excel中看到工作表的名字外,也可以在VBE中左側(cè)的工程視圖里看到當(dāng)前工作薄中包含有哪些工作表。

如上圖紅框所示,括號(hào)里面的即為表名。在VBA中可如下分別引用這3個(gè)表:

Sub test()    Dim sht_slea As Worksheet    Dim sht_result As Worksheet    Dim sht_para As Worksheet    Set sht_slea = Worksheets("SLEA")    Set sht_result = Worksheets("Check_Result")    Set sht_para = Worksheets("Parameter")End Sub

如上,用Dim 變量名 As Worksheet的格式來(lái)定義一個(gè)工作表對(duì)象。用Set 變量名 = Worksheets("表名")的格式來(lái)把工作表對(duì)象賦值給指定的變量。然后就可以用這個(gè)變量來(lái)引用或操作對(duì)應(yīng)工作表中的對(duì)象和數(shù)據(jù)了。

1.2 按表順序引用

順序引用,即按工作表出現(xiàn)在工作薄中的順序從左到右,依次用1、2、3.……來(lái)引用。格式和以表名引用一樣:

Sub test()    Dim sht_slea As Worksheet    Dim sht_result As Worksheet    Dim sht_para As Worksheet    Set sht_slea = Worksheets(2)    Set sht_result = Worksheets(1)    Set sht_para = Worksheets(3)End Sub

這里要提出的是,在VBE工程窗口中看到的自上而下的表順序并不是在VBA中引用的順序。這個(gè)順序是以工作表在工作薄中從左到右的順序?yàn)闇?zhǔn)。因此上例代碼是基于如下順序的:

這也意味著,如果被人為地有意或無(wú)意地拖動(dòng)這些表而改變了它們的順序,那么以這種方式引用工作表將得不到預(yù)想中的結(jié)果

2. 操作單元格區(qū)域

單元格區(qū)域,即Range對(duì)象。應(yīng)該是在Excel VBA中用得最多的對(duì)象。Range對(duì)象是Worksheet對(duì)象的一個(gè)子集。所以通常通過(guò)worksheet_object.Range()的方式來(lái)引用。

單元格區(qū)域,可以是單個(gè)單元格,也可以是多個(gè)連續(xù)的單元格和多個(gè)不連續(xù)的單元格。在使用單元格區(qū)域?qū)ο笄埃瑧?yīng)該先進(jìn)行變量定義。把變量定義為Range對(duì)象即可:

Dim rng As Range

本節(jié)使用下圖數(shù)據(jù)為例進(jìn)行代碼演示:

2.1 單個(gè)單元格區(qū)域的引用

在Excel中,每個(gè)單元格都是有其相應(yīng)的地址的,或者叫做“名字”也可以。最常用到的,就是平時(shí)說(shuō)的A1、B4、D10等。在VBA中,可以通過(guò)單元格的地址來(lái)引用單個(gè)單元格。

Sub test()    Dim sht_slea As Worksheet    Dim rng As Range    Set sht_slea = Worksheets("SLEA")    Set rng = sht_slea.Range("D2")    Debug.Print rngEnd Sub

輸出:92257598
即D2單元格中的數(shù)據(jù)。這里可能會(huì)引起誤會(huì),特說(shuō)明一下。僅在Range對(duì)象引用的是單個(gè)單元格時(shí),才可以用Debug.Print或者MsgBox來(lái)輸出Range對(duì)象中的內(nèi)容。如果將接下來(lái)介紹的引用了多個(gè)單元格的Range對(duì)象使用Debug.Print或者MsgBox來(lái)輸出,將會(huì)報(bào)錯(cuò)。

2.2 多個(gè)連續(xù)單元格區(qū)域的引用

這種引用則類似于用鼠標(biāo)在工作表中選中特定區(qū)域(然后我們可以給這個(gè)區(qū)域加上邊框,或者加上底色等操作),或者是在Excel函數(shù)中引用某個(gè)區(qū)域。如選中A1到D4,或者對(duì)D2到D4中的數(shù)值進(jìn)行求和-SUM(D2:D4)。在VBA中也可以這樣來(lái)引用。

Sub test()    Dim sht_slea As Worksheet    Dim rng As Range    Set sht_slea = Worksheets("SLEA")    Set rng = sht_slea.Range("A1:D4")    rng.Interior.ColorIndex = 16End Sub

如上代碼中,先引用SLEA表,然后把這個(gè)表中A1到D4區(qū)賦值給rng對(duì)象。最后一行把這個(gè)區(qū)域標(biāo)上灰底色。結(jié)果如下:

對(duì)于這樣多行多列的單元格區(qū)域,通常只是用于設(shè)置其格式,很少會(huì)直接對(duì)其中每個(gè)單元格的數(shù)據(jù)進(jìn)行操作的。更多的是對(duì)單行或單列中的數(shù)據(jù)進(jìn)行操作。比如把上例中D1到D5的數(shù)據(jù)依次輸出:

Sub test()    Dim sht_slea As Worksheet    Dim rng As Range    Set sht_slea = Worksheets("SLEA")    Set rng = sht_slea.Range("D2:D5")    For Each Item In rng        Debug.Print Item    Next ItemEnd Sub

執(zhí)行結(jié)果如下:

2.3 多個(gè)不連續(xù)單元格區(qū)域的引用

這種引用方式應(yīng)該應(yīng)用場(chǎng)景不多,我本人目前為止還沒(méi)有在工作中使用過(guò)。

它的引用只需要在Range()函數(shù)中的參數(shù)里,在雙引號(hào)中輸入多個(gè)區(qū)域地址中間用逗號(hào)隔開(kāi)即可。如以下代碼可將B2到B5,D2到D5區(qū)域標(biāo)上紅色。

Sub test()    Dim sht_slea As Worksheet    Dim rng As Range    Set sht_slea = Worksheets("SLEA")    Set rng = sht_slea.Range("D2:D5, B2:B5")    rng.Interior.ColorIndex = 3End Sub

結(jié)果如下:

3. 操作單元格對(duì)象

單元格,即Cell。不過(guò)在VBA里面,這個(gè)Cell得加上個(gè)s,即Cells,然后在連帶著的括號(hào)里面輸入用數(shù)字表示的行號(hào)和列號(hào),即可引用到單個(gè)單元格對(duì)象。Cells對(duì)象也是Worksheet對(duì)象的一個(gè)子集。通常通過(guò)worksheet_object.Cells()的方式來(lái)引用。

Sub test2()    Dim sht_slea As Worksheet    Set sht_slea = Worksheets("SLEA")    Debug.Print sht_slea.Cells(1, 2)End Sub

輸出B1單元格(第1行,第2列)的內(nèi)容:Subsector

所以Cells()的第1個(gè)參數(shù)是行號(hào),第2個(gè)參數(shù)是列號(hào)。都用數(shù)字表示。在上例中,使用Cells和使用Range好像沒(méi)什么區(qū)別,但是在進(jìn)行數(shù)據(jù)處理時(shí),我們經(jīng)常需要?jiǎng)討B(tài)地把數(shù)據(jù)讀或?qū)懭胍粋€(gè)單元格中,這時(shí)候,用數(shù)字表示位置的Cells對(duì)象,再結(jié)合For循環(huán),操作起來(lái)就很方便了。

如以下代碼可以把A1到D5中所有單元格的內(nèi)容分別輸出:

Sub test2()    Dim sht_slea As Worksheet    Set sht_slea = Worksheets("SLEA")    For r = 1 To 5        For c = 1 To 4            Debug.Print sht_slea.Cells(r, c)        Next    NextEnd Sub

簡(jiǎn)單來(lái)說(shuō),Range對(duì)象便于把單元格區(qū)域作為一個(gè)整體來(lái)引用或操作,而Cells對(duì)象則方便于對(duì)每一個(gè)單元格分別進(jìn)行操作。


番外篇

1. 理解Range("B2:B4, D2:D4")和Range("B2:B4", "D2:D4")的區(qū)別

先看清楚,上面兩種格式

  • 一個(gè)是把兩個(gè)區(qū)域放在一個(gè)雙引號(hào)里面,用逗號(hào)隔開(kāi)
  • 另一個(gè)是把兩個(gè)區(qū)域分別放在雙引號(hào)里面,用逗號(hào)隔開(kāi)

前者是分別引用B2:B4和D2:D4這兩個(gè)區(qū)域,而后者則表示引用的是從B2:B4開(kāi)始到D2:D4結(jié)束為止的這一整個(gè)連續(xù)的區(qū)域。所以后者其實(shí)是等價(jià)于Range("B2:D4")。

所以雖然使用后者的方式來(lái)使用Range也不會(huì)報(bào)錯(cuò),但其實(shí)通常并不會(huì)這么使用

2. 結(jié)合Cells對(duì)象的Range

因?yàn)镃ells對(duì)象接受數(shù)字來(lái)表示行和列,而在Excel中,如果有兩個(gè)行列對(duì),就可以表示一個(gè)單元格區(qū)域了。例如Range("B2:D4")也可以用Range(Cells(2, 2), Cells(4, 4))來(lái)表示。這種方式有時(shí)候很有用,如需要根據(jù)條件來(lái)判斷區(qū)域的開(kāi)始和結(jié)束位置時(shí),它就派上用場(chǎng)了。

3. 父對(duì)象的省略

其實(shí)前面提到過(guò)的Worksheet對(duì)象,它是有父對(duì)象的。其父對(duì)象為Workbook對(duì)象,而Workbook對(duì)象的父對(duì)象是頂級(jí)對(duì)象Application。Range的父對(duì)象是Worksheet對(duì)象,Cells對(duì)象的父對(duì)象也是Worksheet對(duì)象。所以在給這些對(duì)象賦值時(shí),標(biāo)準(zhǔn)的寫法應(yīng)當(dāng)要把父對(duì)象給寫上,如:

Sub test3()    Dim sht_slea As Worksheet    Dim titl_rng As Range    Dim data_rng As Range    Set sht_slea = Application.ThisWorkbook.Worksheets("SLEA")    Set title_rng = sht_slea.Range("A1:D1")    Set data_rng = sht_slea.Range(sht_slea.Cells(2, 1), sht_slea.Cells(4, 4))End Sub

但是如果VBA中的代碼涉及到的對(duì)象都位于一個(gè)工作表中,而這個(gè)工作表當(dāng)前是激活狀態(tài),則這些父對(duì)象是可以省略的。默認(rèn)就是當(dāng)前(激活的)工作表。所以當(dāng)SLEA工作表激活時(shí),上述代碼和下面的是等價(jià)的:

Sub test4()    Dim sht_slea As Worksheet    Dim titl_rng As Range    Dim data_rng As Range    Set sht_slea = Worksheets("SLEA")    Set title_rng = sht_slea.Range("A1:D1")    Set data_rng = sht_slea.Range(Cells(2, 1), Cells(4, 4))End Sub

我個(gè)人建議(或者說(shuō)是我個(gè)人習(xí)慣)在引用Range對(duì)象時(shí),Worksheet對(duì)象不要省略

在單獨(dú)引用Cells對(duì)象時(shí),Worksheet對(duì)象也不要省略

具體哪里省略哪里不省略,就得看個(gè)人習(xí)慣和應(yīng)用場(chǎng)景了。并沒(méi)有什么固定的規(guī)律可循。


本系列教程其它文章

Excel VBA 入門(零)
Excel VBA入門(一)數(shù)據(jù)類型
Excel VBA入門(二)數(shù)組和字典
Excel VBA入門(三) 流程控制1-條件選擇
Excel VBA入門(四)流程控制2-循環(huán)控制
Excel VBA入門(五)Excel對(duì)象操作
Excel VBA入門(六)過(guò)程和函數(shù)
Excel VBA入門(七)注釋、宏按鈕及錯(cuò)誤處理
Excel VBA入門(八)單元格邊框
Excel VBA入門(九)操作工作薄

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
069.獲取循環(huán)參照單元格
利用工作表事件制作工作表目錄
Excel-VBA多部門多表格模糊查找并返回值
VBA編程問(wèn)答(第3輯)
VBA|多個(gè)工作表中的數(shù)據(jù)自動(dòng)合并到一個(gè)工作表
Excel259個(gè)常用宏
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服