Excel VBA(工作效率倍增的實(shí)用技巧)下篇_第1頁
Excel VBA(工作效率倍增的實(shí)用技巧)下篇_第2頁
Excel VBA(工作效率倍增的實(shí)用技巧)下篇_第3頁
Excel VBA(工作效率倍增的實(shí)用技巧)下篇_第4頁
Excel VBA(工作效率倍增的實(shí)用技巧)下篇_第5頁
已閱讀5頁,還剩250頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

ExcelVBA(工作效率倍增的實(shí)用技巧)下篇目錄\h第8章Window對象操作技巧\h8.1控制窗口\h例141創(chuàng)建窗口\h例142獲取窗口狀態(tài)\h例143拆分窗格\h例144并排比較窗口\h例145排列窗口\h例146窗口顯示比例\h8.2控制工作表的顯示選項(xiàng)\h例147工作簿顯示選項(xiàng)\h例148工作表顯示選項(xiàng)\h例149工作表網(wǎng)格線\h例150獲取指定窗口選中的信息\h第9章Chart對象操作技巧\h9.1創(chuàng)建圖表\h例151創(chuàng)建圖表工作表\h例152創(chuàng)建嵌入式圖表\h例153轉(zhuǎn)換圖表類型\h例154刪除圖表\h9.2控制圖表對象\h例155判斷工作表的類型\h例156重排嵌入式圖表\h例157調(diào)整圖表的數(shù)據(jù)源\h例158為圖表添加陰影\h例159顯示數(shù)據(jù)標(biāo)簽\h例160將圖表保存為圖片\h例161設(shè)置圖表顏色\h例162按值顯示顏色\h9.3圖表事件\h例163激活圖表工作表\h例164顯示圖表各子對象名稱\h例165捕獲嵌入式圖表事件\h第10章用戶界面設(shè)計(jì)技巧\h10.1使用內(nèi)置對話框\h例166顯示打開對話框(使用GetOpenFilename方法)\h例167顯示保存文件對話框(使用GetSaveAsFilename方法)\h例168顯示內(nèi)置對話框\h例169用VBA調(diào)用Excel功能區(qū)功能\h10.2創(chuàng)建自定義窗體\h例170制作Splash窗口\h例171控制窗體顯示\h例172列表框間移動(dòng)數(shù)據(jù)\h例173通過窗體向工作表添加數(shù)據(jù)\h例174制作多頁窗體——報(bào)名登記\h例175通過窗體設(shè)置單元格格式\h例176用窗體控制工作表顯示比例\h例177調(diào)色板窗體\h例178在窗體中顯示圖表\h例179制作向?qū)Т绑w\h例180拖動(dòng)窗體上的控件\h例181制作交通信號燈\h例182制作進(jìn)度條\h第11章使用Excel處理工作表數(shù)據(jù)技巧\h11.1處理公式\h例183判斷單元格是否包含公式\h例184自動(dòng)填充公式\h例185鎖定和隱藏公式\h例186將單元格公式轉(zhuǎn)換為數(shù)值\h11.2數(shù)據(jù)查詢\h例187查找指定的值\h例188帶格式查找\h例189查找上一個(gè)/下一個(gè)數(shù)據(jù)\h例190代碼轉(zhuǎn)換\h例191模糊查詢\h11.3數(shù)據(jù)排序\h例192用VBA代碼排序\h例193亂序排序\h例194自定義序列排序\h例195多關(guān)鍵字排序\h例196輸入數(shù)據(jù)自動(dòng)排序\h11.4數(shù)據(jù)篩選\h例197用VBA進(jìn)行簡單篩選\h例198用VBA進(jìn)行高級篩選\h例199篩選非重復(fù)值\h例200取消篩選\h第12章使用Excel處理數(shù)據(jù)庫技巧\h12.1用ADO訪問Excel工作表\h例201使用ADO連接數(shù)據(jù)庫\h例202從工作表中查詢數(shù)據(jù)\h例203匯總數(shù)據(jù)\h12.2處理數(shù)據(jù)庫中的數(shù)據(jù)\h例204從Access中獲取數(shù)據(jù)\h例205添加數(shù)據(jù)到Access\h例206創(chuàng)建Access數(shù)據(jù)庫\h第13章文件和文件夾操作技巧\h13.1用VB語句操作文件和文件夾\h例207顯示指定文件夾的文件\h例208判斷文件(文件夾)是否存在\h例209新建文件夾\h例210復(fù)制文件\h例211重命名文件或文件夾\h例212刪除文件\h例213查看文件屬性\h13.2用FSO操作文件和文件夾\h例214判斷文件是否存在(FSO)\h例215分離文件名和擴(kuò)展名\h例216新建和刪除文件夾(FSO)\h例217復(fù)制文件(FSO)\h例218復(fù)制文件夾(FSO)\h例219列出文件夾名稱\h例220顯示文件屬性\h例221刪除所有的空文件夾\h例222顯示驅(qū)動(dòng)器信息\h第14章文本文件操作技巧\h14.1用VB語句操作文本文件\h例223創(chuàng)建文本文件\h例224讀取文本文件數(shù)據(jù)\h例225工作表保存為文本文件\h14.2用FSO操作文本文件\h例226創(chuàng)建文本文件(FSO)\h例227添加數(shù)據(jù)到文本文件(FSO)\h例228讀取文本文件數(shù)據(jù)(FSO)\h第15章用Excel控制其他程序技巧\h15.1控制Office應(yīng)用程序\h例229打開Word文檔\h例230從Word文檔中獲取數(shù)據(jù)\h例231生成成績通知書\h例232在Excel中打開PPT\h例233在Excel中創(chuàng)建PPT\h15.2調(diào)用其他程序\h例234運(yùn)行系統(tǒng)自帶程序\h例235在Excel中打開控制面板\h第16章VBE工程實(shí)用操作技巧\h例236列出工程的所有組件\h例237顯示工作簿中VBA的過程名\h例238導(dǎo)出VBA過程代碼\h例239列出工程引用的外部庫第8章Window對象操作技巧Window對象代表一個(gè)窗口,能對窗口特性進(jìn)行設(shè)置和操作。許多工作表特征(如滾動(dòng)條和標(biāo)尺)實(shí)際上是窗口的屬性。Window對象是Windows集合的成員。在Excel中,Application對象和Workbook對象都有Windows集合,其中Application對象的Windows集合包含應(yīng)用程序中的所有窗口,而Workbook對象的Windows集合只包含指定工作簿中的窗口。8.1控制窗口通過Window對象的屬性和方法可創(chuàng)建窗口、拆分窗口、設(shè)置窗口大小、顯示比例、控制窗口顯示狀態(tài)等。例141創(chuàng)建窗口1.案例說明打開本例工作簿,單擊工作表中的“創(chuàng)建窗口”按鈕,將生成當(dāng)前工作簿的第2個(gè)窗口,窗口名稱為“例144創(chuàng)建窗口:2”,再次單擊“創(chuàng)建窗口”按鈕將創(chuàng)建第3個(gè)窗口,如圖8-1所示。圖8-1創(chuàng)建窗口2.關(guān)鍵技術(shù)(1)NewWindow方法在Excel2013中,在“視圖”選項(xiàng)卡的“窗口”組中,單擊“新建窗口”按鈕,可新建一個(gè)Excel窗口,該窗口的標(biāo)題欄名稱將顯示為“創(chuàng)建窗口:2”,在新建的窗口中將顯示活動(dòng)窗口的副本,如圖8-2所示。圖8-2第一個(gè)窗口副本在VBA代碼中,使用Window對象的NewWindow方法,可新建一個(gè)窗口或者創(chuàng)建指定窗口的副本。注意:窗口號和窗口索引(Index屬性)是兩個(gè)不同的概念,例如,名稱為“創(chuàng)建窗口:2”的窗口,其窗口號為2,而窗口索引為該窗口在Windows集合中的位置,可以是窗口名稱或編號。(2)WindowNumber屬性Window對象的WindowNumber屬性返回窗口號。例如,名稱為“創(chuàng)建窗口:2”的窗口,其窗口號為2。大多數(shù)窗口的窗口號為1。3.編寫代碼“創(chuàng)建窗口”按鈕的VBA代碼如下:

Sub創(chuàng)建窗口()

ActiveWindow.NewWindow

MsgBox"新建窗口的窗口號是:"&ActiveWindow.WindowNumber

EndSub

例142獲取窗口狀態(tài)1.案例說明打開本例工作簿,如圖8-3所示。單擊Excel應(yīng)用程序右上角的最大化按鈕后,單擊“獲取窗口狀態(tài)”按鈕,首先將彈出對話框顯示Excel應(yīng)用程序窗口的狀態(tài),接著彈出對話框顯示當(dāng)前工作簿窗口的狀態(tài),如圖8-4所示。圖8-3獲取窗口狀態(tài)圖8-4應(yīng)用程序和窗口的狀態(tài)2.關(guān)鍵技術(shù)窗口的狀態(tài)包括兩方面的意思,首先是Excel應(yīng)用程序窗口的狀態(tài),另一個(gè)是工作簿窗口的狀態(tài)。窗口狀態(tài)有三種形式,通過Window對象的WindowState屬性可返回或設(shè)置窗口的狀態(tài)。可用以下常量表示窗口的狀態(tài)。xlMaximized:最大化。xlMinimized:最小化。xlNormal:正常。3.編寫代碼“獲取窗口狀態(tài)”按鈕的VBA代碼如下:

Sub獲取窗口狀態(tài)()

Dimstr1AsString

str1="Excel應(yīng)用程序窗口的狀態(tài):"

SelectCaseApplication.WindowState

CasexlMaximized

str1=str1&"最大化。"

CasexlMinimized

str1=str1&"最小化。"

CasexlNormal

str1=str1&"正常。"

EndSelect

MsgBoxstr1

str1="當(dāng)前活動(dòng)工作簿窗口的狀態(tài):"

SelectCaseActiveWindow.WindowState

CasexlMaximized

str1=str1&"最大化。"

CasexlMinimized

str1=str1&"最小化。"

CasexlNormal

str1=str1&"正常。"

EndSelect

MsgBoxstr1

EndSub

以上代碼首先獲取Excel應(yīng)用程序窗口的狀態(tài)并顯示出來,接著獲取工作簿窗口的狀態(tài)并顯示出來。例143拆分窗格1.案例說明打開本例工作簿,如圖8-5所示。在工作表中單擊選擇一個(gè)單元格(本例中選擇B3),單擊“拆分窗格”按鈕,窗口將在該處拆分為4個(gè)窗格,如圖8-6所示。圖8-5拆分窗口圖8-6拆分后的狀態(tài)單擊“凍結(jié)窗格”按鈕,上方和左側(cè)的窗格將被凍結(jié),如圖8-7所示。圖8-7凍結(jié)窗口本例的兩個(gè)按鈕都具有開關(guān)功能,即單擊一次時(shí)拆分窗口,再次單擊時(shí)取消拆分。在未拆分窗口的狀態(tài)下,選取工作表中的某個(gè)單元格后再單擊“凍結(jié)窗格”按鈕,將在所選單元格處凍結(jié)窗格。2.關(guān)鍵技術(shù)(1)Split屬性通過Window對象的Split屬性可查詢窗口是否被拆分。如果指定窗口被拆分,則該屬性值為True。將該屬性值設(shè)置為False,可取消指定窗口的拆分狀態(tài)。(2)拆分窗口的屬性窗口可以進(jìn)行水平和垂直兩個(gè)方向上的拆分,可通過Window對象的以下兩個(gè)屬性進(jìn)行控制。SplitRow屬性:返回或設(shè)置將指定窗口拆分成窗格處的行號(拆分線以上的行數(shù))。SplitColumn屬性:返回或設(shè)置將指定窗口拆分成窗格處的列號(拆分線左側(cè)的列數(shù))。(3)FreezePanes屬性通過設(shè)置Window對象的FreezePanes屬性為True,可凍結(jié)窗格,設(shè)置其值為False,則取消凍結(jié)窗口。3.編寫代碼(1)“拆分窗格”按鈕的VBA代碼如下:

Sub拆分窗格()

DimrAsLong,cAsLong

r=ActiveCell.Row

c=ActiveCell.Column

WithActiveWindow

If.SplitThen

.Split=False

Else

.SplitRow=r-1

.SplitColumn=c-1

EndIf

EndWith

EndSub

以上代碼中,因?yàn)镾plitRow和Splitcolumn屬性是從指定行數(shù)的上方和列數(shù)的左側(cè)進(jìn)行拆分,所以需將活動(dòng)單元格的行數(shù)和列數(shù)減1。(2)“凍結(jié)窗格”按鈕的VBA代碼如下:

Sub凍結(jié)窗格()

ActiveWindow.FreezePanes=NotActiveWindow.FreezePanes

EndSub

例144并排比較窗口1.案例說明打開本例工作簿,如圖8-8所示。為了執(zhí)行并排比較功能,必須再打開一個(gè)進(jìn)行并排比較的工作簿(本例是打開例143中的文件)。單擊圖8-8所示工作表中的“并排比較窗口”按鈕,兩個(gè)打開的工作簿將排列成如圖8-9所示的形式。圖8-8主工作簿此時(shí),在任意一個(gè)工作簿窗口中移動(dòng)活動(dòng)單元格,對應(yīng)窗口將隨之滾動(dòng),使兩個(gè)窗口顯示相同行列的數(shù)據(jù),方便進(jìn)行比較。圖8-9并排比較窗口再次單擊“并排比較窗口”按鈕,可取消窗口的并排狀態(tài)。2.關(guān)鍵技術(shù)通過Windows集合的如下屬性和方法可控制兩個(gè)窗口的并排比較。CompareSideBySideWith方法:以并排模式排列兩個(gè)窗口。SyncScrollingSideBySide屬性:如果為True,在對文檔進(jìn)行并排比較的同時(shí)啟用窗口內(nèi)容的滾動(dòng)功能。若為False,則在對文檔進(jìn)行并排比較的同時(shí)禁用窗口內(nèi)容的滾動(dòng)功能。BreakSideBySide方法:結(jié)束兩個(gè)窗口的并排模式。3.編寫代碼“并排比較窗口”按鈕的VBA代碼如下:

Sub并排比較窗口()

WithWindows

If.SyncScrollingSideBySideThen

.BreakSideBySide

Else

.CompareSideBySideWith"例147拆分窗格.xls"

.SyncScrollingSideBySide=True

EndIf

EndWith

EndSub

例145排列窗口1.案例說明打開本例工作簿,如圖8-10所示,單擊“排列窗口”按鈕,程序?qū)?chuàng)建當(dāng)前窗口的一個(gè)副本,同時(shí)將這兩個(gè)窗口垂直排列在Excel工作區(qū)中,如圖8-11所示。圖8-10排列窗口圖8-11垂直排列窗口2.關(guān)鍵技術(shù)當(dāng)Excel中有多個(gè)工作簿(或多個(gè)窗口)時(shí),可使用Windows集合的Arrange方法對每個(gè)窗口進(jìn)行排列,其語法格式為:

表達(dá)式.Arrange(ArrangeStyle,ActiveWorkbook,SyncHorizontal,SyncVertical)

該方法各參數(shù)都可省略,其含義如下。ArrangeStyle:用來指定窗口排列方式,可設(shè)置為層疊(xlArrangeStyleCascade)、平鋪(xlArrangeStyleTiled)、水平排列(xlArrangeStyleHorizontal)和垂直排列(xlArrangeStyleVertical)4種方式之一。ActiveWorkbook:如果為True,則只排列活動(dòng)工作簿的可見窗口。如果為False,則排列所有的窗口。默認(rèn)值為False。ActiveWorkbook:如果為False或省略,則忽略參數(shù)SyncHorizontal。如果參數(shù)SyncHorizontal為True,則在水平滾動(dòng)時(shí)同步活動(dòng)工作簿的窗口。如果為False,則不同步窗口。默認(rèn)值為False。ActiveWorkbook:如果為False或省略,則忽略SyncVertical參數(shù)。如果SyncVertical參數(shù)為True,則在垂直滾動(dòng)時(shí)同步活動(dòng)工作簿的窗口。如果為False,則不同步窗口。默認(rèn)值為False。3.編寫代碼“排列窗口”按鈕的VBA代碼如下:

Sub排列窗口()

DimhAsLong,wAsLong

ActiveWindow.NewWindow'創(chuàng)建當(dāng)前窗口的一個(gè)副本

Windows.ArrangexlArrangeStyleTiled'平鋪窗口

h=Windows(1).Height'獲取第1個(gè)窗口的高度第8章

w=Application.UsableWidth'獲取Excel工作區(qū)可用寬度

WithWindows(1)'設(shè)置第1個(gè)窗口的寬和高

.Width=w

.Height=h/2

.Left=0

EndWith

WithWindows(2)'設(shè)置第2個(gè)窗口的寬和高

.Width=w

.Height=h/2

.Top=h/2

.Left=0

EndWith

EndSub

以上代碼首先創(chuàng)建活動(dòng)窗口的一個(gè)副本,再設(shè)置窗口集合(Windows)的排列方式為平鋪,最后根據(jù)Excel工作區(qū)的高度分別設(shè)置兩個(gè)窗口的高度。例146窗口顯示比例1.案例說明打開本例工作簿,如圖8-12所示,單擊工作表中的“窗口顯示比例”按鈕,彈出“顯示比例”對話框,如圖8-13所示。在對話框中輸入顯示比例(如150)后單擊“確定”按鈕,窗口中顯示的內(nèi)容將放大顯示,如圖8-14所示。圖8-12窗口顯示比例圖8-13輸入顯示比例圖8-14放大顯示的效果2.關(guān)鍵技術(shù)在Excel2013的狀態(tài)欄中,雙擊右下角的圖標(biāo),將打開如圖8-15所示的“顯示比例”對話框。通過該對話框,用戶可以調(diào)整表格的顯示比例,其比例以百分?jǐn)?shù)表示(100表示正常大小,200表示雙倍大小,以此類推)。圖8-15顯示比例在VBA代碼中,通過Window對象的Zoom屬性來獲取或設(shè)置窗口的顯示比例。將此屬性設(shè)為True,可將窗口大小設(shè)置成與當(dāng)前選定區(qū)域相適應(yīng)的大小。注意:本功能僅對窗口中當(dāng)前的活動(dòng)工作表起作用。若要對其他工作表使用此屬性,必須先激活工作表。3.編寫代碼“窗口顯示比例”按鈕的VBA代碼如下:

Sub窗口顯示比例()

DimsAsInteger

s=Application.InputBox(prompt:="請輸入窗口的顯示比例:"&_

vbCrLf&"(100表示正常大小,200表示雙倍大小,以此類推)。",_

Title:="顯示比例",Default:=100,Type:=1)

Ifs=0ThenExitSub

ActiveWindow.Zoom=s

EndSub

以上代碼首先要求用戶輸入顯示比例,如果在輸入對話框中單擊“取消”按鈕,則返回值為0,表示退出子過程的執(zhí)行。8.2控制工作表的顯示選項(xiàng)通過Window對象的屬性和方法不僅可以制作窗口,還可對窗口中工作表的相關(guān)顯示選項(xiàng)進(jìn)行控制,本例將演示這種使用方法。例147工作簿顯示選項(xiàng)1.案例說明打開本例工作簿,如圖8-16所示,分別單擊工作表中的三個(gè)按鈕,可隱藏或顯示水平滾動(dòng)條、垂直滾動(dòng)條和工作表標(biāo)簽,效果如圖8-17至圖8-20所示。圖8-16工作簿顯示選項(xiàng)圖8-17隱藏水平滾動(dòng)條圖8-18隱藏垂直滾動(dòng)條圖8-19隱藏工作表標(biāo)簽圖8-20隱藏滾動(dòng)條和工作表標(biāo)簽2.關(guān)鍵技術(shù)通過Window對象的以下三個(gè)屬性值可獲取或設(shè)置工作簿的顯示選項(xiàng)。DisplayHorizontalScrollBar:水平滾動(dòng)條。DisplayVerticalScrollBar:垂直滾動(dòng)條。DisplayWorkbookTabs:工作表標(biāo)簽。以上三個(gè)屬性值如果為True,則表示顯示相關(guān)的元素,如果為False,則表示隱藏相關(guān)的元素。3.編寫代碼本例三個(gè)按鈕的代碼都比較簡單,只需對相應(yīng)的屬性值取反,即可在顯示或隱藏之間進(jìn)行切換,具體代碼如下:

Sub控制水平滾動(dòng)條()

WithActiveWindow

.DisplayHorizontalScrollBar=Not.DisplayHorizontalScrollBar

EndWith

EndSub

Sub控制垂直滾動(dòng)條()

WithActiveWindow

.DisplayVerticalScrollBar=Not.DisplayVerticalScrollBar

EndWith

EndSub

Sub控制工作表標(biāo)簽()

WithActiveWindow

.DisplayWorkbookTabs=Not.DisplayWorkbookTabs

EndWith

EndSub

例148工作表顯示選項(xiàng)1.案例說明打開本例工作簿,如圖8-21所示,在該圖中單擊“行號/列標(biāo)”按鈕可顯示或隱藏工作表的行號和列標(biāo),如圖8-22所示,為隱藏行號和列標(biāo)的效果。圖8-21工作表顯示選項(xiàng)圖8-22隱藏行號/列標(biāo)單擊“公式”按鈕,可顯示公式計(jì)算結(jié)果或顯示公式的定義,如圖8-23所示。圖8-23顯示公式單擊“零值”按鈕,可顯示或隱藏工作表中的零值,如圖8-24所示。圖8-24隱藏0值2.關(guān)鍵技術(shù)通過Window對象的以下三個(gè)屬性值可獲取或設(shè)置工作表的顯示選項(xiàng)。DisplayHeadings:顯示行號/列標(biāo)。DisplayFormulas:顯示公式。DisplayZeros:顯示零值。以上三個(gè)屬性值如果為True,則表示顯示相關(guān)的元素,如果為False,則表示隱藏相關(guān)的元素。3.編寫代碼本例三個(gè)按鈕的代碼都比較簡單,只需對相應(yīng)的屬性值取反,即可在顯示或隱藏之間進(jìn)行切換,具體代碼如下:

Sub行號列標(biāo)()

WithActiveWindow

.DisplayHeadings=Not.DisplayHeadings

EndWith

EndSub

Sub公式()

WithActiveWindow

.DisplayFormulas=Not.DisplayFormulas

EndWith

EndSub

Sub零值()

WithActiveWindow

.DisplayZeros=Not.DisplayZeros

EndWith

EndSub

例149工作表網(wǎng)格線1.案例說明打開本例工作簿,如圖8-25所示,單擊工作表中的“顯示/隱藏網(wǎng)格線”按鈕,可隱藏當(dāng)前工作表的網(wǎng)格線,如圖8-26所示。再次單擊該按鈕,又可顯示工作表的網(wǎng)格線。圖8-25工作表網(wǎng)格線圖8-26隱藏網(wǎng)格線單擊“設(shè)置網(wǎng)格線顏色”按鈕,彈出“網(wǎng)格線顏色”對話框,如圖8-27所示,根據(jù)對話框中的提示輸入1~3的數(shù)字,單擊“確定”按鈕,工作表的網(wǎng)格線將設(shè)置為紅色、綠色或藍(lán)色。圖8-27設(shè)置網(wǎng)格線顏色2.關(guān)鍵技術(shù)(1)DisplayGridlines使用Window對象的DisplayGridlines屬性可設(shè)置工作表是否顯示網(wǎng)格線,如果該屬性值為True,則顯示網(wǎng)格線。提示:此屬性僅影響顯示的網(wǎng)格線,不能控制網(wǎng)格線的打印。此屬性僅適用于工作表和宏工作表。(2)網(wǎng)格線顏色網(wǎng)格線顏色可使用Window對象的以下兩個(gè)屬性進(jìn)行設(shè)置。GridlineColor屬性:以RGB值返回或設(shè)置網(wǎng)格線顏色。GridlineColorIndex屬性:返回或設(shè)置網(wǎng)格線顏色,其值為當(dāng)前調(diào)色板中的索引。3.編寫代碼(1)“顯示/隱藏網(wǎng)格線”按鈕的VBA代碼如下:

Sub顯示隱藏網(wǎng)格線()

WithActiveWindow

.DisplayGridlines=Not.DisplayGridlines

EndWith

EndSub

(2)“設(shè)置網(wǎng)格線顏色”按鈕的VBA代碼如下:

Sub設(shè)置網(wǎng)格線顏色()

DimiAsInteger,rAsInteger,gAsInteger,bAsInteger

i=Application.InputBox(prompt:="請選擇網(wǎng)格線的顏色:"&_

vbCrLf&"(1.紅色2.綠色3.藍(lán)色)",_

Title:="網(wǎng)格線顏色",Default:=1,Type:=1)

SelectCasei

Case1:r=1

Case2:g=1

Case3:b=1

EndSelect

ActiveWindow.GridlineColor=RGB(r*255,g*255,b*255)

EndSub

例150獲取指定窗口選中的信息1.案例說明打開本例工作簿,如圖8-28所示,按住“Ctrl”鍵的同時(shí)單擊三個(gè)工作表標(biāo)簽,選中多個(gè)工作表。再單擊“已選擇工作表”按鈕,將彈出如圖8-29所示的對話框,在該對話框中列出已選擇的工作表。圖8-28獲取窗口選中的信息圖8-29選擇的工作表在工作表中拖動(dòng)選擇一個(gè)單元格區(qū)域,單擊“已選擇區(qū)域”按鈕,將顯示如圖8-30所示的對話框,顯示出當(dāng)前選擇區(qū)域的地址。圖8-30選擇區(qū)域地址單擊“可見單元格”按鈕,將彈出如圖8-31所示的對話框,在對話框中顯示當(dāng)前窗口可見單元格的數(shù)量。圖8-31可見單元格數(shù)量在工作表中單擊選擇單元格B3,單擊“選擇單元格尺寸”按鈕,將彈出對話框顯示所選單元格的尺寸,如圖8-32所示。圖8-32單元格尺寸2.關(guān)鍵技術(shù)本例使用Window對象的相關(guān)屬性和方法來獲取指定窗口選中元素的信息。SelectedSheets屬性:返回一個(gè)Sheets集合,該集合表示指定窗口中所有選定的工作表。RangeSelection屬性:返回一個(gè)Range對象,該對象表示指定窗口中工作表上的選定單元格,即使工作表上一個(gè)圖形對象是活動(dòng)或選定的。VisibleRange屬性:返回一個(gè)Range對象,它代表顯示在窗口或窗格中的單元格區(qū)域。如果列或行只顯示了一部分,則說明它是包括在區(qū)域內(nèi)的。PointsToScreenPixelsX方法:將橫向度量值由以點(diǎn)為單位轉(zhuǎn)換為以屏幕像素為單位。PointsToScreenPixelsY方法:將縱向度量值由以點(diǎn)為單位轉(zhuǎn)換為以屏幕像素為單位。注意:當(dāng)工作表中已選定一個(gè)圖形對象,Selection屬性返回的是一個(gè)圖形對象,而不是一個(gè)Range對象;RangeSelection屬性將返回在圖形對象被選定之前選定的單元格區(qū)域。3.編寫代碼(1)“已選擇工作表”按鈕的VBA按鈕如下:

Sub已選擇工作表()

Dimws1AsWorksheet,str1AsString

str1="已選擇的工作表:"&vbCrLf

ForEachws1InActiveWindow.SelectedSheets

str1=str1&ws1.Name&vbCrLf

Next

MsgBoxprompt:=str1,Title:="選擇的工作表"

EndSub

(2)“已選擇區(qū)域”按鈕的VBA代碼如下:

Sub已選擇區(qū)域()

MsgBox"當(dāng)前窗口選擇區(qū)域的地址為:"&vbCrLf&ActiveWindow.RangeSelection.Address

EndSub

(3)“可見單元格”按鈕的VBA代碼如下:

Sub可見單元格()

DimcAsLong

c=ActiveWindow.VisibleRange.Cells.Count

MsgBox"當(dāng)前窗口中共有"&c&"個(gè)單元格可見!"

EndSub

(4)“選擇單元格尺寸”按鈕的VBA代碼如下:

Sub選擇單元格尺寸()

DimwAsLong,hAsLong

WithActiveWindow

w=.PointsToScreenPixelsX(.Selection.Width)

h=.PointsToScreenPixelsY(.Selection.Height)

EndWith

MsgBox"當(dāng)前窗口選中單元格的尺寸為(寬×高):"&w&"×"&h

EndSub

第9章Chart對象操作技巧在Excel中對數(shù)據(jù)進(jìn)行分析時(shí),使用圖表可直觀地查看分析結(jié)果。Excel提供了上百種圖表類型,通過VBA代碼可以控制圖表的各方面。本章的實(shí)例演示使用VBA控制圖表的方法。9.1創(chuàng)建圖表在Excel中可以快速簡便地創(chuàng)建圖表,在程序中,通過VBA代碼也可方便地創(chuàng)建圖表。在Excel中創(chuàng)建的圖表,可以嵌入到工作表中數(shù)據(jù)的旁邊,也可插入到一個(gè)新的圖表工作表中,分別稱為嵌入式圖表和圖表工作表。例151創(chuàng)建圖表工作表1.案例說明打開本例工作簿,如圖9-1所示,單擊工作表中的“成績分析圖表”按鈕,將在工作簿中插入一個(gè)名為“Chart1”的圖表工作表,并在圖表工作表中生成簇狀柱形圖,如圖9-2所示。圖9-1數(shù)據(jù)工作表圖9-2創(chuàng)建的圖表2.關(guān)鍵技術(shù)(1)Charts集合Charts集合包含工作簿中所有圖表工作表的集合。每個(gè)圖表工作表都由一個(gè)Chart對象來表示,這不包括嵌入在工作表或?qū)υ捒蚓庉嫳砩系膱D表。通過Charts集合的Add方法可向集合中添加新的圖表工作表(新建圖表工作表)。Add方法的語法格式如下:

表達(dá)式.Add(Before,After,Count,Type)

該方法的參數(shù)都可省略,各參數(shù)的含義如下。Before:指定工作表的對象,新建的工作表將置于此工作表之前。After:指定工作表的對象,新建的工作表將置于此工作表之后。Count:要添加的工作表數(shù)。默認(rèn)值為1。Type:指定要添加的圖表類型,可創(chuàng)建的圖表類型有很多,具體可參考ExcelVBA的幫助信息。提示:如果Before和After兩者都被省略,新建的圖表工作表將被插入到活動(dòng)工作表之前。(2)SetSourceData方法通過Chart對象的SetSourceData方法,可為指定圖表設(shè)置源數(shù)據(jù)區(qū)域。其語法格式如下:

表達(dá)式.SetSourceData(Source,PlotBy)

該方法的兩個(gè)參數(shù)的含義如下。Source:為一個(gè)Range對象,用來指定圖表的源數(shù)據(jù)區(qū)域。PlotBy:指定數(shù)據(jù)繪制方式,可使用常量xlColumns(數(shù)據(jù)系列在行中)和xlRows(數(shù)據(jù)系列在列中)之一。(3)ChartType屬性通過Chart對象的ChartType屬性可獲取或設(shè)置圖表類型。(4)ChartTitle對象通過Chart對象的ChartTitle屬性,可返回一個(gè)ChartTitle對象,該對象表示指定圖表的標(biāo)題。通過該對象的屬性可控制圖表的標(biāo)題,如設(shè)置標(biāo)題文本、設(shè)置標(biāo)題的格式等。注意:只有圖表的HasTitle屬性為True時(shí),ChartTitle對象才存在,從而才能使用該對象。3.編寫代碼“成績分析圖表”按鈕的VBA代碼如下:

Sub創(chuàng)建圖表()

DimchtAsChart

Setcht=Charts.Add'創(chuàng)建圖表對象

Withcht

.SetSourceDataSource:=Sheets("成績表").Range("B2:E7"),

PlotBy:=xlRows

'指定數(shù)據(jù)源

.ChartType=xlColumnClustered

.HasTitle=True'添加標(biāo)題

.ChartTitle.Text="成績分析圖"

EndWith

EndSub

例152創(chuàng)建嵌入式圖表1.案例說明打開本例工作簿,單擊“成績分析圖表”按鈕,將在當(dāng)前工作表的單元格區(qū)域“G2:L15”中生成一個(gè)嵌入式圖表,如圖9-3所示。圖9-3創(chuàng)建嵌入式圖表2.關(guān)鍵技術(shù)圖表工作表對象為Chart,而嵌入到工作表中的圖表對象為ChartObject對象。ChartObjects集合包含指定工作表上所有的ChartObject對象的集合。每個(gè)ChartObject對象都代表一個(gè)嵌入式圖表。ChartObject對象充當(dāng)Chart對象的容器。ChartObject對象的屬性和方法控制工作表上嵌入式圖表的外觀和大小。通過ChartObjects集合的Add方法,可向集合中添加嵌入式圖表。其語法格式如下:

表達(dá)式.Add(Left,Top,Width,Height)

該方法的4個(gè)參數(shù)指定嵌入式圖表的尺寸,分別設(shè)置左上角的坐標(biāo)位置和圖表的初始大小。使用ChartObjects集合的Delete方法可刪除指定工作表的嵌入式圖表。3.編寫代碼“成績分析圖表”按鈕的VBA代碼如下:

Sub創(chuàng)建嵌入式圖表()

DimchtAsChartObject

OnErrorResumeNext

ActiveSheet.ChartObjects.Delete'刪除工作表中已有的嵌入式圖表

OnErrorGoTo0

WithRange("G2:L15")

Setcht=ActiveSheet.ChartObjects.Add(_

.Left,.Top,.Width,.Height)'創(chuàng)建新的嵌入式圖表

EndWith

Withcht

.Name="Results"'設(shè)置嵌入式圖表的名稱

With.Chart

'指定數(shù)據(jù)源

.SetSourceDataSource:=Sheets("成績表").Range("B2:E7"),PlotBy:=xlRows

.ChartType=xlColumnClustered

.SetElementmsoElementChartTitleCenteredOverlay'設(shè)置圖表標(biāo)題

.ChartTitle.Text="成績分析圖"

EndWith

EndWith

EndSub

以上代碼首先刪除當(dāng)前工作表中的嵌入式圖表,如果當(dāng)前工作表中沒有嵌入式圖表,執(zhí)行Delete方法時(shí)將出現(xiàn)錯(cuò)誤,所以需使用錯(cuò)誤捕捉語句獲取錯(cuò)誤。接著使用ChartObjects集合對象的Add方法添加一個(gè)嵌入式圖表,最后設(shè)置圖表對象的相關(guān)屬性。例153轉(zhuǎn)換圖表類型1.案例說明打開本例工作簿,如圖9-4所示,在工作表中單擊“嵌入式圖表轉(zhuǎn)圖表工作表”按鈕,嵌入式圖表將轉(zhuǎn)換為圖表工作表,在工作簿中將新增加一個(gè)工作表“成績分析圖”,如圖9-5所示。同時(shí),數(shù)據(jù)工作表中的嵌入式圖表將消失,如圖9-6所示。圖9-4轉(zhuǎn)換圖表類型圖9-5圖表工作表圖9-6數(shù)據(jù)工作表在圖9-6所示的工作表中單擊“圖表工作表轉(zhuǎn)嵌入式圖表”按鈕,名稱為“成績分析圖”的圖表工作表將被刪除,其中的圖表將嵌入到當(dāng)前工作表中,效果如圖9-4所示。2.關(guān)鍵技術(shù)通過Chart對象的Location方法,可改變圖表的放置位置。該方法的語法格式如下:

表達(dá)式.Location(Where,Name)

兩個(gè)參數(shù)的含義如下。Where:用來設(shè)置圖表移動(dòng)的目標(biāo)位置??稍O(shè)置為xlLocationAsNewSheet(將圖表移動(dòng)到新工作表)、xlLocationAsObject(將圖表嵌入到現(xiàn)有工作表中)或xlLocationAutomatic(Excel控制圖表位置)三個(gè)常量之一。Name:如果Where為xlLocationAsObject,則該參數(shù)為必選參數(shù)。如果Where為xlLocationAsObject,則該參數(shù)為嵌入該圖表的工作表的名稱。如果Where為xlLocationAsNewSheet,則該參數(shù)為新工作表的名稱。3.編寫代碼(1)“嵌入式圖表轉(zhuǎn)圖表工作表”按鈕的VBA代碼如下:

Sub嵌入式圖表轉(zhuǎn)換為圖表工作表()

DimchtAsChartObject

OnErrorResumeNext

Setcht=ActiveSheet.ChartObjects(1)

IfchtIsNothingThenExitSub

cht.Chart.LocationxlLocationAsNewSheet,"成績分析圖"

EndSub

以上代碼通過工作表的ChartObjects集合返回的是一個(gè)ChartObject對象,要改變其位置,需使用該對象的Chart屬性返回一個(gè)Chart對象,通過Chart對象的Location方法才能改變圖表對象的位置。(2)“圖表工作表轉(zhuǎn)嵌入式圖表”按鈕的VBA代碼如下:

Sub圖表工作表轉(zhuǎn)為嵌入式圖表()

DimchtAsChart,chtoAsChartObject

OnErrorResumeNext

Setcht=Charts("成績分析圖")

IfchtIsNothingThenExitSub

cht.LocationxlLocationAsObject,ActiveSheet.Name

Setchto=ActiveSheet.ChartObjects(1)

WithRange("G2:L15")

chto.Top=.Top

chto.Left=.Left

chto.Width=.Width

chto.Height=.Height

EndWith

EndSub

以上代碼中,首先獲取圖表工作表的引用,再通過Location方法改變其位置。將圖表工作表改為嵌入式圖表后,嵌入式圖表將使用默認(rèn)的位置。為了不使嵌入式圖表遮掩數(shù)據(jù),程序最后修改了嵌入式圖表的位置。例154刪除圖表1.案例說明打開本例工作簿,如圖9-7所示,在當(dāng)前工作表中有三個(gè)嵌入的圖表,單擊“刪除圖表”按鈕,三個(gè)圖表中的一個(gè)將被顯示在最前面,并彈出對話框詢問用戶是否刪除該圖表,如圖9-8所示。在對話框中單擊“是”按鈕,將刪除顯示在最前面的圖表,單擊“否”按鈕,該圖表不被刪除。圖9-7刪除圖表圖9-8將圖表顯示在前面程序循環(huán)將三個(gè)圖表顯示在最前面,讓用戶決定是否刪除。2.關(guān)鍵技術(shù)本例使用了ChartObject對象的三個(gè)方法來完成相應(yīng)的功能,各方法的含義如下。BringToFront:將圖表放到Z-次序前面,即將圖表顯示在最前面。Activate:使當(dāng)前圖表成為活動(dòng)圖表(激活圖表)。Delete:刪除圖表。3.編寫代碼“刪除圖表”按鈕的VBA代碼如下:

Sub刪除圖表()

DimchtoAsChartObject

ForEachchtoInActiveSheet.ChartObjects

chto.BringToFront

chto.Activate

IfMsgBox("刪除激活的嵌入式圖表?",vbQuestion+vbYesNo,"刪除圖表")=vbYesThen

chto.Delete

EndIf

Next

EndSub

9.2控制圖表對象創(chuàng)建圖表后,還可以使用VBA代碼控制圖表,如修改圖表的數(shù)據(jù)源、圖表的類型,以及對圖表內(nèi)部的子對象進(jìn)行格式化等操作。本節(jié)實(shí)例將演示這些方法。例155判斷工作表的類型1.案例說明打開本例工作簿,如圖9-9所示,單擊“工作表類型”按鈕,將顯示“工作表類型”對話框,如圖9-10所示。在對話框中顯示了當(dāng)前工作簿各工作表的類型。圖9-9判斷工作表類型圖9-10工作表類型2.關(guān)鍵技術(shù)本例使用TypeName函數(shù)判斷工作表的類型,該函數(shù)的語法格式如下:

TypeName(varname)

參數(shù)varname包含用戶定義類型變量之外的任何變量。TypeName函數(shù)的返回值為一個(gè)字符串,該字符串可能是數(shù)據(jù)類型名稱,或者是對象名稱。例如,在本例中,圖表工作表的返回值為“Chart”,普通工作表的返回值為“Worksheet”。提示:如果varname是一個(gè)數(shù)組,則返回的字符串可以是添加了空括號的字符串(或Variant)。例如,如果varname是一個(gè)整數(shù)數(shù)組,則TypeName返回"Integer()"。3.編寫代碼“工作表類型”按鈕的VBA代碼如下:

Sub判斷工作表類型()

DimiAsInteger,str1AsString

Fori=1ToActiveWorkbook.Sheets.Count

str1=str1&vbCrLf&vbCrLf&"工作表名稱:"&Sheets(i).Name&vbTab&_

"工作表類型:"&TypeName(Sheets(i))

Next

MsgBoxstr1,,"工作表類型"

EndSub

例156重排嵌入式圖表1.案例說明打開本例工作簿,如圖9-11所示,在當(dāng)前工作表中有三個(gè)重疊的嵌入式圖表,單擊選擇一個(gè)圖表后,再單擊“重排圖表”按鈕,三個(gè)圖表將按選中的圖表大小逐個(gè)水平排列在工作表中,如圖9-12所示。圖9-11重排圖表圖9-12圖表重排后的效果2.關(guān)鍵技術(shù)(1)控制嵌入式圖表的大小對于Chart對象,沒有設(shè)置對象大小的相關(guān)屬性。若要改變嵌入式圖表的大小,需要獲取嵌入式圖表對象ChartObject。通過設(shè)置該對象的左上角坐標(biāo),以及設(shè)置其高度和寬度,可實(shí)現(xiàn)本例的要求。(2)ActiveChart屬性Application和Window對象都提供ActiveChart屬性,通過該屬性可返回一個(gè)Chart對象,它代表活動(dòng)圖表(嵌入式圖表或圖表工作表)。嵌入式圖表在被選中或激活時(shí)被認(rèn)為是活動(dòng)的。當(dāng)沒有圖表處于活動(dòng)狀態(tài)時(shí),此屬性返回Nothing。在本例中,使用以下語句獲得活動(dòng)圖表所在的ChartObject對象。

Setchto=ActiveChart.Parent

3.編寫代碼“重排圖表”按鈕的VBA代碼如下:

Sub重排圖表()

DimchtoAsChartObject

DimwAsLong,hAsLong,tAsLong,lAsLong

IfActiveChartIsNothingThen

MsgBox"請先單擊選擇一個(gè)圖表作為基準(zhǔn)!"

ExitSub

EndIf

Setchto=ActiveChart.Parent

w=chto.Width

h=chto.Height

l=chto.Left

t=chto.Top

ForEachchtoInActiveSheet.ChartObjects

chto.Left=l

chto.Top=t

chto.Width=w

chto.Height=h

l=l+w

Next

EndSub

以上代碼中,首先獲取當(dāng)前活動(dòng)圖表的左上角位置和圖表的大小,再對當(dāng)前工作表中的嵌入式圖表進(jìn)行循環(huán)處理,逐一調(diào)整其大小和位置,使各圖表等高等寬,并依次水平排列。例157調(diào)整圖表的數(shù)據(jù)源1.案例說明打開本例工作簿,如圖9-13所示,單擊選中嵌入式圖表,再單擊“調(diào)整圖表數(shù)據(jù)源”按鈕,彈出“輸入”對話框,如圖9-14所示。在該對話框中可輸入新數(shù)據(jù)源區(qū)域的地址,也可用鼠標(biāo)在工作表中拖動(dòng)選取一片單元格區(qū)域,該區(qū)域的地址將自動(dòng)填充到“輸入”對話框中。圖9-13調(diào)整數(shù)據(jù)源圖9-14選擇數(shù)據(jù)區(qū)域輸入或拖動(dòng)選擇單元格區(qū)域后,單擊“輸入”對話框中的“確定”按鈕,選中圖表的數(shù)據(jù)源將改變,從而更新圖表顯示的內(nèi)容,如圖9-15所示。圖9-15調(diào)整數(shù)據(jù)源后的圖表2.關(guān)鍵技術(shù)(1)InputBox方法在本書前面章節(jié)的實(shí)例中,反復(fù)使用到了Application對象的InputBox方法,該方法顯示一個(gè)接收用戶輸入的對話框,并返回對話框中用戶輸入的信息。InputBox方法可設(shè)置接收數(shù)據(jù)的類型,設(shè)置參數(shù)Type為1,表示輸入的是數(shù)字。在本例中,設(shè)置參數(shù)Type為8,此時(shí)輸入對話框?qū)延脩糨斎氲淖址鳛閱卧駞^(qū)域的地址,在這種模式下,用戶還可直接在工作表中拖動(dòng)鼠標(biāo)選取相應(yīng)的單元格區(qū)域,對話框中將自動(dòng)填充相應(yīng)的單元格地址。(2)SetSourceData方法使用Chart對象的SetSourceData方法,可為指定的圖表設(shè)置源數(shù)據(jù)區(qū)域。該方法的語法格式如下:

表達(dá)式.SetSourceData(Source,PlotBy)

兩個(gè)參數(shù)的含義如下。Sourceo指定源數(shù)據(jù)區(qū)域的Range對象。PlotBy設(shè)置數(shù)據(jù)繪制方式,可為常量xlColumns(數(shù)據(jù)系列在行中)或xlRows(數(shù)據(jù)系列在列中)之一。3.編寫代碼“調(diào)整圖表數(shù)據(jù)源”按鈕的VBA代碼如下:

Sub調(diào)整圖表數(shù)據(jù)源()

DimmyCellAsRange

IfActiveChartIsNothingThen

MsgBox"請選擇需要調(diào)整數(shù)據(jù)源的圖表!"

ExitSub

EndIf

'選擇需要制作圖表的區(qū)域

SetmyCell=Application.InputBox(prompt:="請選擇調(diào)整的數(shù)據(jù)源區(qū)域。",Type:=8)

ActiveChart.SetSourceDataSource:=myCell

EndSub

以上代碼首先判斷用戶是否選中圖表,接著彈出對話框讓用戶輸入或選擇新的數(shù)據(jù)源區(qū)域,最后使用SetSourceData方法為圖表設(shè)置新的數(shù)據(jù)源。例158為圖表添加陰影1.案例說明打開本例工作簿,如圖9-16所示,單擊工作表中的“為圖表添加陰影”按鈕,右側(cè)的嵌入式圖表外部和圖表中的繪制區(qū)域?qū)@示陰影,使圖表具有立體感,如圖9-17所示。圖9-16無陰影圖表圖9-17有陰影圖表單擊“取消圖表陰影”按鈕,可取消圖表外部及繪圖區(qū)域的陰影。2.關(guān)鍵技術(shù)(1)獲取對圖表子對象的引用圖表對象又包含許多子對象,通過這些子對象可訪問或設(shè)置圖表相關(guān)元素的格式。如本例中設(shè)置陰影就使用了多個(gè)子對象,各子對象的作用如下。ShadowFormat對象:代表形狀的陰影格式,通過該對象的相應(yīng)屬性可設(shè)置陰影的效果。ChartFormat對象:提供對圖表元素藝術(shù)字格式的訪問。ChartArea對象:代表圖表的圖表區(qū)。PlotArea對象:代表圖表的繪圖區(qū)。知道以上各子對象的作用后,理解以下代碼就比較容易了:

ActiveChart.ChartArea.Format.Shadow

以上代碼引用了多個(gè)子對象,從左到右的引用過程如下。ActiveChart:引用當(dāng)前活動(dòng)圖表。ActiveChart.ChartArea:通過Chart對象的ChartArea屬性,獲取對ChartArea對象的引用。ActiveChart.ChartArea.Format:通過ChartArea對象的Format屬性,獲取對ChartFormat對象的引用。ActiveChart.ChartArea.Format.Shadow:通過ChartFormat對象的Shadow屬性,獲取對ShadowFormat對象的引用。(2)設(shè)置陰影效果通過上面的語句獲取對ShadowFormat對象的引用后,通過該對象的屬性就可控制圖表對象的陰影效果。本例使用了以下屬性設(shè)置陰影效果。Visible屬性:設(shè)置陰影是否可見。Blur屬性:返回或設(shè)置指定底紋的模糊度。Transparency屬性:返回或設(shè)置指定填充的透明度,取值范圍為0.0(不透明)到1.0(清晰)之間。OffsetX屬性:以磅為單位返回或設(shè)置指定形狀的陰影的水平偏移量。正偏移值將陰影向右偏移,負(fù)偏移值將陰影向左偏移。OffsetY屬性:以磅為單位返回或設(shè)置指定形狀陰影的垂直偏移量。正偏移值將陰影向下偏移,負(fù)偏移值將陰影向上偏移。3.編寫代碼(1)“為圖表添加陰影”按鈕的VBA代碼如下:

Sub為圖表添加陰影()

IfActiveChartIsNothingThen

MsgBox"請選擇需要設(shè)置格式的圖表!"

ExitSub

EndIf

WithActiveChart.ChartArea.Format.Shadow

.Visible=msoTrue

.Blur=15

.Transparency=0.3

.OffsetX=5

.OffsetY=5

EndWith

WithActiveChart.PlotArea.Format.Shadow

.Visible=msoTrue

.Blur=5

.Transparency=0.4

.OffsetX=2

.OffsetY=2

EndWith

EndSub

以上代碼首先檢查是否選中了圖表,接著設(shè)置圖表外部區(qū)域的陰影效果,最后設(shè)置圖表中繪制區(qū)域的陰影效果。(2)“取消圖表陰影”按鈕的VBA代碼如下:

Sub取消圖表陰影()

IfActiveChartIsNothingThen

MsgBox"請選擇需要設(shè)置格式的圖表!"

ExitSub

EndIf

ActiveChart.ChartArea.Shadow=False

ActiveChart.PlotArea.Format.Shadow.Visible=msoFalse

EndSub

例159顯示數(shù)據(jù)標(biāo)簽1.案例說明打開本例工作簿,如圖9-18所示,單擊“顯示標(biāo)簽”按鈕,各柱狀圖上方將顯示具體的數(shù)字標(biāo)簽,如圖9-19所示。單擊“隱藏標(biāo)簽”按鈕,各柱狀圖上方顯示的數(shù)字標(biāo)簽將隱藏,如圖9-18所示。圖9-18未顯示標(biāo)簽圖9-19顯示標(biāo)簽2.關(guān)鍵技術(shù)(1)SeriesCollection集合對象該集合對象包含指定的圖表或圖表組中所有Series對象的集合??捎肅hart對象的SeriesCollection方法返回SeriesCollection集合。(2)Series對象該對象代表圖表上的系列,是SeriesCollection集合的成員。使用該對象的屬性和方法可控制圖表中的每個(gè)系列。如本例使用了以下方法和屬性。ApplyDataLabels方法:向系列應(yīng)用數(shù)據(jù)標(biāo)簽。Points方法:返回一個(gè)對象,該對象表示數(shù)據(jù)系列中單個(gè)數(shù)據(jù)點(diǎn)(Point對象)或所有數(shù)據(jù)點(diǎn)的集合(Points集合)。HasDataLabels屬性:如果數(shù)據(jù)系列具有數(shù)據(jù)標(biāo)簽,則該屬性值為True。(3)Point對象Point對象代表圖表系列中的單個(gè)數(shù)據(jù)點(diǎn)。通過該對象可控制圖表中數(shù)據(jù)系列的每一個(gè)數(shù)據(jù)點(diǎn),如本例使用DataLabel設(shè)置數(shù)據(jù)點(diǎn)的標(biāo)簽的顯示內(nèi)容。3.編寫代碼(1)“顯示標(biāo)簽”按鈕的VBA代碼如下:

Sub顯示標(biāo)簽()

DimiAsInteger,nAsInteger,serAsSeries

IfActiveChartIsNothingThen

MsgBox"請選擇需要設(shè)置格式的圖表!"

ExitSub

EndIf

ForEachserInActiveChart.SeriesCollection

ser.ApplyDataLabelsType:=xlDataLabelsShowValue,_

AutoText:=True,LegendKey:=False

n=ser.Points.Count

Fori=1Ton

ser.Points(i).DataLabel.Text=ser.Values(i)

Next

Next

EndSub

以上代碼通過一個(gè)循環(huán)嵌套,對圖表中的系列逐個(gè)進(jìn)行處理。每個(gè)系列都有多個(gè)數(shù)據(jù)點(diǎn),內(nèi)循環(huán)完成顯示數(shù)據(jù)的操作。(2)“隱藏標(biāo)簽”按鈕的VBA代碼如下:

Sub隱藏標(biāo)簽()

IfActiveChartIsNothingThen

MsgBox"請選擇需要設(shè)置格式的圖表!"

ExitSub

EndIf

ForEachserInActiveChart.SeriesCollection

ser.HasDataLabels=False

Next

EndSub

例160將圖表保存為圖片1.案例說明打開本例工作簿,如圖9-20所示,單擊選中工作表中的圖表,再單擊左側(cè)的“生成圖片”按鈕,將在當(dāng)前工作表中(單元格I1)插入一個(gè)圖片,該圖片顯示的內(nèi)容與圖表的內(nèi)容相同。圖9-20圖表保存為圖片2.關(guān)鍵技術(shù)使用ChartObjects對象的CopyPicture方法,可將選中的圖表作為圖片復(fù)制到剪貼板。該方法的語法格式如下:

表達(dá)式.CopyPicture(Appearance,Format)

參數(shù)Appearance用于設(shè)置圖片的復(fù)制方式,可設(shè)置為以下兩個(gè)常量之一。xlScreen:圖片盡可能按其屏幕顯示進(jìn)行復(fù)制,這是默認(rèn)值。xlPrinter:圖片按其打印效果進(jìn)行復(fù)制。參數(shù)Format設(shè)置圖片的格式,可設(shè)置為以下兩個(gè)常量之一。xlBitmap:位圖(.bmp、.jpg、.gif)。xlPicture:繪制圖片(.png、.wmf、.mix)。3.編寫代碼“生成圖片”按鈕的VBA代碼如下:

Sub保存為圖片()

IfActiveChartIsNothingThen

MsgBox"請選擇需要設(shè)置格式的圖表!"

ExitSub

EndIf

ActiveChart.CopyPictureAppearance:=xlScreen,Format:=xlBitmap

ActiveWindow.Visible=False

Range("I1").Select

ActiveSheet.Paste

EndSub

例161設(shè)置圖表顏色1.案例說明打開本例工作簿,如圖9-21所示,單擊選中工作表中的圖表,再單擊“設(shè)置圖表顏色”按鈕,圖表各子對象的顏色將使用隨機(jī)顏色填充,如圖9-22所示。因?yàn)槭褂玫氖请S機(jī)顏色,因此每次單擊“設(shè)置圖表顏色”按鈕時(shí),圖表各子對象的填充顏色都不相同。圖9-21默認(rèn)顏色圖9-22使用隨機(jī)色2.關(guān)鍵技術(shù)本例通過圖表的相關(guān)屬性獲取對各子對象的引用,然后逐個(gè)設(shè)置子對象的填充顏色。本例使用的子對象如下。ChartArea:圖表區(qū)域。PlotArea:繪圖區(qū)。Legend:圖例。ChartTitle:圖表標(biāo)題。Axes(xlValue):數(shù)值軸。Axes(xlCategory):分類軸。SeriesCollection:序列。3.編寫代碼(1)“設(shè)置圖表顏色”按鈕的VBA代碼如下:

Sub設(shè)置圖表顏色()

DimiAsInteger

IfActiveChartIsNothingThen

MsgBox"請選擇需要設(shè)置格式的圖表!"

ExitSub

EndIf

WithActiveChart

.ChartArea.Format.Fill.ForeColor.RGB=F_Color'圖表區(qū)域

.PlotArea.Format.Fill.ForeColor.RGB=F_Color'繪圖區(qū)

.Legend.Font.Color=F_Color'圖例

.ChartTitle.Font.Color=F_Color'圖表標(biāo)題

.Axes(xlValue).MajorGridlines.Border.Color=F_Color'數(shù)值軸網(wǎng)格線

.Axes(xlValue).TickLabels.Font.Color=F_Color'數(shù)值軸刻度

.Axes(xlValue).Border.Color=F_Color'數(shù)值軸線

.Axes(xlCategory).TickLabels.Font.Color=F_Color'分類軸刻度

.Axes(xlCategory).Border.Color=F_Color'分類軸線

Fori=1To.SeriesCollection.Count

.SeriesCollection(i).Format.Fill.ForeColor.RGB=F_Color'序列

Next

EndWith

EndSub

(2)以上過程調(diào)用了自定義函數(shù)F_Color來獲取一個(gè)隨機(jī)顏色,該函數(shù)的VBA代碼如下:

FunctionF_Color()

DimrAsInteger,gAsInteger,bAsInteger

Randomize

r=Int(255*Rnd+1)

g=Int(255*Rnd+1)

b=Int(255*Rnd+1)

F_Color=RGB(r,g,b)

EndFunction

例162按值顯示顏色1.案例說明打開本例工作簿,如圖9-23所示,單擊選中圖表,再單擊“按值著色”按鈕,圖表將根據(jù)每個(gè)數(shù)據(jù)點(diǎn)的值顯示顏色。圖9-23按值顯示顏色2.關(guān)鍵技術(shù)本例通過Interior對象獲取每個(gè)數(shù)據(jù)點(diǎn)對象(Point)的對象內(nèi)部,再通過Interior對象的屬性ColorIndex設(shè)置每個(gè)數(shù)據(jù)點(diǎn)的填充顏色。3.編寫代碼“按值著色”按鈕的VBA代碼如下:

Sub按值著色()

DimSerAsSeries,iTempAsInteger

DimiAsLong,lColorAsLong

IfActiveChartIsNothingThen

MsgBox"請選擇需要設(shè)置格式的圖表!"

ExitSub

EndIf

ForEachSerInActiveChart.SeriesCollection

Fori=1ToSer.Points.Count

Ser.Points(i).Interior.ColorIndex=xlNone

iTemp=Ser.Values(i)

SelectCaseiTemp

CaseIs<60

lColor=RGB(iTemp*1.5,iTemp*0.5,iTemp*0.5)

CaseIs>=90

lColor=RGB(iTemp*0.5,iTemp*1.5,iTemp*0.5)

CaseElse

lColor=RGB(iTemp*0.5,iTemp*0.5,iTemp*1.5)

EndSelect

Ser.Points(i).Interior.Color=lColor

Nexti

NextSer

EndSub

以上代碼根據(jù)每個(gè)序列不同數(shù)據(jù)點(diǎn)的值生成一個(gè)顏色值,再將該值賦值給每個(gè)數(shù)據(jù)點(diǎn)作為顏色值。9.3圖表事件圖表作為一種對象,也支持事件驅(qū)動(dòng)。例如,激活圖表時(shí),就會觸發(fā)Activate事件,圖表接收到新的數(shù)據(jù)后,就會觸發(fā)Calculate事件。對這些事件過程編寫代碼,即可完成事件驅(qū)動(dòng)過程。圖表工作表的事件與嵌入式圖表的事件類似,但嵌入式圖表的事件驅(qū)動(dòng)需要編寫一個(gè)類模塊來完成。本節(jié)介紹這些事件過程的編寫方法。例163激活圖表工作表1.案例說明打開本例工作簿,單擊圖表工作表“Chart1”,將彈出如圖9-24所示的對話框。如果打開工作簿就顯示圖表工作表“Chart1”,這時(shí)需要單擊其他工作表標(biāo)簽轉(zhuǎn)換到其他工作表,然后單擊圖表工作表“Chart1”,將顯示如圖9-24所示的對話框。2.關(guān)鍵技術(shù)與激活工作表相同,當(dāng)激活圖表工作表時(shí)將產(chǎn)生Activate事件,有關(guān)該事件的描述,參見工作表事件中的相關(guān)內(nèi)容。圖9-24激活圖表工作表3.編寫代碼本例在圖表工作表的Activate事件過程中編寫以下代碼:

PrivateSubChart_Activate()

Dimstr1AsString

str1=Application.UserName&":你好!"&vbCrLf&vbCrLf

str1=str1&"

溫馨提示

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

最新文檔

評論

0/150

提交評論