vba-Range對象解析課件_第1頁
vba-Range對象解析課件_第2頁
vba-Range對象解析課件_第3頁
vba-Range對象解析課件_第4頁
vba-Range對象解析課件_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

Excel編程與VBA第九講Range對象Excel編程與VBA第九講1Content在VBA代碼中,用得最多的單獨的對象可能就要算Range對象了。Range對象是Excel的對象世界中真正的工作對象。作為Excel用戶,將把大部分時間花在對Range對象的處理上。在本次課程中,將學習多種對Range對象進行處理的技術,重點包括:理解Range對象的作用使用With語句使用ForEach語句分析幾個使用Range對象的過程Content在VBA代碼中,用得最多的單獨的對象可能Range對象是什么?作為Excel用戶,基本上是和工作表上的單元格打交道。而在VBA中,則稱為和Range對象打交道。對于一個程序員來說,在所有的Excel對象中,對Range對象的處理是最頻繁的。正因為如此,在本課程中,將學習有關Range對象的各種知識。一個Range對象可以是:一個單獨的單元格。對單元格的選擇。多個選擇。一行或者一列。一個3D區(qū)域。Range對象是什么?作為Excel用戶,基本上是和一、Range對象的屬性和學習其他對象一樣,首先需要學習Range對象的一些屬性和方法。Range對象最有用的一些屬性如下:Address屬性返回Range的當前位置。Count屬性用于決定Range中單元格的數(shù)目。Formula屬性返回用于計算顯示值的公式。

Offset屬性對于從一個Range移動到另一個Range非常有用。?含義,下面有Resize通過它可設置當前選中的Range的大小。Value返回Range的數(shù)值。在上面的清單中列出的屬性只是Range對象屬性很小的一部分,實際上,Range對象的屬性多達幾十個。在下面的例題中,將熟悉Range對象的一些屬性。在開始前,關閉所有的工作簿,并打開一個新的工作簿。接著從創(chuàng)建一個新的工作表開始:一、Range對象的屬性和學習其他對象一樣,首先需要一、Range對象的屬性(Cont)1)在單元格B1中輸入“100”,在單元格B2中輸入“200”,在單元格B3中輸入“300”。2)選中單元格B4,并輸入“=SUM(B1:B3)”。3)按下Alt+F11鍵打開VisualBasic編輯器,在當前工作簿中插入一個新的模塊。4)創(chuàng)建一個名為“RangeProperties”的過程。5)為該過程輸入如下代碼:ThisWorkbook.Worksheets("Sheet1").Range("A1").Activate

ActiveCell.Offset(2,2).ActivateMsgBox"Thecurrentactivecellis"&ActiveCell.AddressMsgBox"ThevalueofB4is"&Range("B4").ValueMsgBox"TheformulaofB4is"&Range("B4").Formula6)回到工作簿的Sheet1,運行RangeProperties過程。顯示的第一個消息框告訴你激活的單元格為C3。7)單擊“確定”按鈕,下一個消息框顯示單元格B4的數(shù)值。一、Range對象的屬性(Cont)1)在單元格B1一、Range對象的屬性(Cont)8)單擊“確定”按鈕,最后一個消息框顯示單元格B4的計算公式。9)單擊“確定”按鈕,退出消息框。熟悉上面例子中顯示信息的細微區(qū)別了嗎?為了確保對本例中代碼的理解,請花一點時間復習一下。1:SubRangeProperties()2:ThisWorkbook.Worksheets("Sheet1").Range("A1").Activate3:ActiveCell.Offset(2,2).Activate4:MsgBox"Thecurrentactivecellis"&ActiveCell.Address5:6:MsgBox"ThevalueofB4is"&Range("B4").Value7:MsgBox"TheformulaofB4is"&Range("B4").Formula8:EndSub在本過程中,做的第一件事是激活單元格A1:ThisWorkbook.Worksheets("Sheet1").Range("A1").Activate一、Range對象的屬性(Cont)8)單擊“確定”按鈕,一、Range對象的屬性(Cont)激活單元格A1之后,用Offset方法移動到單元格C3,并且在消息框中顯示新激活的單元格的地址:ActiveCell.Offset(2,2).ActivateMsgBox"Thecurrentactivecellis"&ActiveCell.Address通過Offset屬性,可以移動到另一個Range位置,這個屬性的語法如下:

Rangename.Offset(RowOffset,ColumnOffset)可選參數(shù)RowOffset和ColumnOffset控制移動的方向。在本過程中,將這兩個參數(shù)均設置為2,這就將Range移動到了C3。接下來是顯示單元格B4的數(shù)值和計算公式:MsgBox"ThevalueofB4is"&Range("B4").ValueMsgBox"TheformulaofB4is"&Range("B4").Formula這兩行代碼很好地說明了Range對象的Value屬性和Formula屬性的區(qū)別。Value屬性返回顯示在單元格中的數(shù)值,而Formula屬性則返回單元格中實際輸入的公式。一、Range對象的屬性(Cont)激活單元格A1之二、Range對象的方法Range對象同樣具有多種多樣的方法,包括:Activate激活一個Range。Clear清除一個Range的內容。Copy將一個Range的內容復制到剪貼板。Cut將一個Range的內容剪切到剪貼板。PasteSpecial將剪貼板的內容粘貼到Range中。Select選擇一個Range。二、Range對象的方法Range對象同樣具有多種多樣的方法粘貼方法Range("F3").PasteSpecialActiveSheet.Paste他們的不同?粘貼方法三、使用With語句現(xiàn)在,你對Excel中最常用的對象已經(jīng)比較熟悉了。接下來,將學習一個結構,通過這個結構可以使對對象的處理更為容易。當對Range對象進行處理時,一個最普通的任務是設置各種各樣的屬性。下面程序顯示了用于對Range對象執(zhí)行各種格式設置的代碼的例子。1:Range("A1:A6").NumberFormat="#,##0.00"2:Range("A1:A6").Font.Name="CourierNew"3:Range("A1:A6").Font.FontStyle="Regular"4:Range("A1:A6").Font.Size=115:Range("A1:A6").Font.Strikethrough=False6:Range("A1:A6").Font.Superscript=False7:Range("A1:A6").Font.Subscript=False8:Range("A1:A6").Font.OutlineFont=False9:Range("A1:A6").Font.Shadow=False10:Range("A1:A6").Font.Underline=xlUnderlineStyleNone11:Range("A1:A6").Font.ColorIndex=xlAutomatic如果需要輸入上述代碼,就會對重復地輸入Range(“A1:A6”)感到厭煩??梢杂脤ο笞兞縼硪肦ange("A1:A6"),但是仍然需要重復地輸入對象變量的名字。三、使用With語句現(xiàn)在,你對Excel中最常用的三、使用With語句(Cont)VBA提供了一種避免這樣的方式—With語句。With語句用于設置同一對象的多個屬性,或者執(zhí)行同一對象的多個方法。下面程序顯示了使用With語句完成同樣功能的代碼。1:WithRange("A1:A6")2:.NumberFormat="#,##0.00"3:With.Font4:.Name="CourierNew"5:.FontStyle="Regular"6:.Size=117:.Strikethrough=False8:.Superscript=False9:.Subscript=False10:.OutlineFont=False11:.Shadow=False12:.Underline=xlUnderlineStyleNone13:.ColorIndex=xlAutomatic14:EndWith15:EndWith三、使用With語句(Cont)VBA提供了一種避免三、使用With語句(Cont)雖然程序清單中的With語句并沒有減少代碼的行數(shù),但是減少了輸入量。With語句的語法如下:Withobject[statements]EndWith語法中的object是statements部分中的屬性和方法的操作對象。從上述代碼中可以看出,statements中的每一行都以符號“.”開始。同樣需要注意的是,可以將With語句嵌套使用。針對Font對象的With語句嵌套在針對Range對象的With語句中。下面程序代碼舉例說明了如何在同一個With語句中使用屬性和方法。1:SubWith_Worksheet()2:WithThisWorkbook3:.SaveAs"WithExample"4:MsgBox"SaveStatus:"&.Saved5:EndWith6:EndSub三、使用With語句(Cont)雖然程序清單中的W四、使用ForEach語句With語句是用來執(zhí)行同一個對象的多個語句,而ForEach語句則是用來對多個對象執(zhí)行同一條語句。通過ForEach語句,可以對集合中的每個元素重復執(zhí)行同樣的語句。ForEach語句也可用于數(shù)組。ForEach語句的語法如下:

ForEachelementIngroup[Statements][ExitFor][Statements]Next注意,該語法支持ExitFor從句。和其他Exit從句一樣,ExitFor從句通常位于一條If語句中。如果需要改變Range中每個單元格的數(shù)值,可以使用以下的代碼。四、使用ForEach語句With語句是用來執(zhí)行同四、使用ForEach語句(Cont)1:SubForExample()2:DimxAsRange3:4:ForEachxInThisWorkbook.Worksheets("Sheet1").Range("A1:A6")5:x.Value=x.Value+106:Next7:EndSub四、使用ForEach語句(Cont)1:SubFor五、Range對象編程示例(一)在本部分中,將看到多個使用Range對象的代碼示例。這些代碼示例是程序員最常用的。本例是改變一個Range中每行的格式設置。對于一張很長的工作表,為了使它易于查看和打印,常常需要這樣做。注意第一行是標題。需要將從第三行開始的內容隔行加粗。程序如下。1:SubBoldEveryOther()2:DimiCounterAsInteger3:ForiCounter=3ToThisWorkbook.Worksheets("Sheet1")._Range("A1:C25").Rows.CountStep24:ThisWorkbook.Worksheets("Sheet1").Range("A1:C25")._Rows(iCounter).Font.Bold=True5:Next6:EndSub本過程中主要的關鍵在于ForNext語句。注意iCounter設置的初始值為3,即從第三行開始隔行加粗。Step的值為2決定了是隔行加粗。如果知道需要處理的Range對象的地址,那么本例中的代碼非常適用。五、Range對象編程示例(一)在本部分中,將看到多五、Range對象編程示例(二)但是如果不知道Range對象的大小時,又應該怎么辦呢?有關這方面的一個經(jīng)典的例子是,當從其他應用程序(例如數(shù)據(jù)庫)向工作表中導入數(shù)據(jù)時的情況,也許并不知道會返回多少行數(shù)據(jù)。下面代碼顯示了選中一個不知道大小的Range的例子。1:SubSelectRange()2:ThisWorkbook.Worksheets("Sheet1").Range("A1").Activate3:ActiveCell.CurrentRegion.Select4:MsgBox"Theaddressoftheselectedrange"&Selection.Address5:EndSubSelectRange的關鍵之處在于CurrentRegion屬性的使用,本屬性返回第一個空行和空列所包圍的區(qū)域。通過選中CurrentRegion,用不著知道Range的大小。 currentregion選出的是連續(xù)的區(qū)域,不連續(xù)則僅一部分五、Range對象編程示例(二)但是如果不知道Ran五、Range對象編程示例(三)最后一個過程將執(zhí)行復制/粘貼操作。在下面的代碼中,對選中的區(qū)域進行復制,并且將復制的內容粘貼到工作表的另一位置。1:SubCopyAndPaste()2:Selection.Copy3:Range("F3").Select4:ActiveSheet.Paste5:Application.CutCopyMode=False6:EndSub語句Selection.Copy將選中的區(qū)域放到剪貼板上。下一步是移動到粘貼所復制的內容的理想位置。接著用Paste方法將所復制的區(qū)域從剪貼板復制到新的位置上。最后,將Application對象的CutCopyMode屬性設置為False。如果不這樣做,源文本周圍的選取框(移動的虛線)將一直保持,并且狀態(tài)欄上將一直顯示移動目標的指令。五、Range對象編程示例(三)最后一個過程將執(zhí)行六、問題解答問題:為什么沒有Range集合?解答:集合的一個必要條件是可以添加元素。工作表上的單元格(也就是Range)的數(shù)目是由Microsoft預先定義的,沒有辦法向工作表添加更多的單元格,正因為如此,沒有Range集合。問題:For語句和ForEach語句有什么不同?解答:首先,討論一下這兩條語句的共同點:它們都是多次執(zhí)行相同的語句。而問題在于,它們有什么不同?對于For語句而言,語句執(zhí)行的次數(shù)是由一個起始數(shù)字和一個結束數(shù)字所控制,而ForEach語句中語句執(zhí)行的次數(shù)是由所操作的對象的數(shù)目或者數(shù)組的元素的數(shù)目所控制。六、問題解答問題:為什么沒有Range集合?Excel編程與VBA第九講Range對象Excel編程與VBA第九講19Content在VBA代碼中,用得最多的單獨的對象可能就要算Range對象了。Range對象是Excel的對象世界中真正的工作對象。作為Excel用戶,將把大部分時間花在對Range對象的處理上。在本次課程中,將學習多種對Range對象進行處理的技術,重點包括:理解Range對象的作用使用With語句使用ForEach語句分析幾個使用Range對象的過程Content在VBA代碼中,用得最多的單獨的對象可能Range對象是什么?作為Excel用戶,基本上是和工作表上的單元格打交道。而在VBA中,則稱為和Range對象打交道。對于一個程序員來說,在所有的Excel對象中,對Range對象的處理是最頻繁的。正因為如此,在本課程中,將學習有關Range對象的各種知識。一個Range對象可以是:一個單獨的單元格。對單元格的選擇。多個選擇。一行或者一列。一個3D區(qū)域。Range對象是什么?作為Excel用戶,基本上是和一、Range對象的屬性和學習其他對象一樣,首先需要學習Range對象的一些屬性和方法。Range對象最有用的一些屬性如下:Address屬性返回Range的當前位置。Count屬性用于決定Range中單元格的數(shù)目。Formula屬性返回用于計算顯示值的公式。

Offset屬性對于從一個Range移動到另一個Range非常有用。?含義,下面有Resize通過它可設置當前選中的Range的大小。Value返回Range的數(shù)值。在上面的清單中列出的屬性只是Range對象屬性很小的一部分,實際上,Range對象的屬性多達幾十個。在下面的例題中,將熟悉Range對象的一些屬性。在開始前,關閉所有的工作簿,并打開一個新的工作簿。接著從創(chuàng)建一個新的工作表開始:一、Range對象的屬性和學習其他對象一樣,首先需要一、Range對象的屬性(Cont)1)在單元格B1中輸入“100”,在單元格B2中輸入“200”,在單元格B3中輸入“300”。2)選中單元格B4,并輸入“=SUM(B1:B3)”。3)按下Alt+F11鍵打開VisualBasic編輯器,在當前工作簿中插入一個新的模塊。4)創(chuàng)建一個名為“RangeProperties”的過程。5)為該過程輸入如下代碼:ThisWorkbook.Worksheets("Sheet1").Range("A1").Activate

ActiveCell.Offset(2,2).ActivateMsgBox"Thecurrentactivecellis"&ActiveCell.AddressMsgBox"ThevalueofB4is"&Range("B4").ValueMsgBox"TheformulaofB4is"&Range("B4").Formula6)回到工作簿的Sheet1,運行RangeProperties過程。顯示的第一個消息框告訴你激活的單元格為C3。7)單擊“確定”按鈕,下一個消息框顯示單元格B4的數(shù)值。一、Range對象的屬性(Cont)1)在單元格B1一、Range對象的屬性(Cont)8)單擊“確定”按鈕,最后一個消息框顯示單元格B4的計算公式。9)單擊“確定”按鈕,退出消息框。熟悉上面例子中顯示信息的細微區(qū)別了嗎?為了確保對本例中代碼的理解,請花一點時間復習一下。1:SubRangeProperties()2:ThisWorkbook.Worksheets("Sheet1").Range("A1").Activate3:ActiveCell.Offset(2,2).Activate4:MsgBox"Thecurrentactivecellis"&ActiveCell.Address5:6:MsgBox"ThevalueofB4is"&Range("B4").Value7:MsgBox"TheformulaofB4is"&Range("B4").Formula8:EndSub在本過程中,做的第一件事是激活單元格A1:ThisWorkbook.Worksheets("Sheet1").Range("A1").Activate一、Range對象的屬性(Cont)8)單擊“確定”按鈕,一、Range對象的屬性(Cont)激活單元格A1之后,用Offset方法移動到單元格C3,并且在消息框中顯示新激活的單元格的地址:ActiveCell.Offset(2,2).ActivateMsgBox"Thecurrentactivecellis"&ActiveCell.Address通過Offset屬性,可以移動到另一個Range位置,這個屬性的語法如下:

Rangename.Offset(RowOffset,ColumnOffset)可選參數(shù)RowOffset和ColumnOffset控制移動的方向。在本過程中,將這兩個參數(shù)均設置為2,這就將Range移動到了C3。接下來是顯示單元格B4的數(shù)值和計算公式:MsgBox"ThevalueofB4is"&Range("B4").ValueMsgBox"TheformulaofB4is"&Range("B4").Formula這兩行代碼很好地說明了Range對象的Value屬性和Formula屬性的區(qū)別。Value屬性返回顯示在單元格中的數(shù)值,而Formula屬性則返回單元格中實際輸入的公式。一、Range對象的屬性(Cont)激活單元格A1之二、Range對象的方法Range對象同樣具有多種多樣的方法,包括:Activate激活一個Range。Clear清除一個Range的內容。Copy將一個Range的內容復制到剪貼板。Cut將一個Range的內容剪切到剪貼板。PasteSpecial將剪貼板的內容粘貼到Range中。Select選擇一個Range。二、Range對象的方法Range對象同樣具有多種多樣的方法粘貼方法Range("F3").PasteSpecialActiveSheet.Paste他們的不同?粘貼方法三、使用With語句現(xiàn)在,你對Excel中最常用的對象已經(jīng)比較熟悉了。接下來,將學習一個結構,通過這個結構可以使對對象的處理更為容易。當對Range對象進行處理時,一個最普通的任務是設置各種各樣的屬性。下面程序顯示了用于對Range對象執(zhí)行各種格式設置的代碼的例子。1:Range("A1:A6").NumberFormat="#,##0.00"2:Range("A1:A6").Font.Name="CourierNew"3:Range("A1:A6").Font.FontStyle="Regular"4:Range("A1:A6").Font.Size=115:Range("A1:A6").Font.Strikethrough=False6:Range("A1:A6").Font.Superscript=False7:Range("A1:A6").Font.Subscript=False8:Range("A1:A6").Font.OutlineFont=False9:Range("A1:A6").Font.Shadow=False10:Range("A1:A6").Font.Underline=xlUnderlineStyleNone11:Range("A1:A6").Font.ColorIndex=xlAutomatic如果需要輸入上述代碼,就會對重復地輸入Range(“A1:A6”)感到厭煩。可以用對象變量來引用Range("A1:A6"),但是仍然需要重復地輸入對象變量的名字。三、使用With語句現(xiàn)在,你對Excel中最常用的三、使用With語句(Cont)VBA提供了一種避免這樣的方式—With語句。With語句用于設置同一對象的多個屬性,或者執(zhí)行同一對象的多個方法。下面程序顯示了使用With語句完成同樣功能的代碼。1:WithRange("A1:A6")2:.NumberFormat="#,##0.00"3:With.Font4:.Name="CourierNew"5:.FontStyle="Regular"6:.Size=117:.Strikethrough=False8:.Superscript=False9:.Subscript=False10:.OutlineFont=False11:.Shadow=False12:.Underline=xlUnderlineStyleNone13:.ColorIndex=xlAutomatic14:EndWith15:EndWith三、使用With語句(Cont)VBA提供了一種避免三、使用With語句(Cont)雖然程序清單中的With語句并沒有減少代碼的行數(shù),但是減少了輸入量。With語句的語法如下:Withobject[statements]EndWith語法中的object是statements部分中的屬性和方法的操作對象。從上述代碼中可以看出,statements中的每一行都以符號“.”開始。同樣需要注意的是,可以將With語句嵌套使用。針對Font對象的With語句嵌套在針對Range對象的With語句中。下面程序代碼舉例說明了如何在同一個With語句中使用屬性和方法。1:SubWith_Worksheet()2:WithThisWorkbook3:.SaveAs"WithExample"4:MsgBox"SaveStatus:"&.Saved5:EndWith6:EndSub三、使用With語句(Cont)雖然程序清單中的W四、使用ForEach語句With語句是用來執(zhí)行同一個對象的多個語句,而ForEach語句則是用來對多個對象執(zhí)行同一條語句。通過ForEach語句,可以對集合中的每個元素重復執(zhí)行同樣的語句。ForEach語句也可用于數(shù)組。ForEach語句的語法如下:

ForEachelementIngroup[Statements][ExitFor][Statements]Next注意,該語法支持ExitFor從句。和其他Exit從句一樣,ExitFor從句通常位于一條If語句中。如果需要改變Range中每個單元格的數(shù)值,可以使用以下的代碼。四、使用ForEach語句With語句是用來執(zhí)行同四、使用ForEach語句(Cont)1:SubForExample()2:DimxAsRange3:4:ForEachxInThisWorkbook.Worksheets("Sheet1").Range("A1:A6")5:x.Value=x.Value+106:Next7:EndSub四、使用ForEach語句(Cont)1:SubFor五、Range對象編程示例(一)在本部分中,將看到多個使用Range對象的代碼示例。這些代碼示例是程序員最常用的。本例是改變一個Range中每行的格式設置。對于一張很長的工作表,為了使它易于查看和打印,常常需要這樣做。注意第一行是標題。需要將從第三行開始的內容隔行加粗。程序如下。1:SubBoldEveryOther()2:DimiCounterAsInteger3:ForiCounter=3ToThisWorkbook.Worksheets("Sheet1")._Range("A1:C25").Rows.CountStep24:ThisWorkbook.Worksheets("Sheet1").Range("A1:C25")._Rows(iCounter).Font.Bold=True5:Next6:E

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論