上一章介紹了Excel的對(duì)象模型,從Excel對(duì)象模型可以看出,Excel 2007提供了200多種對(duì)象。其實(shí)Excel最常用的對(duì)象只有幾個(gè),如Application對(duì)象、Workbook工作簿對(duì)象、Worksheet工作表對(duì)象、Range單元格區(qū)域?qū)ο?,以及Chart圖表對(duì)象等。本章介紹這些對(duì)象的使用方法。
Application對(duì)象代表整個(gè)Excel應(yīng)用程序,在Excel對(duì)象模型中處于最頂層。使用Application對(duì)象可控制應(yīng)用程序范圍的設(shè)置和選項(xiàng)。
●控制整個(gè)應(yīng)用程序,對(duì)Application對(duì)象的相關(guān)屬性進(jìn)行設(shè)置,如設(shè)置應(yīng)用程序標(biāo)題、工具欄和菜單欄等的狀態(tài)。如下面的代碼將Excel標(biāo)題設(shè)置為“我的應(yīng)用程序”:
Excel內(nèi)置了豐富的函數(shù),充分利用這些函數(shù),可減少代碼的編寫工作量,對(duì)這些函數(shù)的引用可通過Application對(duì)象進(jìn)行。下面的代碼將對(duì)指定單元格求和:
使用Application對(duì)象的Caption屬性,可改變Excel主窗口標(biāo)題欄中顯示的名稱。一般將這類代碼放在工作簿的Open事件中,打開工作簿即可將其設(shè)置為需要的名稱。例如,以下代碼將標(biāo)題欄設(shè)置為“我的Excel應(yīng)用程序”:
關(guān)閉Excel,再重新打開包含以上代碼的Excel工作簿(或在VBE環(huán)境中執(zhí)行以上代碼),可得到如圖13-1所示的標(biāo)題欄名稱。
注意:Caption屬性是針對(duì)整個(gè)Excel應(yīng)用程序的設(shè)置。關(guān)閉包含以上代碼的工作簿,Excel的標(biāo)題欄仍然將顯示修改后的標(biāo)題名稱。
在“Excel選項(xiàng)”對(duì)話框中可設(shè)置Excel的常用選項(xiàng),通過VBA編寫代碼,也可設(shè)置這些選項(xiàng)。例如,以下程序?qū)⒃O(shè)置編輯欄、滾動(dòng)條和狀態(tài)欄顯示與否。
在默認(rèn)情況下,Excel每執(zhí)行一個(gè)操作就會(huì)更新一次屏幕的顯示,以顯示出執(zhí)行的結(jié)果。如果需要用VBA代碼一次執(zhí)行多步操作,關(guān)閉屏幕更新可加快程序的執(zhí)行速度。這樣將看不到程序的執(zhí)行過程,但程序的執(zhí)行速度加快了。將ScreenUpdating屬性設(shè)置為True,將啟用屏幕更新;設(shè)置為False,將關(guān)閉屏幕更新。
例如,以下示例演示將屏幕更新關(guān)閉以后,系統(tǒng)如何加快代碼的執(zhí)行速度。本例將工作表Sheet1上的1~10 000行進(jìn)行隔行隱藏,將程序執(zhí)行時(shí)間保存在數(shù)組中。第一次,示例隱藏行時(shí),屏幕更新是打開的;第二次時(shí),屏幕更新是關(guān)閉的。
程序的執(zhí)行結(jié)果如圖13-2所示。由和程序結(jié)果可以看出,將ScreenUpdating屬性設(shè)置為True時(shí),程序執(zhí)行的時(shí)間為41秒;而將ScreenUpdating屬性設(shè)置為False時(shí),程序執(zhí)行的時(shí)間約為3秒。由此可以看出程序執(zhí)行速度的差別為10多倍。
通過StatusBar屬性可返回或設(shè)置狀態(tài)欄中的文字,而DisplayStatusBar屬性可控制是否顯示狀態(tài)欄。下面的代碼首先保存DisplayStatusBar屬性的當(dāng)前狀態(tài),然后將該屬性設(shè)置為True以顯示狀態(tài)欄,最后在狀態(tài)欄中顯示出提示文字。
執(zhí)行以上代碼,狀態(tài)欄的顯示如圖13-3所示?!?/div>
一般在執(zhí)行完相應(yīng)的操作后,可使用以下代碼將狀態(tài)欄還原:
Application.StatusBar?。健alse
Application.DisplayStatusBar = oldStatusBar
13.1.6 查看模板文件的路徑
通過TemplatePath屬性可返回Excel模板文件存儲(chǔ)的路徑。例如以下的代碼可返回Excel模板文件保存的位置。
Sub 模板位置()
MsgBox Application.TemplatesPath
End Sub
過程執(zhí)行的結(jié)果如圖13-4所示。
13.1.7 最大化Excel窗口
通過WindowState屬性可查詢Excel窗口的狀態(tài),也可設(shè)置其狀態(tài)。例如以下代碼可將Excel窗口最大化:
Sub 最大化()
Application.WindowState = xlMaximized
End Sub
WindowState屬性可設(shè)置為以下三個(gè)值之一:
●xlMaximized,最大化窗口;
●xlMinimized,最小化窗口;
●xlNormal,正常窗口。
13.1.8 獲取對(duì)象的引用
許多Application對(duì)象的屬性用來返回其他的對(duì)象,主要有以下幾種。
1. ActiveCell屬性
返回一個(gè)Range對(duì)象,它代表活動(dòng)窗口(最上方的窗口)或指定窗口中的活動(dòng)單元格。如果窗口中沒有顯示工作表,此屬性無效。
注意:請(qǐng)仔細(xì)區(qū)分活動(dòng)單元格和選定區(qū)域:活動(dòng)單元格為選定區(qū)域內(nèi)部的一個(gè)單元格;而選定區(qū)域可以包含多個(gè)單元格,但只有一個(gè)單元格為活動(dòng)單元格。
下列表達(dá)式都返回活動(dòng)單元格,并且都是等效的。
ActiveCell
Application.ActiveCell
ActiveWindow.ActiveCell
Application.ActiveWindow.ActiveCell
2. ActiveChart屬性
返回一個(gè)Chart對(duì)象,它代表活動(dòng)圖表(嵌入式圖表或圖表工作表)。嵌入式圖表在被選中或激活時(shí)被認(rèn)為是活動(dòng)的。當(dāng)圖表的處于活動(dòng)狀態(tài)時(shí),此屬性返回“Nothing”。如果不指定對(duì)象識(shí)別符,此屬性返回活動(dòng)工作簿中的活動(dòng)圖表。
3. ActiveSheet屬性
返回一個(gè)對(duì)象,它代表活動(dòng)工作簿中或指定的窗口或工作簿中的活動(dòng)工作表(最上面的工作表)。如果沒有活動(dòng)的工作表,則返回“Nothing”。如果不指定對(duì)象識(shí)別符,則此屬性返回活動(dòng)工作簿中的活動(dòng)工作表。如果某個(gè)工作簿出現(xiàn)在若干個(gè)窗口,那么該工作簿的ActiveSheet屬性在不同窗口中可能不同。
4.ActiveWindow屬性
返回一個(gè)Window對(duì)象,該對(duì)象表示活動(dòng)窗口(頂部窗口)。如果沒有打開的窗口,則返回“Nothing”。
5.ActivWorkbook屬性
返回一個(gè)Workbook對(duì)象,該對(duì)象表示活動(dòng)窗口(頂部窗口)中的工作簿。如果沒能打開的窗口,以及“信息”窗口或“剪貼板”窗口為活動(dòng)窗口,則返回“Nothing”。
6. Cells屬性
返回一個(gè)Range對(duì)象,它代表活動(dòng)工作表中的所有列。如果活動(dòng)文檔不是工作表,則此屬性無效。因?yàn)镮tem屬性是Range對(duì)象的默認(rèn)屬性,所以可以在Cells關(guān)鍵字后面緊接著指定行和列的索引。在不使用對(duì)象識(shí)別符的情況下,使用此屬性將返回一個(gè)Range對(duì)象,它代表活動(dòng)工作表中所有的單元格。
7. Selection屬性
Selection屬性為Application對(duì)象返回活動(dòng)窗口中選定的對(duì)象。返回的對(duì)象類型取決于當(dāng)前所選內(nèi)容(例如,如果選擇了單元格,此屬性將返回Range對(duì)象);如果未選擇任何內(nèi)容,Selection屬性將返回“Nothing”。
8. Sheets屬性
返回一個(gè)Sheets集合,它代表活動(dòng)工作簿中所有的工作表。
9. Workbooks屬性
返回一個(gè)Workbooks集合,該集合表示所有打開的工作簿。
10. WorksheetFunction屬性
可用作從Visual Basic中調(diào)用的Excel工作表函數(shù)的容器。
例如,下列代碼顯示給區(qū)域“A1:C10”應(yīng)用Min工作表函數(shù)的結(jié)果。
Set myRange = Worksheets("Sheet1"),Range("A1:C10")
answer = Application.WorksheetFunction.Min(myRange)
MsgBox answer
程序中也可省略WorksheetFunction,直接寫為Application.Min的形式。
13.1.9 重新計(jì)算
使用Calculate方法可計(jì)算所有打開的工作簿、工作簿的某個(gè)特定工作表或工作表指定區(qū)域中的單元格,例如以下代碼:
注意:使用CalculateFull方法將強(qiáng)制對(duì)所有打開工作簿中的數(shù)據(jù)進(jìn)行完整計(jì)算。
13.1.10 將R1C1轉(zhuǎn)換為A1樣式
使用ConvertFormula方法可在A1和R1C1引用樣式之間轉(zhuǎn)換,在相對(duì)和絕對(duì)引用之間轉(zhuǎn)換公式中的單元格引用,或者同時(shí)進(jìn)行這兩種轉(zhuǎn)換。其語法格式如下:
Application.ConvertFormula(公式字符串,原引用樣式,返回引用樣式,轉(zhuǎn)換類型,關(guān)聯(lián)單元格)
下面的代碼把包含R1C1樣式引用SUM公式轉(zhuǎn)換為包含A1樣式引用的等價(jià)公式,然后顯示轉(zhuǎn)換結(jié)果。
程序執(zhí)行結(jié)果如圖13-5所示。
13.1.11 快速跳轉(zhuǎn)
使用Goto方法可選定任意工作簿中的任意區(qū)域,并且如果該工作簿未處于活動(dòng)狀態(tài),就激活該工作簿。通過該方法的Scroll屬性可讓窗口滾動(dòng)到目標(biāo)位置。例如以下代碼將選擇“Sheet2”工作表中的“A1:A10”區(qū)域,并將該區(qū)域滾動(dòng)到當(dāng)前窗口中顯示。
Sub 快速跳轉(zhuǎn)()
Application.Goto Reference:=Worksheets("Sheet2").Range("A1:A10")、Scroll:=True
End Sub
13.1.12 定時(shí)執(zhí)行過程
使用OnTime方法可安排一個(gè)過程在將來的特定時(shí)間運(yùn)行(即可以是具體指定的某個(gè)時(shí)間,也可以是指定的一段時(shí)間之后)。如設(shè)置20秒后運(yùn)行過程“Test1”可使用以下代碼:
Application.OnTime Now + TimeValue("00:00:20")、"Test1"
早上8點(diǎn)整運(yùn)行過程“Test2”:
Application.OnTime TimeValue("08:00:00")、"Test2"
要撤銷運(yùn)行OnTime設(shè)置的過程,需要將Schedule參數(shù)設(shè)置為Flase。如撤銷前一個(gè)表達(dá)式對(duì)OnTime的設(shè)置的代碼如下:
Application.OnTime EarliestTime:=TimeValue("08:00:00")、Procedure:="Test2"、Schedule:=False
技巧:如果不一個(gè)參數(shù)在調(diào)用方法庫中預(yù)先定義了其名稱,那么這個(gè)參數(shù)稱為命名參數(shù)。對(duì)命名參數(shù),不必拘泥于語法所規(guī)定順序來提供值,而可按任何順序用命名參數(shù)分配值。例如,OnTime方法接受4個(gè)參數(shù),其格式如下:
OnTime(EarliestTime,Procedure,LatestTime,Schedule)
在對(duì)命名參數(shù)賦值時(shí),可使用前面的語句取消OnTime設(shè)置的過程,也可以使用以下語句完成同樣的功能(將Schedule參數(shù)放在最前面):
Application.OnTimeSchedule:=False,EarliestTime:=TimeValue("08:00:00:),Procedure:="Test2"
13.1.13 合并區(qū)域
使用Union方法可返回兩個(gè)或多個(gè)區(qū)域的合并區(qū)域。其語法格式如下:
表達(dá)式.Union(Argl,Arg2,……,Arg30)
使用該方法時(shí),最少需要兩個(gè)Range對(duì)象區(qū)域作為參數(shù),最多可以合并30個(gè)Range對(duì)象區(qū)域。例如:
Worksheets("Sheet1").Activate
Set unRange = Application.Union(Range("A1:B5"),Range(D1:B5"))
unRange.Formula?。健?=RAND()"
以上代碼首先將單元格區(qū)域“A1:B5”和“D1:E5”合并為1個(gè)Range對(duì)象,再設(shè)置該區(qū)域?qū)ο笾懈鲉卧竦墓綖橐粋€(gè)隨機(jī)函數(shù)。執(zhí)行該部分代碼后,將在這20個(gè)單元格區(qū)域(單元格區(qū)域“A1:B5”和“D1:E5”共20個(gè)單元格)填充隨機(jī)數(shù)。
13.2 Workbook對(duì)象
Workbook工作簿對(duì)象位于Application對(duì)象的下一層次。一個(gè)工作簿對(duì)象就是一個(gè)Excel文件。工作表對(duì)象Worksheet,單元格區(qū)域?qū)ο驲ange和圖表對(duì)象Chart等都位于工作簿對(duì)象中。多個(gè)Workbook對(duì)象組成Workbooks集合。
13.2.1 新建工作簿
Workbooks集合包含了Excel應(yīng)用程序中當(dāng)前打開的所有WorkBook對(duì)象??梢允褂肳orkbooks集合創(chuàng)建新的工作簿,或關(guān)閉工作簿等。
在VBA中創(chuàng)新的工作簿,可以使用Workbooks集合對(duì)象的Add方法。下面的代碼用于創(chuàng)建一個(gè)新工作簿。Excel自動(dòng)將該工作簿命名為“BookN”,其中“N”是下一個(gè)可用的數(shù)字。新工作簿將成為活動(dòng)工作簿。
Sub AddOne
Workbooks.Add
End Sub
創(chuàng)建新工作簿更好的方法是將其分配給一個(gè)對(duì)象變量,在程序中可通過該對(duì)象變量對(duì)工作簿進(jìn)行設(shè)置。使用對(duì)象變量可以很容易地控制新工作簿。例如,以下代碼就可完成工作簿的創(chuàng)建,并設(shè)置工作簿的相關(guān)屬性。
Sub AddNew()
n=Workbooks.Count
Set NewBook = Workbooks.Add
With NewBook
.Title = "新工作簿" & n
.SaveAs Filename:="新工作簿" & n & ".xlsx"
End With
End Sub
13.2.2 打開工作簿
用Open方法打開一個(gè)工作簿時(shí),該工作簿將成為Workbooks集合的成員。下述代碼用于打開“D:\Excelvba2007\實(shí)例\第13章\常用對(duì)象.xlsm”工作簿:
Sub OpenUp()
Workbooks.Open("D:\Excelvba2007\實(shí)例\第13章\常用對(duì)象.xlsm")
End Sub
在更多的時(shí)候,打開工作簿時(shí)需要查找文件所在位置,這時(shí)可通過“打開”對(duì)話框來進(jìn)行查找,引用“打開”對(duì)話框的語法格式如下:
Application.GetOpenFilename(FileFilter,FilterIndex,Title,ButtonText,MultiSelect)
使用GetOpenFilename方法可返回選定的文件名或用戶輸入的名稱,返回的名稱可能包含路徑說明。如果用戶取消了對(duì)話框,則該值為False。使用實(shí)例如下:
另外,Workbooks集合還提供了OpenDatabase,OpenText和OpenXML方法,分別用來打開數(shù)據(jù)庫、文本文件和XML數(shù)據(jù)文件。
對(duì)于打開的工作簿,可使用Close方法關(guān)閉,且不退出Excel程序。如果某個(gè)打開的工作秒表改動(dòng),Excel將顯示底部是否保存更改的對(duì)話框和相應(yīng)提示。
13.2.3 查看文檔屬性
在Excel中,要查看和修改文檔的屬性可按以下步驟操作。
步驟1 單擊“Office按鈕”打開下拉菜單。
步驟2 選擇“準(zhǔn)備”│“屬性”命令,在Excel的功能區(qū)下方打開如圖13-6所示的“文檔屬性”面板,供用戶查看和修改。
步驟3 單擊左上角“文檔屬性”標(biāo)簽,打開下拉菜單選擇“高級(jí)屬性”,打開如圖13-7所示的屬性窗口,在其“自定義”選項(xiàng)卡中可定義各種屬性值。
以上是在Excel操作環(huán)境下操作的結(jié)果。在Excel程序開發(fā)中,也可使用VBA代碼控制并設(shè)置文檔的屬性值。使用Workbook對(duì)象的BuiltinDoc
umentProperties屬性返回一個(gè)DocunentProperties集合,該集合表示指定工作母虎所有內(nèi)置文檔屬性。
例如,以下代碼在BuiltinDocumentProperties屬性的DocumentProperties集合中逐個(gè)讀出屬性,并將其屬性名稱和屬性值填寫到“Sheet1”工作表的第A,B兩列中。
程序運(yùn)行結(jié)果如圖13-8所示。
13.2.4 處理工作簿文件名
使用Workbook對(duì)象的FullName屬性可返回工作簿的名稱(用字符串表示),包括其磁盤路徑。例如,以下代碼將顯示當(dāng)前活動(dòng)工作簿的全名,掛靠該行代碼有可能顯示如圖13-9所示的對(duì)話框。
如果只需要工作簿的文件名稱,而不需要磁盤路徑,可使用Workbook對(duì)象的Name屬性。
13.2.5 處理命名單元格區(qū)域
在Excel中,可使用行號(hào)列標(biāo)來引用單元格(如A1),也可對(duì)單元格區(qū)域進(jìn)行命名,然后在公式或VBA代碼中使用名稱來引用相關(guān)單元格。
單元格區(qū)域的名稱定義保存在Name對(duì)象中。名稱可以是內(nèi)置名稱(如“Database”,“Print_Area”和“Auto_Open”)或自定義名稱。
Name對(duì)象是Application,Workbook和Worksheet對(duì)象的Names集合的成員。使用Names(index)(其中index是名稱索引號(hào)或定義名稱)可返回一個(gè)Name對(duì)象。
注意:這時(shí)的Name對(duì)象不是Workbook對(duì)象的Name屬性。
可用Add方法創(chuàng)建名稱并將其添加到集合中。下面的語句創(chuàng)建一個(gè)新名稱,指向工作表Sheet1上單元格區(qū)域A1:C20。
Name.Add Name:="test",RefersTo:="=sheet1!$a$1:$c$20"
RefersTo參數(shù)必須以A1樣式表示法指定,包括必要時(shí)使用的美元符號(hào)($)。例如,如果在工作表Sheet1上選定了單元格A10:B10,然后又將RefersTo參數(shù)指定為“=Sheet1!A1:B1”而定義了一個(gè)名稱,那么該名稱實(shí)際上指向單元格區(qū)域A10:B10(因?yàn)橹付ǖ氖窍鄬?duì)引用)。若要指定絕對(duì)引用,應(yīng)當(dāng)為“=Sheet1!$A$1:$B$1"。
例如,在一個(gè)“庫存管理系統(tǒng)”中,“商品信息”表中的數(shù)據(jù)不斷變化,如果需要對(duì)商品信息區(qū)域進(jìn)行命名,供其他表格使用,可使用以下代碼進(jìn)行定義:
對(duì)于已定義Name的名稱,也可通過VBA代碼進(jìn)行修改。例如,在工作簿中已經(jīng)定義了一個(gè)Name,名稱為“NameTest1”,在“名稱管理器”中查看結(jié)果如圖13-10所示。
執(zhí)行以上過程后,再在“公式”選項(xiàng)卡的“定義的名稱”組中單擊“名稱管理器”按鈕,打開“名稱管理器”對(duì)話框,可看到改名后的結(jié)果如圖13-11所示。
13.2.6 設(shè)置工作簿密碼
為了安全起見,有時(shí)需要為工作簿設(shè)置打開權(quán)限密碼。使用Workbook對(duì)象的Passwore屬性可獲取或設(shè)置該密碼。例如,以下代碼將提示用戶為工作簿設(shè)置一個(gè)密碼,然后保存并退出。
Sub 設(shè)置密碼()
ActiveWorkbook.Passwore?。健nputBox("輸入密碼:")
ActiveWorkbook.Close
End Sub
執(zhí)行以上代碼后,將關(guān)閉當(dāng)前Excel工作簿。下次打開此工作簿時(shí),將彈出如圖13-12所示的“密碼”對(duì)話框,要求用戶輸入正確的密碼才能打開工作簿。
要取消工作簿的密碼,可設(shè)置其Password屬性為空字符串,代碼如下:
ActiveWorkbook.Password?。健?"
也可通過單擊“Office”按鈕打開下拉菜單,從下拉菜單中選擇“準(zhǔn)備”│“加密文檔”命令,打開如圖13-13所示對(duì)話框,然后刪除其中的“密碼”字符即可。
13.2.7 更名保存工作簿
保存工作簿有兩種方式:一種是保存修改到原工作簿中;另一種是保存工作母虎另一個(gè)副本。使用Same方法可保存指定工作簿所做的更改。以下代碼用于保存所有打開的工作簿,然后關(guān)閉Excel。
For Each?。鳌n Application.Workbooks
w.Save
Next?。?/div>
Application.Quit
使用SaveAs方法可以將工作簿換名保存。例如,以下代碼用于新建一個(gè)工作簿,提示用戶輸入文件名,然后保存該工作簿。
Set NewBook = Workbooks.Add
Do
fName = Application.GetSaveAsFilename
Loop Until fName <> False
NewBook.SaveAs Filename:=fName
13.2.8 關(guān)閉前自動(dòng)保存工作簿
關(guān)閉Excel時(shí),如果對(duì)工作簿進(jìn)行了修改且沒有存盤,系統(tǒng)將打開提示對(duì)話框,提醒用戶保存修改。在實(shí)際的VBA程序中,可能需要強(qiáng)制保存(即在退出時(shí)不詢問用戶是否存盤,而是直接保存修改結(jié)果)。
這時(shí)可在Workbook對(duì)象的BeforeClose事件中編寫代碼。在關(guān)閉工作簿之前,將先產(chǎn)生此事件。如果該工作簿已經(jīng)更改過,則本事件在底部用戶是否保存更改之前產(chǎn)生。例如,下面的代碼將BeforClose事件的響應(yīng)設(shè)置為保存工作母虎任何更改。
Private Sub workbook_BeforeClose(Cancel as Boolean)
If Me.Saved = False Then Me.Save
End Sub
13.3 Worksheet對(duì)象
Worksheet對(duì)象代表Excel的工作表。通過Worksheet對(duì)象,可以在程序中完成各種針對(duì)工作表的操作,如設(shè)置單元格格式、插入工作及給工作表取名等。多個(gè)Worksheet對(duì)象組成的Worksheets集合。
13.3.1 新建工作表
工作表對(duì)象(Worksheet)屬于Worksheets集合中的成員,每個(gè)Worksheet對(duì)象都代表一個(gè)工作表。Excel中還提供了一個(gè)Sheets集合,該集合中的每個(gè)成員都是Worksheet對(duì)象或Chart對(duì)象,其屬性和方法都相同。
在Worksheets集合中,除了一般集合對(duì)象具有的屬性外,還有一個(gè)Visible屬性,通過該屬性可控制集合中的Worksheet對(duì)象是否可見。通過Worksheet集合的方法,可以對(duì)工作進(jìn)行控制,下面介紹其中常用的方法。
1. Add方法
新建工作表、圖表或宏表。新建的工作表將成為活動(dòng)工作表,其語法格式如下:
Worksheets.Add(Before,After,Count,Type)
其中各參數(shù)的意義為:
●Before,指定工作表的對(duì)象,新建的工作表將置于此工作表之前。
●After,指定工作表的對(duì)象,新建的工作表將置于此工作表之后。
●Count,設(shè)置要添加的工作表數(shù),默認(rèn)值為1。
●Type,指定工作表類型。工作表類型可以為xlWorksheet,xlChart,xlExcel4MacroSheet或xlExcel4IntlMacroSheet(默認(rèn)值為xlWorksheet)。如果同時(shí)省略Before和After,則新工作表插入到活動(dòng)工作表之前。例如,執(zhí)行以下代碼,在工作簿中新增兩個(gè)工作表。
Sub 新建工作表()
Worksheets.Add Count:=2
End Sub
2. Copy方法
將工作表復(fù)制到工作簿的另一位置。其語法格式如下:
Worksheets.Copy(Before,After)
若不指定Before和After,則Excel將新建一個(gè)工作簿,其中包含復(fù)制的工作表。
3.Delete方法
刪除集合中的指定對(duì)象——工作表(Worksheet)對(duì)象。
4. Move方法
將工作表移到工作簿中的其他位置,代碼如下:
Worksheets.Move(Before,After)
如果既不指定Before也不指定After,那么Excel將新建一個(gè)工作簿,其中包含所移動(dòng)的工作表。例如,下面的代碼將當(dāng)前活動(dòng)工作簿的Sheet1移到Sheet2之后。
Worksheets("Sheet1").Move after:=Worksheets("Sheet2")
13.3.2 管理批注
在“審閱”選項(xiàng)卡的“批注”組中,單擊“新建批注”按鈕,可為當(dāng)前單元格插入批注。在Excel環(huán)境下,可通過該組中的相關(guān)按鈕處理批注,也可以通過VBA代碼對(duì)批注進(jìn)行管理。
在VBA中,將每一個(gè)批注作為一個(gè)Comment對(duì)象來處理。每個(gè)工作表的Comment對(duì)象組成一個(gè)Comments集合,如果工作表中沒有批注,這個(gè)集合就為空。
1. 添加批注
使用AddComment方法可在區(qū)域內(nèi)添加批注。以下代碼表示在第一張工作表的單元格E5中添加批注。
Sub 添加批注()
With Worksheets(1).Range("e").AddComment
.Visible?。健alse
?。甌ext "批注日期:"?。Αate
End With
End Sub
Worksheets(1)表示當(dāng)前工作簿中排在第一個(gè)位置的工作表,并不一定是名稱為“Sheet1”的表,如果要引用“Sheet1”表,則應(yīng)使用
Worksheets("Sheet1")的方式來引用。
Text是Comment對(duì)象的方法,所以不使用等號(hào)設(shè)置其批注值。
注意:如果單元格中已經(jīng)添加了批注,使用AddComment方法再插入批注時(shí)將產(chǎn)生錯(cuò)誤。
2. 查看批注數(shù)量
使用Comments集合對(duì)象的Count屬性可查看指定工作表的批注數(shù)量。例如以下代碼將顯示當(dāng)前工作簿的第一個(gè)工作表中的批注數(shù)量:
MsgBox Worksheets(1).Comments(1).Count
3. 查看批注
工作表中的批注全部Comments集合中,所以可以用For Each循環(huán)將其逐個(gè)顯示出來。例如,以下代碼顯示第一個(gè)工作表中各批注的作者及批注的內(nèi)容:
Sub 查看批注()
Dim cm As Comment
Dim i As Integer,j As Integer
?。椋絎orksheets(1).Comments.Count
For Each cm In Worksheets(1).Comments
j=?。?1
MsgBox "第" & j & "條/共" & i & "條批注" & vbCrLf & "作者:" & cm.Author?。Α?批注內(nèi)容:" & cm.Text
Next
End Sub
執(zhí)行以上代碼之前,先在第一個(gè)工作表中插入幾個(gè)批注。程序執(zhí)行結(jié)果如圖13-14所示。在Excel顯示的提示對(duì)話框中單擊“確定”按鈕,可顯示下一個(gè)批注。
13.3.3 設(shè)置工作表滾動(dòng)區(qū)域
與以往版本相比,Excel 2007工作表非常龐大,為1 048 576行乘以16 384列,在屏幕上一次顯示不完所有單元格,可由用戶托動(dòng)水平和垂直滾動(dòng)條來顯示屏幕以外的單元格。在程序中,可通過對(duì)工作表或窗口的相關(guān)屬性進(jìn)行設(shè)置來控制顯示的單元格位置
Excel 20007主要通過Scroll Area屬性來設(shè)置窗口的滾動(dòng)區(qū)域。
使用工作表的ScrollArea屬性可設(shè)置工作表中允許滾動(dòng)的區(qū)域,用戶不能選定滾動(dòng)區(qū)域之外的單元格。例如,以下代碼設(shè)置用戶操作的區(qū)域“A1:C20”:
Sub 設(shè)置滾動(dòng)區(qū)域()
Worksheets(1).ScrollArea = "A1:C20"
End Sub
執(zhí)行以上代碼后,用戶將不能再選擇“A1:C20”區(qū)域以外的單元格了??蓪crollArea屬性設(shè)置為空字符串(""),以允許選定整張工作表內(nèi)所有單元格。
13.3.4 在工作表中繪制圖形
在Excel環(huán)境中,可在工作表中插入各種剪貼畫、形狀及SmartArt圖形。通過VBA可更精確地在工作表中繪制圖形,也可控制工作表中的每一個(gè)圖形。
Shape對(duì)象代表工作表繪圖層中的對(duì)象,例如自選圖形、任意多邊形、OLE對(duì)象或圖片等。工作表中的多個(gè)Shape對(duì)象構(gòu)成Shapes集合對(duì)象。通過Shapes集合對(duì)象中的方法可向工作表中添加線形標(biāo)注、圖表、連接符、圖片、藝術(shù)字及各種圖形等形狀。例如,使用AddPolyline方法可創(chuàng)建一個(gè)不封閉的連續(xù)線段或一個(gè)封閉的多邊形。使用該方法之前,需首先定義一個(gè)包含多邊形各點(diǎn)坐標(biāo)的二維數(shù)組,然后使用該方法即可繪制出需要的多邊形。
對(duì)于工作表中的圖形,還可對(duì)其進(jìn)行編輯。例如,以下代碼對(duì)前面生成的多邊形進(jìn)行編輯,首先修改其填充色為紅色,再將多邊形進(jìn)行垂直翻轉(zhuǎn),結(jié)果如圖13-16所示。
Sub 修改圖形()
With Worksheets(1).Shapes(1)
?。瓼ill.ForeColor.RGB = RGB(255,0,0)
?。瓼lip msoFlipVertical
End With
End Sub
13.3.5 隱藏工作表
在很多情況下,使用Excel構(gòu)臺(tái)應(yīng)用程序都需要授權(quán)才能使用。對(duì)用戶的授權(quán)一般采用用戶名加密碼的方式來進(jìn)行驗(yàn)證。在用戶還沒有進(jìn)行登錄驗(yàn)證時(shí),打開的系統(tǒng)界面將只顯示一個(gè)工作表,其他工作表都處于隱藏狀態(tài)。這樣可保護(hù)第三數(shù)據(jù)使其不被外泄。
當(dāng)授權(quán)用戶操作結(jié)束后,在退出系統(tǒng)之前,應(yīng)該將工作表隱藏起來。在Workbook對(duì)象的BeforClose事件中編寫如下代碼即可完成該功能:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
For?。椋? To Sheets.Count ?。аh(huán)隱藏各工作表
If Sheets(i).Name<>"登錄"Then Sheets(i).Visible?。健alse
Next
End Sub
13.3.6 在工作表中校驗(yàn)數(shù)據(jù)
在Excel工作表中輸入數(shù)據(jù)時(shí),有時(shí)希望將某些列的值限定在一定的范圍內(nèi),這時(shí)可通過Worksheet對(duì)象的Change事件對(duì)單元格中錄入的數(shù)據(jù)進(jìn)行校驗(yàn)。例如,以下代碼將檢查工作表的第3列,如果輸入的內(nèi)容不是“男”或“女”,則將顯示錯(cuò)誤伯信息。
13.3.7 自動(dòng)生成下拉數(shù)據(jù)
在Excel工作表中錄入數(shù)據(jù),可以使用上面介紹的方法對(duì)錄入的數(shù)據(jù)進(jìn)行校驗(yàn),如果不符合要求就顯示錯(cuò)誤提示信息,讓用戶重新錄入。
如果某列數(shù)據(jù)有多個(gè)選項(xiàng),那么使用這種方法時(shí),其判斷代碼將會(huì)變得很長。另外,用戶錄入數(shù)據(jù)時(shí)也不知道是否正確。這時(shí)可以使用下拉列表的方式,將多個(gè)選項(xiàng)列出來,讓用戶直接選擇,這樣可提高數(shù)據(jù)錄入的效率,也不會(huì)產(chǎn)生錯(cuò)誤的數(shù)據(jù)。
下面用一個(gè)實(shí)例來介紹這種方法的使用步驟。該例制作一個(gè)員工花名冊錄入表,對(duì)于表中的職務(wù)一項(xiàng),則顯示一個(gè)列表來讓用戶選擇。具體制作步驟如下。
步驟1 啟動(dòng)Excel,將新工作簿保存為“員工花名冊.xlsm”。
步驟2 在第一個(gè)表中制作表頭,并設(shè)置名稱為“員工花名冊”,如圖13-17所示。
步驟3 將另一個(gè)工作表名為“職務(wù)”,并輸入如圖13-18所示的數(shù)據(jù)。
步驟4 按快捷鍵“Alt+F11”進(jìn)入VBE環(huán)境,在“工程資源管理器”中雙擊“Sheets(員工花名冊)”,打開代碼窗口,輸入以下代碼,如圖13-19所示。
本段程序的功能是當(dāng)選定區(qū)域發(fā)生改變時(shí),對(duì)新選定的區(qū)域進(jìn)行格式的設(shè)置。該程序的關(guān)鍵之處在于當(dāng)工作表上的選定區(qū)域發(fā)生改變時(shí)(用鼠標(biāo)單擊某個(gè)單元格或移動(dòng)光標(biāo)鍵改變選擇的單元格),將產(chǎn)生SelectionChange事件(即執(zhí)行本段程序)。
程序首先從“職務(wù)”表中逐行讀取數(shù)據(jù),并將其串在一起放在一個(gè)字符串中,代后面的代碼使用。
該程序中的Target表示新選定的區(qū)域,Target.Column為選定區(qū)域的列序號(hào)。
當(dāng)選定區(qū)域?yàn)榈?列(“花名冊”工作表第1列為“編號(hào)”)時(shí),通過語句:
Target.NumberFormatLocal?。健。ⅲ溃?/div>
將該列設(shè)為文本格式。如果不設(shè)置為文本格式,在輸入長度大于11位的數(shù)據(jù)時(shí),系統(tǒng)默認(rèn)為常規(guī)格式,將用科學(xué)計(jì)數(shù)法表示為數(shù)值。
當(dāng)選定區(qū)域?yàn)榈?列(“性別”)時(shí),通過語句:
Target.Validation.Add xlValidateList, Formula1:="男,女"
設(shè)置該單元格為一個(gè)校驗(yàn)列表,列表的選項(xiàng)為“男”或“女”。當(dāng)每次將錄入焦點(diǎn)移到該列時(shí),都將增加這個(gè)校驗(yàn)列表,這將引起程序出錯(cuò),所以在增加校驗(yàn)列表之前,先執(zhí)行一個(gè)刪除校驗(yàn)列表的語句:
Target.Validation.Delete
當(dāng)選定區(qū)域?yàn)榈?列(“職務(wù)”)時(shí),設(shè)置該單元格的校驗(yàn)列表,列表的選項(xiàng)為一個(gè)字符串Zw。字符串Zw的值在本段程序開始處已準(zhǔn)備好。
13.4 Range對(duì)象
通過以下屬性可以獲取一個(gè)Range對(duì)象,然后使用Range對(duì)象的屬性和方法對(duì)單元格內(nèi)容、格式等進(jìn)行控制。
1.Range屬性
工作表(Worksheet)對(duì)象或Range對(duì)象的Range屬性返回一個(gè)Range對(duì)象,它代表一個(gè)單元格或單元格區(qū)域。常見的表示方法有:
其中MyRange,YourRange,HIsRange為單元格區(qū)域的名稱。
2. Cells屬性
Worksheet對(duì)象或Range對(duì)象的Cells屬性也可返回一個(gè)Range對(duì)象。常見的表示方法有:
使用Cells屬性可以方便地使用變量來指定行列,下列代碼用于在Sheet1工作表上創(chuàng)建行號(hào)和列標(biāo):
程序運(yùn)行結(jié)果如圖13-20所示。
3. Offset屬性
該屬性返回Range對(duì)象,它代表位于指定單元格區(qū)域的一定的偏移量位置上的區(qū)域。使用格式為:
Offset(RowOffset,ColumnOffset)
其中RowOffset為行偏移量,而ColumnOffset為列偏移量。例如,下列代碼將激活Sheet1工作表活動(dòng)單元格向右偏移三列、向下偏移三行處的單元格。
Worksheets("Sheet1").Activate
ActiveCell.Offset(rowOffset:=3,columnoffset:=3).Activate
4.Columns屬性
返回一個(gè)Range對(duì)象,它代表指定區(qū)域的列。此屬性在應(yīng)用于一個(gè)多重選定區(qū)域的Range對(duì)象時(shí),只會(huì)從該區(qū)域的第一個(gè)子區(qū)域中返回列。例如,如果Range對(duì)象有兩個(gè)子區(qū)域A1:B2和C3:D4,那么Selection.Columns.Count的返回值是2,而不是4。
5. Rows屬性
返回一個(gè)Range對(duì)象,它代表指定單元格區(qū)域中的行。例如,以下代碼將刪除表格中的第5行:
Worksheets("Sheet1").Rows(5).Delete
6. CurrentRegion屬性
返回一個(gè)Range對(duì)象,該對(duì)象表示當(dāng)前區(qū)域。當(dāng)前區(qū)域是以空行與空列的組合為邊界的區(qū)域。例如,以下代碼將選定工作表Sheet1上的當(dāng)前區(qū)域:
Worksheets("Sheet1").Activate
ActiveCell.CurrentRegion.Select
7.End屬性
返回一個(gè)Range對(duì)象,該對(duì)象代表包含源區(qū)域的區(qū)域尾端的單元格。等同于按組合鍵<End+↑>,<End+↓>,<End+←>或<End
+→>。其格式為:
Range.End(Direction)
其中Direction指定移動(dòng)的方向,可為4個(gè)值:xlDown,xlToLdft,xcToRight,xlUp分別表示向下、向左、向右、向上4個(gè)方向。
下面列舉部分示例代碼:
8.EntireColumn屬性
返回一個(gè)Range對(duì)象,該對(duì)象包含指定區(qū)域的整列(或多列)。
9. ’EntireRow屬性
返回一個(gè)Range對(duì)象,該對(duì)象包含指定區(qū)域的整行(或多行)。
10. Union方法
使用Union(range1,range2……)可返回多塊區(qū)域,即該區(qū)域由兩個(gè)或多個(gè)連續(xù)的單元格區(qū)域組成。下面的代碼創(chuàng)建由單元格區(qū)域A1:B2和C3:D4組合定義的對(duì)象,然后選定該定義區(qū)域。
11. ActiveCell屬性
ActiveCell屬性返回一個(gè)Range對(duì)象,代表活動(dòng)窗口(最上方的窗口)或指定窗口中的活動(dòng)單元格。若窗口中沒有顯示工作表,此屬性無效。
活動(dòng)單元格為選定區(qū)域內(nèi)部的一個(gè)單元格。而選定區(qū)域可以包含多個(gè)單元格,但只有一個(gè)單元格為活動(dòng)單元格。
下列表達(dá)式都返回活動(dòng)單元格,并且都是等效的。
13.4.2 設(shè)置邊框線
Excel單元格區(qū)域具有4個(gè)分立的邊框:左邊框、右邊框、頂部邊框和底部邊框。VBA通過Border對(duì)象來控制邊框,各邊框組成Borders集合。這4個(gè)邊框既可單獨(dú)返回,也可作為一個(gè)組同時(shí)返回。以下代碼將第一個(gè)工作表上單元格區(qū)域“A1:C3”添加雙邊框。
Worksheets(1).Range("A1:C3").Borders.LineStyle?。健 lDouble
以上代碼同時(shí)設(shè)置了區(qū)域內(nèi)每個(gè)單元格上下左右4個(gè)邊框線,如圖13-21所示。
如果要分別控制邊框線,可使用Borders(index)的方式來設(shè)置,index為以下常量之一:
▲xlDiagonalDown,區(qū)域中每個(gè)單元格的左上角至右下角的邊框;
▲xlDiagonalUp,區(qū)域中每個(gè)單元格的左下角至右上角的邊框;
▲xlEdgeBottom,區(qū)域底部的邊框;
▲xlEdgeLeft,區(qū)域左邊的邊框;
▲xlEdgeRight,區(qū)域右邊的邊框;
▲xlEdgeTop,區(qū)域頂部的邊框;
▲xlInsideHorizontal,區(qū)域中所有單元格的水平邊框(區(qū)域以外的邊框除外);
▲xlInsideVertical,區(qū)域中所有單元格的垂直邊框(區(qū)域以外的邊框除外)。
以下代碼設(shè)置單元格區(qū)域“A1:C3”的底部邊框的顏色為“紅色”。
邊框線的線型(LineStyle)可以設(shè)置為以下幾種之一:
●xlContinuous,實(shí)線;
●xlDash,虛線;
●xlDashDot,點(diǎn)劃相間線;
●xlDashDotDot,劃線后跟兩個(gè)點(diǎn);
●xlDot,點(diǎn)式線;
●xlDouble,雙線;
●xlLineStyleNone,無線條;
●xlSlantDashDot,傾斜的劃線。
13.4.3 設(shè)置單元格部分字符格式
如果要設(shè)置單元格中部分字符的格式,可以使用Range對(duì)象的Characters屬性,該屬性返回Characters對(duì)象。使用Characters對(duì)象可修改包含在全文本字符串中的任意字符序列。
僅當(dāng)需要更改對(duì)象中文本的一部分而不影響其余部分時(shí),才有必要使用Characters對(duì)象。要同時(shí)更改所有文本,通??梢詫?duì)該對(duì)象直接應(yīng)用某一適當(dāng)?shù)姆椒ɑ驅(qū)傩浴@?,以下代碼將單元格A5的內(nèi)容設(shè)置為斜體:
Worksheets("Sheet1").Range("A5").Font.Italic?。健rue
使用Characters對(duì)象可為文本字符串內(nèi)的字符設(shè)置格式。其格式如下:
Range.Chracters(Start,Length)
其中參數(shù)的含義如下:
★Start,設(shè)置要返回的第一個(gè)字符的位置。如果此參數(shù)是1或被省略,則此屬性返回一個(gè)以第一個(gè)字符為開頭的字符區(qū)域。
★L(fēng)ength,設(shè)置要返回的字符數(shù)。如果省略此參數(shù),則此屬性返回字符串的后半部分(Start字符之后的所有字符)。
下面的代碼向單元格B1中添加文本,并將第二個(gè)單詞設(shè)置為加粗:
With Worksheets("Sheet1").Range("B1")
?。甐alue = "New Title"
?。瓹haracters(5,5).Font.Bold = True
13.4.4 操作當(dāng)前區(qū)域
當(dāng)前區(qū)域是指以空行與空列的組合為邊界的區(qū)域。使用CurrentRegion屬性可返回指定單元格所在的當(dāng)前區(qū)域。該屬性對(duì)于很多操作來說是很有用的,能自動(dòng)將選定區(qū)域擴(kuò)展到包含整個(gè)當(dāng)前區(qū)域,例如以下代碼:
ActiveCell.CurrentRegion.Rows.Count
ActiveCell.CurrentRegion.Columns.Count
將獲得與活動(dòng)單元格連續(xù)的單元格區(qū)域的行數(shù)和列數(shù)。
假設(shè)在Sheet1中有一個(gè)包含標(biāo)題行的表,那么以下代碼僅選定該表,但不選定標(biāo)題行。執(zhí)行代碼之前,活動(dòng)單元格必須處于該表中。
Set tbl = ActiveCell.CurrentRegion
tbl.Offset(1,0).Resize(tbl.Rows.Count - 1,tbl.Columns.Count).Select
13.4.5 修改列寬
在Excel中,通過拖動(dòng)列標(biāo)即可方便直觀地調(diào)整列的寬度。在VBA中通過ColumnWidth屬性也可獲取或設(shè)置指定區(qū)域中所有列的列寬。
一個(gè)列寬單位等于“常規(guī)”樣式中一個(gè)字符的寬度。對(duì)于比例字體,則使用字符0(零)的寬度。例如,以下代碼使工作表Sheet1上B列的列寬加倍。
With Worksheets("Sheet1").Columns("B")
?。瓹olumnWidth?。健olumnWidth*2
End With
13.4.6 定義條件格式
Excel中定義的條件格式為FormatCondition對(duì)象,多個(gè)條件格式組成FormatConditions集合。通過Range對(duì)象的FormatConditions屬性可獲取FormatConditions集合的引用。例如,以下代碼為“E1:E10”單元格區(qū)域添加條件格式,其條件是在單元格區(qū)域“E1:E10”中,如果某個(gè)單元格的值大于“A1”單元格的值,則該單元格的邊框線為黃色的細(xì)實(shí)線,且字體為紅色的粗體字。
使用FormatConditions集合的Add方法添加新的條件格式的語法格式如下。
表達(dá)式.Add(Tybe,Operator, Formula1,Formula2)
其中,參數(shù)Type指定條件格式是基于單元格值還是基于表達(dá)式的,可為以下值之一:
§x.AboveAverageCondition,高于平均值條件;
§xlBlanksCondition,空值條件;
§xlCellValue,單元格值;
§xlColorScale,色階;
§xlCompareColumns,比較列;
§xlDatabar,數(shù)據(jù)條;
§xlErrorsCondition,錯(cuò)誤條件;
§xlExpression,表達(dá)式;
§xlIconSet,圖標(biāo)集;
§xlNoBlandsCondition,無空值條件;
§xlNoErrorsCondition,無錯(cuò)誤條件;
§xlTextString,文本字符串;
§xlTimePeriod,時(shí)間段;
§xlTop10,前10個(gè)值;
§xlUniqueValues,唯一值。
參數(shù)Operator是條件格式運(yùn)算符,可為以下常量之一:
◎xlBetween,介于。只在提供了兩個(gè)公式的情況下才能使用。
◎xlEqual,等于。
◎xlGreater,大于。
◎xlGreaterEqual,大于或等于。
◎xlLess,小于。
◎xlLessEqual,小于或等于。
◎xlNotBetween,不介于。只在提供了兩個(gè)公式的情況下才能使用。
◎xlNotEqual,不等于。
13.4.7 設(shè)置單元格
使用NumberFormat屬性可為單元格區(qū)域設(shè)置格式代碼。格式代碼與如圖13-22所示的“設(shè)置單元格格式”對(duì)話框中的“格式代碼”選項(xiàng)是同一個(gè)字符串。
13.5 Chart對(duì)象
在Excel中進(jìn)行數(shù)據(jù)分析時(shí),使用圖表可為用戶提供直觀的分析結(jié)果。Excel提供上百各圖表類型,用戶幾乎可以控制圖表的各個(gè)方面。
13.5.1 圖表分類
根據(jù)在工作簿中位置的不同,圖表可分為圖表工作表和嵌入工圖表兩種。
在VBA中,用Chart對(duì)象表示每個(gè)圖表工作表,所有圖表工作表組成Charts集合。使用Charts(index)可以返回單個(gè)Chart對(duì)象,其中index為圖表的索引號(hào)或名稱。
Sheets集合對(duì)象包含工作簿中所有的工作表(工作表和圖表工作表)。使用Sheets(index)可以返回單個(gè)工作表或圖表工作表。
嵌入到工作表的圖表包含在ChartObject對(duì)象中,ChartObject對(duì)象的屬性和方法控制工作表上嵌入式圖表的外觀和大小。ChartObject對(duì)象是ChartObjects集合的成員。ChartObjects集合包含單一工作表上的所有嵌入式圖表。
使用ChartObjects(index)可以返回單個(gè)ChartObject對(duì)象,其中index是嵌入式圖表的索引號(hào)或名稱。
13.5.2 添加圖表工作表
使用Charts集合對(duì)象的Add方法可創(chuàng)建一個(gè)新的圖表工作表并它添加到工作簿中。結(jié)合使用Charts集合對(duì)象的Add方法和Chart對(duì)象的ChartWizard方法可添加包含工作表數(shù)據(jù)的新圖表,例如下面的代碼將工作表“Sheet1”的單元格區(qū)域“A1:A10”中的數(shù)據(jù)添加為一個(gè)新的拆線圖:
Sub 添加圖表工作表()
With Charts.Add
?。瓹hartWizard Source:=Worksheets("Sheet1").Range("A1:A10"),_
Gallery:=xlLine,Title:="拆線圖示例"
End With
End Sub
執(zhí)行以上代碼,將插入一個(gè)名為“Chart1”的圖表工作表,并根據(jù)工作表“Sheet1”中“A1:A10”單元格區(qū)域中的數(shù)據(jù)生成拆線圖,如圖13-23所示。
在Chart對(duì)象的ChartWizard方法中,參數(shù)Gallery用于指定圖表的類型,VBA中對(duì)各種圖表類型都定義了常量,如本例的xlLine常量表示拆線圖。常用的圖表類型如下:
●xlColumnClustered,簇狀柱形圖。
●xlPie,餅圖。
●xlColumnStacked,堆積柱形圖。
●xl3DbarClustered,三維簇狀條形圖。
●xl3Dpie,三維餅圖。
●xl3DcolumnStacked,三維堆積柱形圖。
因?yàn)閳D表類型非常多,這里就不全部列出了。讀者可通過幫助系統(tǒng)查看“xlChartType”枚舉,其中列出了全部的圖表類型常量。
15.3.3 添加嵌入式圖表
使用ChartObjects集合對(duì)象的Add方法可創(chuàng)建一個(gè)新的空嵌入圖表并將它添加到集合中,再結(jié)合XhartObject對(duì)象的ChartWizard方法添加數(shù)據(jù)并設(shè)置新圖表的格式。以下代碼將在工作表“Sheet1"k創(chuàng)建一個(gè)新嵌入式圖表,然后以拆線圖形式添加單元格“A1:A10
”中的數(shù)據(jù)。
執(zhí)行以上代碼,在工作表“Sheet1”中插入嵌入式圖表,并根據(jù)工作表“Sheet1”中“A1:A10”單元格區(qū)域中的數(shù)據(jù)生成拆線圖,如圖13-24所示。
有關(guān)圖表的操作將在22章中進(jìn)行詳細(xì)介紹。
13.6 Window對(duì)象
Window對(duì)象代表一個(gè)窗口,能對(duì)窗口特性進(jìn)行設(shè)置和操作。許多工作表特征(如滾動(dòng)條和標(biāo)尺)實(shí)際上是窗口的屬性。
Window對(duì)象是Windows集合的成員。在Excel中,Applicaion對(duì)象和Worbook對(duì)象都有Windows集合,其中Applicaion對(duì)象的Windows集合包含應(yīng)用程序中的所有窗口;而Workbook對(duì)象的Windows集合只包含指定工作簿中的窗口。
13.6.1 創(chuàng)建窗口
在Excel 2007操作環(huán)境中的“視圖”選項(xiàng)卡的“窗口”組中,單擊“新建窗口”按鈕,可新建一個(gè)Excel窗口,該窗口的標(biāo)題欄名稱顯示為“Book1.xlsm:2”,同時(shí)新建的窗口中也將顯示活動(dòng)窗口的副本,如圖13-25所示。
在VBA代碼中,使用NewWindow方法也可完成該功能:
Sub 創(chuàng)建窗口副本()
ActiveWindow.NewWindow
MsgBox“新建窗口的窗口號(hào)是:”&ActiveWindow.WindowNumber
End Sub
該例在圖13-25所示窗口(已新建一個(gè)窗口)的基礎(chǔ)上運(yùn)行,將創(chuàng)建第二個(gè)副本,窗口編號(hào)為3。運(yùn)行后新創(chuàng)建的窗口標(biāo)題欄如圖13-26所示。
注意:窗口號(hào)和窗口索引(Index屬性)是兩個(gè)不同的概念,例如名稱為“Book1.xlsm:2”的窗口,其窗口號(hào)為2;而窗口索引為該窗口在Window集合中的位置,可以是窗口名稱或編號(hào)。
13.6.2 命名活動(dòng)窗口
Application對(duì)象的Caption屬性可改變Excel主窗口標(biāo)題欄的顯示內(nèi)容。每個(gè)工作簿窗口還有一個(gè)名稱,該名稱可通過Workbook的Window對(duì)象進(jìn)行修改。例如,以下代碼將設(shè)置當(dāng)前活動(dòng)工作簿窗口名稱:
13.6.3 控制窗口狀態(tài)
窗口狀態(tài)包括兩個(gè)層面的意思,一是整個(gè)Excel應(yīng)用程序窗口的狀態(tài);另一個(gè)是工作簿窗口的狀態(tài)。窗口狀態(tài)有三種形式,其常量表示為:
●xlNormal,正常;
●xlMaximized,最大化;
●xlMinimized,最小化。
以下代碼用于控制Excel窗口和工作簿窗口的狀態(tài):
Sub 控制窗口狀態(tài)()
執(zhí)行以上代碼時(shí),首先顯示即將進(jìn)行的操作。單擊對(duì)話框中的“確定”按鈕,將控制窗口的狀態(tài)。
13.6.4 激活窗口
當(dāng)打開多個(gè)Excel工作簿時(shí),WindowsXP的任務(wù)欄中將出現(xiàn)多個(gè)任務(wù)按鈕,單擊按鈕可激活對(duì)應(yīng)的窗口。在VBA代碼中,也可根據(jù)需要激活相應(yīng)的窗口,例如,以下代碼將當(dāng)前Excel工作簿逐個(gè)激活:
13.6.5 控制工作表顯示選項(xiàng)
通過“Excel選項(xiàng)”可設(shè)置工作表的顯示選項(xiàng),如圖13-28所示。在該對(duì)話框中,通過選中或取消復(fù)選框中的標(biāo)記可設(shè)置對(duì)應(yīng)的選項(xiàng)。
有時(shí)需要在VBA程序中進(jìn)行類似的設(shè)置。圖13-28所示的各選項(xiàng)都與Window對(duì)象的某一屬性相聯(lián)系,只需要設(shè)置該屬性的值,即可調(diào)整窗口的屬性。這些屬性都是邏輯值,可以使用“Not”運(yùn)算對(duì)其進(jìn)行取反,使用戶每次選擇都得到反向的設(shè)置,例如:
ActiveWindow.DisplayHeadings?。健Ot ActiveWindow.DisplayHeadings
以上代碼用來切換是否顯示工作表中的行列標(biāo)號(hào)。運(yùn)行后,工作表中的行標(biāo)號(hào)和列標(biāo)號(hào)將消失;再次運(yùn)行后,行列標(biāo)號(hào)重新出現(xiàn),如此反復(fù)。當(dāng)然也可以將該屬性設(shè)置一個(gè)常量,如False,以取消顯示行列標(biāo)號(hào)。例如,以下代碼顯示或隱藏工作表中的相關(guān)元素。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。