?EXCEL是由很多的對象組成,每個對象都有他的屬性和方法,所謂的對象可以理解為所有存在的東西,在同一個程序里的對象之間是存在關系的,比如說上下級關系或同級關系,上下級關系之間用英文句點“.”連接。
例如:
application.workbooks(1).worksheets(1).range(“A1”)
意思就是當前應用程序(excel)下面的已經(jīng)打開的第一個工作薄下面的第一個工作表里面的A1單元格,但一般情況下我們不需要這么麻煩,如果我們只對當前的表格操作,前面的都可以省略,只需要寫range(“A1”)就可以了,如果我們在工作表1中要對同一個工作薄里的工作表2進行操作就要指明工作表,但不需要指定工作薄名,不指定工作薄默認是在同一個工作薄,不指定工作表,默認在同一個工作表,如果我們在第一個工作薄要去操作第二個工作薄就要指定第二個工作薄。除了可以使用數(shù)字去指定第幾個工作薄或第幾個工作表,我們還可以直接指定其名稱,這樣可以更直接知道是對哪個工作薄或工作表進行操作,前提是要知道它的名稱。比如:
workbooks(“2019年銷售記錄”).worksheets(“一月份銷售記錄”).range(“A1”)
代表一個名為“2019年銷售記錄”的工作薄里面的一個名為'一月份銷售記錄'的工作表的A1單元格
每個對象都有它的屬性和方法,對象和屬性或方法之間也是用英文的句點“.”連接,比如說一個單元格,寬度多少,高度多少,對齊方式是什么,有沒邊框,邊框是單實線、雙實線、還是虛線,有沒背景色,什么背景色等,這些都是單元格的屬性。我們可以對這些屬性進行設置。
例如:
rows(1).rowheight=20 指定當前工作表第一行的行高為20磅,所以這個連接的英文句點“.”可以理解為:什么“的”什么。
對于剛剛開始學習VBA的朋友,建議在VBA代碼編輯器的立即窗口中進行練習,進入立即窗口的方法在EXCEL中同時按ALT+F11,打開代碼編輯器,如果在打開的編輯器里沒看到立即窗口可以按Ctrl+G或點擊菜單欄的“視圖”》“立即窗口”,就可以打開立即窗口,建議把代碼編輯器窗口調節(jié)成下圖一樣,方法及時看到運行結果。
輸入代碼并回車會在對應區(qū)域中顯示結果
如果當前的活動工作表是打開的第一個工作薄里的第一個工作表,那么下面這幾行代碼效果是完全一樣的。
Cells(1,1).value
Range(“A1”).value
sheets(1).cells(1,1).value=1
worksheets(1).cells(1,1).value=1
workbooks(1).worksheets(1).cells(1,1).value=1
application.workbooks(1).worksheets(1).cells(1,1).value=1
其中worksheets可以簡寫成sheets
如上面的sheets(1).cells(1,1).value=1和worksheets(1).cells(1,1).value=1是完全一樣的
工作表格是EXCEL的基礎,那么VBA的基礎就是怎么使用VBA對表格進行操作,知道了怎么使用VBA操作當前工作表,以后再要操作其它的工作表或工作薄就容易了。以下是本人對一些基本操作的總結。都是以當前活動工作表為例。
在指定的區(qū)域上進行寫入,刪除,復制,粘貼,寫入公式,填充公式等等,這些都是最基本的操作。這樣看來要在表格上干什么都要先指定一個區(qū)域,整個表格是表格中最大的一個區(qū)域,單元格就是表格中最小的區(qū)域,區(qū)域可以用range(“區(qū)域對象”)來表示。
比如:
Range(“A1”).Select 選擇A1單元格
Range(“A1:F10”).Select選擇A1到F10區(qū)域
Range(Cells(1, 1), Cells(3, 3)).select 選擇A1:C3區(qū)域
Range(“A:A”).Select選擇A列
Range(“A:F”).Select選擇A-F列
RANGE(“A1:D5,F2:G2,H:H”).Select同時選擇A1:D5,F2:G2,H列三個指定區(qū)域
Range(“1:1”).Select 選擇第一行
Range(“1:1,8:8,12:12”).Select同時選擇第1,第8,第12行
Range可以用英文中括號[]代替,可以是下面的格式
Range(“A1”) 可以簡寫成 [A1]
Range(“A2:B2”) 可以簡寫成 [A2:B2]
但是:
Range(“1:1,8:8,12:12”) 不能簡寫成 [“1:1,8:8,12:12”]
Range(Cells(1, 1), Cells(3, 3)) 不能簡寫成 [Cells(1, 1), Cells(3, 3)]
一個工作表由很多的單元格組成,所有的單元格集合在一起用cells表示,所以cells也代表就代所有的單元格,如果要指定某一個單元格只需要在cells后面指定行和列就可以,如:cells(1,1),就代表第一行第一列交叉的單元格A1,后面不指定單元格就代表所有單元格,如cells.select就是選擇當前工作表的所有單元格,工作表除了是由單元格組成,同時也是由行或列組成,因此選擇單元格或行或列還有都可以有多種,一行或一列也是一個區(qū)域,所以也是可以使用range指定的。
比如下面幾種單元格的選擇方法
cells(10).select 選擇整個表格里的第10個單元格,順序是從左到右,再從上到下,這個用法用到的機會并不多
Cells(1, 1).Select 選擇第一行第一列交叉的單元格,就是A1
Cells使用方法和range使用方法是不一樣的,range(“A1”)是以列號字母加行號代表,列號在前行號在后,要以英文雙引號''括起來,意味是字符串的形式,cells(1,1),以索引號行號加列號,行號在前列號在后,中間用英文逗號隔開,不用加英文雙引號,意味著里面的數(shù)字就是數(shù)值。
其實cells還有一個用法,cells(1,“A”).select也是選擇A1,這個就有點混血兒的感覺了。前面是行號,數(shù)值1,后面是字符列號'A',在編寫程序的時候使用cells比使用range更靈活。可以方便使用變量替換.
cells是不能像range一樣直接指定區(qū)域的,但可以配合Resize屬性指定區(qū)域,Resize屬性是調整指定區(qū)域的大小。
比如:
Cells(1, 1).Resize(4, 4).Select 意思是第一行第一列交叉的單元格(就是A1)為左上角第一個單元格向右下調整成一個4*4的單元格區(qū)域。相當于range(“A1:D4”)
Rows是當前工作表所有行的集合,因此也可以使用rows來指定行
比如:
Rows(1).select 選擇第一行
Rows.select 選擇所有行,和Cells.Select 及 Columns.Select 是同樣的效果,相當于選擇表格上所有單元格。
columns是當前工作表所有列的集合
Columns(1).select 選擇第一列
Columns.Select 選擇所有列
上面說到了怎么選擇單元格,行,列,區(qū)域,都是直接指定的,有明確目標的,但我們學習VBA就是要實現(xiàn)智能化,自動化,這樣的我們就要用到變量來代替,那么怎么用變量來選擇區(qū)域呢?
上面的例子有提到,使用range(“A1”)這樣的方法來選擇是要加英文雙引號的,代表是字符串類型,使用cells(1,1)這樣的方法來選擇的時候是不加雙引號的,代表是數(shù)值類型。而變量可以代表任意類型,當然也可以手動指定變量是什么類型。如果不指定,那么變量是一個可變的類型,會根據(jù)情況自適應類型。不指定類型使用起來好像方便,但可能會存在一些情況。
一是占用的存儲占用空間大,二是運行速度會慢一些,畢竟它每次運行的時候還要判斷一下自己應該是哪個類型。三是在給變量賦值的時候它不會檢查是否符合類型要求,可能會存在一些未知的錯誤或沖突,查找起錯誤的原因會比較困難。比如有兩個文本型的數(shù)字變量a=“2”,b=“3”,那么可以在立即窗口中分別使用msgbox a + b,msgbox a - b,msgbox a * b,msgbox a / b,看一下結果分別是什么,你會發(fā)現(xiàn),兩個變量相減,相乘,相除都是和數(shù)值計算一樣,但相加就不一樣的,a+b結果是23,而不是5,因為+號在VBA中可以用于連接兩個字符串。如果你不指定變量的類型,一開始給這個本應該是數(shù)值型的變量賦值了一個字符型的數(shù)值,在運行的過程中系統(tǒng)不會提示任何錯誤,這樣在發(fā)生錯誤的時候你可以不知道,或發(fā)現(xiàn)錯誤,但查找起來要花費很多時間。
回到正題,和變量配合使用,要使用符號&進行連接,變量無論是什么類型都是不需要再雙引號的。
使用變量選擇Range的方法示例:
X = 2
y = 3
Cells(X, y).Select 選擇第2行第3列交叉的單元格
Range(“a” & X).Select 選擇A2單元格
Range(“a” & X & “:c5”).Select 選擇A2:C5區(qū)域
Range(“a1:” & “c” & y).Select 選擇A1:C3區(qū)域
Range(“a” & X & “:” & “b” & y).Select 選擇A2:B3選擇
下面介紹一下幾個Range對象最常用的屬性和方法:
Range.value屬性,返回返設置range對象的內容
如:
a=Range(“A1”).value 返回單元格A1的值給變量a
Range(“A1”).value=“姓名” 把A1單元格內容設置為 “姓名”,注意,設置的內容為字符串時需要用英文雙引號括起來,數(shù)值或變量等其它類型是不用雙引號的。
要把內容設置為公式,要在公式前加一個=號,如下所示,在E2單元格加入求和公式,里面使用了變量來指定求和區(qū)域
Range(“E2”).value = “=sum(A” & t & “??” & t & “)”
range.row屬性,返回對象的行號,如果是一個區(qū)域返回左上角第一個單元格的行號
如:a=Range(“D10”).row 返回單元格D10所在的行號10給變量a
range.column屬性,返回對象的列號,如果是一個區(qū)域返回左上角第一個單元格的列號
如:b=Range(“B2:F5”).column 返回指定區(qū)域左上角第一個單元格b2所在的列號給變量b,注意這里返回的是數(shù)值列號不是字母列號,B就是第2列,所以返回的是2
Range.Select 方法 選擇對象
range(“A1”).select 選擇A1單元格
Range.Clear 方法 清除對象,可使用具體參數(shù)指定只清除內容或公式或格式等
Range(“A1:G37”).Clear 清除A1:G37 單元格區(qū)域的內容、公式和格式設置等。
Range.Copy 方法將單元格區(qū)域復制到指定的區(qū)域或剪貼板中。如果沒指定目標區(qū)域將復制到剪貼板。
下例所示把區(qū)域A1:D4復制到 E5開始的同等大小區(qū)域。就是復制到E5:H8,可以使用具體參數(shù)設置復制粘貼的類型,比如僅復制公式,僅復制值等。
Range(“A1:D4”).CopyRange(“E5”)
Range.Delete 方法 刪除對象
RANGE(“A1:D5,F2:G2”).delete 同時刪除A1:D5,F2:G2,兩個指定區(qū)域
Range(“1:1,8:8,12:12”).delete 同時刪除第1,第8,第12行
Range.Insert 方法 插入
Range(“1:1,8:8,12:12”).Insert 同時在第1,第8,第12行上面插入一行空白行
以上列舉了小部分常用的對象、屬性和方法,每個對象都有不同的屬性和方法,不同的屬性和方法可能會有多個參數(shù),想要獲得詳情的屬性和方法參數(shù)只考幫助文檔,在VBA代碼編輯器中按F1可打開VBA幫助文檔。
聯(lián)系客服