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