問題一:在VBA代碼中,如何引用當前工作表中的單個單元格(例如引用單元格C3)?
          回答:
          可以使用下面列舉的任一方式對當前工作表中的單元格(C3)進行引用。
          (1) Range("C3")
          (2) [C3]
          (3) Cells(3, 3)
          (4) Cells(3, "C")
          (5) Range("C4").Offset(-1)
          Range("D3").Offset(, -1)
          Range("A1").Offset(2, 2)
          (6) 若C3為當前單元格,則可使用:ActiveCell
          (7) 若將C3單元格命名為“Range1”,則可使用:Range("Range1")或[Range1]
          (8) Cells(4, 3).Offset(-1)
          (9) Range("A1").Range("C3")

          問題二:在VBA代碼中,我要引用當前工作表中的B2:D6單元格區(qū)域,有哪些方式?
          回答:
          可以使用下面列舉的任一方式對當前工作表中單元格區(qū)域B2:D6進行引用。
          (1) Range(“B2:D6”)
          (2) Range("B2", "D6")
          (3) [B2:D6]
          (4) Range(Range("B2"), Range("D6"))
          (5) Range(Cells(2, 2), Cells(6, 4))
          (6) 若將B2:D6區(qū)域命名為“MyRange”,則又可以使用下面的語句引用該區(qū)域:
          ① Range("MyRange")
          ② [MyRange]
          (7) Range("B2").Resize(5, 3)
          (8) Range("A1:C5").Offset(1, 1)
          (9) 若單元格B2為當前單元格,則可使用語句:Range(ActiveCell, ActiveCell.Offset(4, 2))
          (10) 若單元格D6為當前單元格,則可使用語句:Range("B2", ActiveCell)

          問題三:在VBA代碼中,如何使用變量實現(xiàn)對當前工作表中不確定單元格區(qū)域的引用?
          回答:
          有時,我們需要在代碼中依次獲取工作表中特定區(qū)域內的單元格,這通常可以采取下面的幾種方式:
          (1) Range(“A” & i)
          (2) Range(“A” & i & “:C” & i)
          (3) Cells(i,1)
          (4) Cells(i,j)
          其中,i、j為變量,在循環(huán)語句中指定i和j的范圍后,依次獲取相應單元格。

          問題四:在VBA代碼中,如何擴展引用當前工作表中的單元格區(qū)域?
          回答:
          可以使用Resize屬性,例如:
          (1) ActiveCell.Resize(4, 4),表示自當前單元格開始創(chuàng)建一個4行4列的區(qū)域。
          (2) Range("B2").Resize(2, 2),表示創(chuàng)建B2:C3單元格區(qū)域。
          (3) Range("B2").Resize(2),表示創(chuàng)建B2:B3單元格區(qū)域。
          (4) Range("B2").Resize(, 2),表示創(chuàng)建B2:C2單元格區(qū)域。
          如果是在一個單元格區(qū)域(如B3:E6),或一個命名區(qū)域中(如將單元格區(qū)域B3:E6命名為“MyRange”)使用Resize屬性,則只是相對于單元格區(qū)域左上角單元格擴展區(qū)域,例如:
          代碼Range("C3:E6").Resize(, 2),表示單元格區(qū)域C3:D6,并且擴展的單元格區(qū)域可不在原單元格區(qū)域內。
          因此,可以知道Resize屬性是相對于當前活動單元格或某單元格區(qū)域中左上角單元格按指定的行數(shù)或列數(shù)擴展單元格區(qū)域。

          問題五:在VBA代碼中,如何在當前工作表中基于當前單元格區(qū)域或指定單元格區(qū)域處理其它單元格區(qū)域?
          回答:
          可以使用Offset屬性,例如:
          (1) Range("A1").Offset(2, 2),表示單元格C3。
          (2) ActiveCell.Offset(, 1),表示當前單元格下一列的單元格。
          (3) ActiveCell.Offset(1),表示當前單元格下一行的單元格。
          (4) Range("C3:D5").Offset(, 1),表示單元格區(qū)域D3:E5,即將整個區(qū)域偏移一列。
          從上面的代碼示例可知,Offset屬性從所指定的單元格開始按指定的行數(shù)和列數(shù)偏移,從而到達目的單元格,但偏移的行數(shù)和列數(shù)不包括指定單元格本身。

          問題六:在VBA代碼中,如何在當前工作表中引用交叉區(qū)域?
          回答:
          可以使用Intersect方法,例如:
          Intersect(Range("C3:E6"), Range("D5:F8")),表示單元格區(qū)域D5:E6,即單元格區(qū)域C3:E6與D5:F8相重迭的區(qū)域。

          問題七:在VBA代碼中,如何在當前工作表中引用多個區(qū)域?
          回答:
          (1) 可以使用Union方法,例如:
          Union(Range("C3:D4"), Range("E5:F6")),表示單元格區(qū)域C3:D4和E5:F6所組成的區(qū)域。
          Union方法可以將多個非連續(xù)區(qū)域連接起來成為一個區(qū)域,從而可以實現(xiàn)對多個非連續(xù)區(qū)域一起進行操作。
          (2) 也可以使用下面的代碼:
          Range("C3:D4, E5:F6")或[C3:D4, E5:F6]
          注意:Range("C3:D4", "F5:G6"),表示單元格區(qū)域C3:G6,即將兩個區(qū)域以第一個區(qū)域左上角單元格為起點,以第二個區(qū)域右下角單元格為終點連接成一個新區(qū)域。
          同時,在引用區(qū)域后使用Rows屬性和Columns屬性時,注意下面代碼的區(qū)別:
          ①Range("C3:D4", "F8:G10").Rows.Count,返回的值為8;
          ②Range("C3:D4,F8:G10").Rows.Count,返回的值為2,即只計算第一個單元格區(qū)域。

          問題八:在VBA代碼中,如何引用當前工作表中活動單元格或指定單元格所在的區(qū)域(當前區(qū)域)?
          回答:
          可以使用CurrentRegion屬性,例如:
          (1) ActiveCell.CurrentRegion,表示活動單元格所在的當前區(qū)域。
          (2) Range("D5").CurrentRegion,表示單元格D5所在的當前區(qū)域。
          當前區(qū)域是指周圍由空行或空列所圍成的區(qū)域。該屬性的詳細使用參見《CurrentRegion屬性示例》一文。
          [NextPage]
          問題九:在VBA代碼中,如何引用當前工作表中已使用的區(qū)域?
          回答:
          可以使用UsedRange屬性,例如:
          (1) Activesheet.UsedRange,表示當前工作表中已使用的區(qū)域。
          (2) Worksheets("sheet1").UsedRange,表示工作表sheet1中已使用的區(qū)域。
          與CurrentRegion屬性不同的是,該屬性代表工作表中已使用的單元格區(qū)域,包括顯示為空行,但已進行過格式的單元格區(qū)域。該屬性的詳細使用參見《解析UsedRange屬性》一文。

          問題十:如何在單元格區(qū)域內指定特定的單元格?
          回答:
          可以使用Item屬性,例如:
          (1) Range("A1:B10").Item(5,3)指定單元格C5,這個單元格處于以區(qū)域中左上角單元格A1(即區(qū)域中第1行第1列的單元格)為起點的第5行第3列。因為Item屬性為默認屬性,因此也可以簡寫為:Range("A1:B10")(5,3)。
          如果將A1:B10區(qū)域命名為”MyRange”,那么Range("MyRange")(5,3)也指定單元格C5。
          (2) Range("A1:B10")(12,13)指定單元格M12,即用這種方式引用單元格,該單元格不必一定要包含在區(qū)域內。
          同時,也不需要索引數(shù)值是正值,例如:
          ① Range("D4:F6")(0,0)代表單元格C3;
          ② Range("D4:F6")(-1,-2)代表單元格A2。
          而Range("D4:F6")(1,1)代表單元格D4。
          (3) 也可以在單元格區(qū)域中循環(huán),例如:
          Range("D4:F6")(2,2)(3,4)代表單元格H7,即該單元格位于作為左上角單元格E5的第3行第4列(因為E5是開始于區(qū)域中左上角單元格D4起的第2行第2列)。
          (4) 也能使用一個單個的索引數(shù)值進行引用。計數(shù)方式為從左向右,即在區(qū)域中的第一行開始從左向右計數(shù),第一行結束后,然后從第二行開始從左到右接著計數(shù),依次 類推。(注:從區(qū)域中第一行第一個單元格開始計數(shù),當?shù)谝恍薪Y束時,轉入第二行最左邊的單元格,這樣按一行一行從左向右依次計數(shù)。以單元格區(qū)域中第1個單 元格開始,按上述規(guī)則依次為第2個單元格、第3個單元格….等等),例如:
          Range("A1:B2")(1) 代表單元格A1;
          Range("A1:B2")(2) 代表單元格B1;
          Range("A1:B2")(3) 代表單元格A2;
          Range("A1:B2")(4) 代表單元格B2。
          這種方法可在工作表中連續(xù)向下引用單元格(即不一定是在單元格區(qū)域內,但在遵循相同的規(guī)律),例如:
          Range("A1:B2")(5)代表單元格A3;
          Range("A1:B2")(14)代表單元格B7,等等。
          也可以使用單個的負數(shù)索引值。
          這種使用單個索引值的方法對遍歷列是有用的,例如,Range("D4")(1)代表單元格D4,Range("D4")(2)代表單元格D5,Range ("D4")(11)代表單元格D14,等等。
          同理,稍作調整后也可遍歷行,例如:
          Range("D4").Columns(2)代表單元格E4,Range("D4").Columns(5)指定單元格H4,等等。
          (5)當與對象變量配合使用時,Item屬性能提供簡潔并有效的代碼,例如:
          Set rng = Worksheets(1).[a1]
          定義了對象變量后,像單元格方法一樣,Item屬性允許使用兩個索引數(shù)值引用工作表中的任一單元格,例如,rng(3,4)指定單元格D3。(By Chip Pearson)

          問題十一:在VBA代碼中,如何引用當前工作表中的整行或整列?
          回答:
          見下面的示例代碼:
          (1) Range("C:C").Select,表示選擇C列。
             Range("C:E").Select,表示選擇C列至E列。
          (2) Range("1:1").Select,表示選擇第一行。
             Range("1:3").Select,表示選擇第1行至第3行。
          (3) Range("C:C").EntireColumn,表示C列;
             Range("D1").EntireColumn,表示D列。
          同樣的方式,也可以選擇整行,然后可以使用如AutoFit方法對整列或整行進行調整。

          問題十二:在VBA代碼中,如何引用當前工作表中的所有單元格?
          回答:
          可以使用下面的代碼:
          (1) Cells,表示當前工作表中的所有單元格。
          (2) Range(Cells(1, 1), Cells(Cells.Rows.Count, Cells. Columns.Count)),其中Cells.Rows表示工作表所有行,Cells. Columns表示工作表所有列。

          問題十三:在VBA代碼中,如何引用工作表中的特定單元格區(qū)域?
          回答:
          在工作表中,您可能使用過“定位條件”對話框。可以通過選擇菜單“編輯——定位”,單擊“定位”對話框中的“定位條件”按鈕顯示該對話框。這個對話框可以允許用戶選擇特定的單元格。例如:
          (1) Worksheets("sheet1").Cells.SpecialCells(xlCellTypeAllFormatConditions),表示工作表sheet1中由帶有條件格式的單元格所組成的區(qū)域。
          (2) ActiveCell.CurrentRegion.SpecialCells(xlCellTypeBlanks),表示當前工作表中活動單元格所在區(qū)域中所有空白單元格所組成的區(qū)域。
          當然,還有很多常量和值的組合,可以讓您實現(xiàn)特定單元格的查找并引用。參見《探討在工作表中找到最后一行》一文。

          問題十四:在VBA代碼中,如何引用其它工作表或其它工作簿中的單元格區(qū)域?
          回答:
          要引用其它工作表或其它工作簿中的單元格區(qū)域,只需在單元格對象前加上相應的引用對象即可,例如:
          (1) Worksheets(“Sheet3”).Range(“C3:D5”),表示引用工作表sheet3中的單元格區(qū)域C3:D5。
          (2) Workbooks(“MyBook.xls”).Worksheets(“sheet1”).Range(“B2”),表示引用MyBook工作簿中工作表Sheet1上的單元格B2。

          問題十五:還有其它的一些情形嗎?
          回答:
          列舉如下:
          (1) Cells(15),表示單元格O1,即可在Cells屬性中指定單元格數(shù)字來選擇單元格,其計數(shù)順序為自左至右、從上到下,又如Cells(257),表示單元格B1。
          (2) Cells(, 256),表示單元格IV1,但是如果Cells(, 257),則會返回錯誤。

          結語
          我們用VBA對Excel進行處理,一般是對其工作表中的數(shù)據(jù)進行處理,因此,引用單元格區(qū)域是ExcelVBA編程中最基本的操作之一,只有確定了所處理的單元格區(qū)域,才能使用相應的屬性和方法進行下一步的操作。
          上面列舉了一些引用單元格區(qū)域的情形和方式,可以看出,引用單元格區(qū)域有很多方式,有一些可能不常用,可以根據(jù)工作表的所處的環(huán)境和個人編程習慣進行選擇使用。
          當然,在編寫程序時,也可能會將上面的一些屬性聯(lián)合使用,以達到選取特定操作對象的目的,例如Offset屬性、Resize屬性、CurrentRegion屬性、UsedRange屬性等的組合。
          posted on 2010-10-12 15:43 Ying-er 閱讀(207) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 丰城市| 阳城县| 稻城县| 湘潭市| 黑山县| 宁都县| 辰溪县| 桂阳县| 长治市| 马龙县| 平和县| 新闻| 博白县| 宝应县| 循化| 潼南县| 淄博市| 临洮县| 驻马店市| 内丘县| 吴川市| 乐亭县| 都昌县| 南澳县| 河东区| 宝山区| 南京市| 凤台县| 高密市| 安陆市| 楚雄市| 岳池县| 德保县| 嘉禾县| 白玉县| 陆河县| 丹阳市| 张掖市| 枝江市| 五常市| 绿春县|