版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
ExcelVBA編程實(shí)例(150例)主要內(nèi)容和特點(diǎn)
《ExcelVBA編程入門范例》主要是以一些基礎(chǔ)而簡(jiǎn)短的VBA實(shí)例來(lái)對(duì)ExcelVBA中的常用對(duì)象及其屬性和方法進(jìn)行講解,包括應(yīng)用程序?qū)ο蟆⒋翱凇⒐ぷ鞑?、工作表、單元格和單元格區(qū)域、圖表、數(shù)據(jù)透視表、形狀、控件、菜單和工具欄、幫助助手、格式化操作、文件操作、以及常用方法和函數(shù)及技巧等方面的應(yīng)用。這些例子都比較基礎(chǔ),很容易理解,因而,很容易調(diào)試并得以實(shí)現(xiàn),讓您通過(guò)具體的實(shí)例來(lái)熟悉ExcelVBA編程。
■分16章共14個(gè)專題,以具體實(shí)例來(lái)對(duì)大多數(shù)常用的ExcelVBA對(duì)象進(jìn)行講解;
■一般而言,每個(gè)實(shí)例都很簡(jiǎn)短,用來(lái)說(shuō)明使用VBA實(shí)現(xiàn)Excel某一功能的操作;
■各章內(nèi)容主要是實(shí)例,即VBA代碼,配以簡(jiǎn)短的說(shuō)明,有些例子可能配以必要的圖片,以便于理解;
■您可以對(duì)這些實(shí)例進(jìn)行擴(kuò)充或組合,以實(shí)現(xiàn)您想要的功能或更復(fù)雜的操作。VBE編輯器及VBA代碼輸入和調(diào)試的基本知識(shí)
在學(xué)習(xí)這些實(shí)例的過(guò)程中,最好自已動(dòng)手將它們輸入到VBE編輯器中調(diào)試運(yùn)行,來(lái)查看它們的結(jié)果。當(dāng)然,您可以偷賴,將它們復(fù)制/粘貼到代碼編輯窗口后,進(jìn)行調(diào)試運(yùn)行。下面,對(duì)VBE編輯器界面進(jìn)行介紹,并對(duì)VBA代碼輸入和調(diào)試的基本知識(shí)進(jìn)行簡(jiǎn)單的講解。
激活VBE編輯器
一般可以使用以下三種方式來(lái)打開(kāi)VBE編輯器:
■使用工作表菜單“工具——宏——VisualBasic編輯器”命令,如圖00-01所示;
■在VisualBasic工具欄上,按“VisualBasic編輯器”按鈕,如圖00-02所示;
■按Alt+F11組合鍵。
圖00-01:選擇菜單“工具——宏——VisualBasic編輯器”命令來(lái)打開(kāi)VBE編輯器
圖00-02:選擇VisualBasic工具欄上的“VisualBasic編輯器”命令按鈕來(lái)打開(kāi)VBE編輯器
此外,您也可以使用下面三種方式打開(kāi)VBE編輯器:
■在任一工作表標(biāo)簽上單擊鼠標(biāo)右鍵,在彈出的菜單中選擇“查看代碼”,則可進(jìn)入VBE編輯器訪問(wèn)該工作表的代碼模塊,如圖00-03所示;
■在工作簿窗口左上角的Excel圖標(biāo)上單擊鼠標(biāo)右鍵,在彈出的菜單中選擇“查看代碼”,則可進(jìn)入VBE編輯器訪問(wèn)活動(dòng)工作簿的ThisWorkbook代碼模塊,如圖00-04所示;
■選擇菜單“工具——宏——宏”命令打開(kāi)宏對(duì)話框,若該工作簿中有宏程序,則單擊該對(duì)話框中的“編輯”按鈕即可進(jìn)行VBE編輯器代碼模塊,如圖00-05所示。
圖00-03:右擊工作表標(biāo)簽彈出菜單并選擇“查看代碼”打開(kāi)VBE編輯器
圖00-04:右擊Excel圖標(biāo)彈出菜單并選擇“查看代碼”打開(kāi)VBE編輯器
圖00-05:在宏對(duì)話框中單擊“編輯”按鈕打開(kāi)VBE編輯器
VBE編輯器窗口簡(jiǎn)介
剛打開(kāi)VBE編輯器時(shí),所顯示的窗口如圖00-06所示,其中沒(méi)有代碼模塊窗口。
圖00-06:剛打開(kāi)VBE編輯器時(shí)的窗口
可以在“工程資源管理器”中雙擊任一對(duì)象打開(kāi)代碼窗口,或者選擇菜單“插入——模塊”或“插入——類模塊”來(lái)打開(kāi)代碼窗口。一般VBE編輯器窗口及各組成部件名稱如圖00-07所示,可以通過(guò)“視圖”菜單中的菜單項(xiàng)選擇所出現(xiàn)的窗口。同時(shí),可以在“工程屬性”窗口中設(shè)置或修改相應(yīng)對(duì)象的屬性。
圖00-07:VBE編輯器窗口
下面是帶有用戶窗體的VBE編輯器窗口,如圖00-08所示。選擇VBE菜單“插入——用戶窗體”,即可插入一個(gè)用戶窗體。當(dāng)插入用戶窗體后,在“工程資源管理器”窗口中會(huì)出現(xiàn)一個(gè)用戶窗體對(duì)象,“工程屬性”窗口顯示當(dāng)前用戶窗體的屬性,可對(duì)相關(guān)屬性進(jìn)行設(shè)置或修改。同時(shí),在用戶窗體上用鼠標(biāo)單擊,會(huì)出現(xiàn)“控件工具箱”。在“工程資源管理器”窗口雙擊用戶窗體圖標(biāo),會(huì)出現(xiàn)相應(yīng)的用戶窗體;在用戶窗體圖標(biāo)或者是在用戶窗體上單擊鼠標(biāo)右鍵,然后在彈出的菜單中選擇“查看代碼”,則會(huì)出現(xiàn)用戶窗體代碼窗口。
圖00-08:VBE編輯器窗口(帶有用戶窗體)
在VBE編輯器中輸入VBA代碼
如前所述,您可以選擇VBE菜單“插入——用戶窗體/模塊/類模塊”來(lái)插入模塊或用戶窗體以及相應(yīng)的代碼窗口。此外,您也可以在“工程資源管理器”中單擊鼠標(biāo)右鍵,從彈出的菜單中選擇“插入——用戶窗體/模塊/類模塊”來(lái)實(shí)現(xiàn)上面的操作。在獲取相應(yīng)的代碼模塊窗口后,就可以輸入VBA代碼了。
在VBE編輯器的代碼模塊中輸入VBA代碼,通常有以下幾種方法:
■手工鍵盤輸入;
■使用宏錄制器,即選擇菜單“工具——宏——錄制新宏”命令,將所進(jìn)行的操作自動(dòng)錄制成宏代碼;
■復(fù)制/粘貼代碼,即將現(xiàn)有的代碼復(fù)制后,粘貼到相應(yīng)的代碼模塊中;
■導(dǎo)入代碼模塊,即在VBE編輯器中選擇菜單“文件——導(dǎo)入文件”或在“工程資源管理器”的任一對(duì)象上右擊鼠標(biāo)選擇菜單“導(dǎo)入文件”,選擇相應(yīng)的代碼文件導(dǎo)入。
如果不想要某個(gè)模塊了,可以選擇菜單“文件——移除模塊”,也可以在相應(yīng)的模塊上單擊鼠標(biāo)右鍵,從彈出的菜單中選擇“移除模塊”。此時(shí),會(huì)彈出一個(gè)警告框,詢問(wèn)在移除模塊前是否將其導(dǎo)出,可以根據(jù)需要進(jìn)行選擇。
也可以選擇菜單“文件——導(dǎo)出文件”或在相應(yīng)的模塊上單擊鼠標(biāo)右鍵后,從彈出的菜單中選擇“導(dǎo)出文件”,將移除的模塊保存在相應(yīng)的文件夾中。這樣,以后可以對(duì)其進(jìn)行導(dǎo)入,從而加以利用。
調(diào)試VBA代碼
在VBE編輯器的菜單中,有兩項(xiàng)與調(diào)試運(yùn)行有關(guān)的菜單項(xiàng),即“調(diào)試”菜單和“運(yùn)行”菜單,它們提供了各種調(diào)試和運(yùn)行的手段。在我現(xiàn)階段進(jìn)行代碼調(diào)試時(shí),常用到的有以下幾個(gè):
■逐語(yǔ)句??梢园碏8鍵對(duì)代碼按順序一條一條語(yǔ)句運(yùn)行,從而找出語(yǔ)句或邏輯錯(cuò)誤。
■設(shè)置斷點(diǎn)。在可能存在問(wèn)題的語(yǔ)句處設(shè)置斷點(diǎn)(可通過(guò)在相應(yīng)代碼前的空白部位單擊,將會(huì)出現(xiàn)一個(gè)深紅色的橢圓即斷點(diǎn)),當(dāng)程序運(yùn)行至斷點(diǎn)處時(shí),會(huì)中止運(yùn)行。
■在語(yǔ)句的適當(dāng)部位設(shè)置Debug.Print語(yǔ)句,運(yùn)行后其結(jié)果會(huì)顯示在“立即窗口”中,可以此測(cè)試或跟蹤變量的值。
■在“立即窗口”中測(cè)試。對(duì)值的測(cè)試或跟蹤,也可以以“?”開(kāi)頭,在“立即窗口”中輸入需要測(cè)試值的語(yǔ)句,按Enter回車鍵后將立即出現(xiàn)結(jié)果;對(duì)執(zhí)行語(yǔ)句的測(cè)試,可直接在“立即窗口”中輸入,按Enter回車鍵后將執(zhí)行。
■可以按F5鍵直接運(yùn)行光標(biāo)所在位置的子程序。
在執(zhí)行程序后,必須在Excel工作表中查看所得到的結(jié)果??梢杂檬髽?biāo)單擊VBE編輯器左上角的Excel圖標(biāo)或者是按Alt+F11組合鍵切換到Excel界面。
(當(dāng)然,對(duì)程序代碼的調(diào)試有很多方法和技巧,留待以后對(duì)VBA進(jìn)一步研究和理解更透徹后一并討論。)
利用VBA幫助系統(tǒng)
如果遇到疑問(wèn)或錯(cuò)誤,可以利用Excel自帶的VBA幫助系統(tǒng)。
■可以在如圖00-09所示的部位輸入需要幫助的關(guān)鍵詞,按Enter回車鍵后將會(huì)出現(xiàn)相關(guān)主題。用鼠標(biāo)單擊相應(yīng)的主題即會(huì)出現(xiàn)詳細(xì)的幫助信息。
圖00-09:幫助搜索窗口
■可以按F2鍵,調(diào)出“對(duì)象瀏覽器”窗口(如圖00-10所示),在搜索文本框中輸入需要幫助的關(guān)鍵詞,將會(huì)在“搜索結(jié)果”中出現(xiàn)一系列相關(guān)的對(duì)象及方法、屬性列表,單擊相應(yīng)的對(duì)象則會(huì)在“類”和“成員”列表框中顯示相應(yīng)的對(duì)象和方法、屬性成員列表,在成員列表中相應(yīng)的項(xiàng)目上按F1鍵即會(huì)出現(xiàn)詳細(xì)的幫助信息。(“對(duì)象瀏覽器”是一個(gè)很好的幫助工具,值得好好研究)
圖00-10:對(duì)象瀏覽器窗口參考資料
《ExcelVBA編程入門范例》參考或引用了以下書(shū)籍和資料:
(1)Excel2003高級(jí)VBA編程寶典
(2)Excel2003與VBA編程從入門到精通(中文版)
(3)巧學(xué)巧用Excel2003VBA與宏(中文版)
(4)ExcelVBA應(yīng)用程序?qū)I(yè)設(shè)計(jì)實(shí)用指南
(5)ExcelVBA應(yīng)用開(kāi)發(fā)與實(shí)例精講
(6)一些網(wǎng)上資源更多的信息
關(guān)于ExcelVBA的更多參考和學(xué)習(xí)資源,可以在上查找,有疑問(wèn)也可以在ExcelHome論壇中提問(wèn)。您也可以登錄我的博客,上面有很多Excel的學(xué)習(xí)資料。同時(shí),歡迎與我聯(lián)系交流,我的e-mail是:?!皩W(xué)習(xí)Excel,使用VBA對(duì)Excel進(jìn)行控制操作是我很熱衷的業(yè)余愛(ài)好之一。”——fanjyExcel應(yīng)用程序?qū)ο?Application對(duì)象)及其常用方法基本操作應(yīng)用
分類:ExcelVBA>>ExcelVBA編程入門范例Application對(duì)象代表整個(gè)MicrosoftExcel應(yīng)用程序,帶有175個(gè)屬性和52個(gè)方法,可以設(shè)置整個(gè)應(yīng)用程序的環(huán)境或配置應(yīng)用程序。目錄鍵入章標(biāo)題(第1級(jí))1鍵入章標(biāo)題(第2級(jí))2鍵入章標(biāo)題(第3級(jí))3鍵入章標(biāo)題(第1級(jí))4鍵入章標(biāo)題(第2級(jí))5鍵入章標(biāo)題(第3級(jí))601-01:體驗(yàn)開(kāi)/關(guān)屏幕更新(ScreenUpdating屬性)
Sub關(guān)閉屏幕更新()
MsgBox"順序切換工作表Sheet1→Sheet2→Sheet3→Sheet2,先開(kāi)啟屏幕更新,然后關(guān)閉屏幕更新"
Worksheets(1).Select
MsgBox"目前屏幕中顯示工作表Sheet1"
Application.ScreenUpdating=True
Worksheets(2).Select
MsgBox"顯示Sheet2了嗎?"
Worksheets(3).Select
MsgBox"顯示Sheet3了嗎?"
Worksheets(2).Select
MsgBox"下面與前面執(zhí)行的程序代碼相同,但關(guān)閉屏幕更新功能"
Worksheets(1).Select
MsgBox"目前屏幕中顯示工作表Sheet1"&Chr(10)&"關(guān)屏屏幕更新功能"
Application.ScreenUpdating=False
Worksheets(2).Select
MsgBox"顯示Sheet2了嗎?"
Worksheets(3).Select
MsgBox"顯示Sheet3了嗎?"
Worksheets(2).Select
Application.ScreenUpdating=True
EndSub
說(shuō)明:ScreenUpdating屬性用來(lái)控制屏幕更新。當(dāng)運(yùn)行一個(gè)宏程序處理涉及到多個(gè)工作表或單元格中的大量數(shù)據(jù)時(shí),若沒(méi)有關(guān)閉屏幕更新,則會(huì)占用CPU的處理時(shí)間,從而降低程序的運(yùn)行速度,而關(guān)閉該屬性則可顯著提高程序運(yùn)行速度。01-02:使用狀態(tài)欄(StatusBar屬性)
SubtestStatusBar()
Application.DisplayStatusBar=True'開(kāi)啟狀態(tài)欄顯示
'賦值狀態(tài)欄顯示的文本
Application.StatusBar=""
EndSub
說(shuō)明:StatusBar屬性用來(lái)指定顯示在狀態(tài)欄上的信息。若不想再顯示狀態(tài)欄文本,可使用Application.StatusBar=False語(yǔ)句關(guān)閉狀態(tài)欄顯示,也可以在程序開(kāi)始將原先的狀態(tài)欄設(shè)置存儲(chǔ),如使用語(yǔ)句oldStatusBar=Application.DisplayStatusBar將狀態(tài)欄原來(lái)的信息存儲(chǔ)在變量oldStatusBar,在程序運(yùn)行完成或退出時(shí),將變量重新賦值給狀態(tài)欄,如使用語(yǔ)句Application.DisplayStatusBar=oldStatusBar,以恢復(fù)狀態(tài)欄原狀。01-03:處理光標(biāo)(Cursor屬性)
SubViewCursors()
Application.Cursor=xlNorthwestArrow
MsgBox"您將使用箭頭光標(biāo),切換到Excel界面查看光標(biāo)形狀"
Application.Cursor=xlIBeam
MsgBox"您將使用工形光標(biāo),切換到Excel界面查看光標(biāo)形狀"
Application.Cursor=xlWait
MsgBox"您將使用等待形光標(biāo),切換到Excel界面查看光標(biāo)形狀"
Application.Cursor=xlDefault
MsgBox"您已將光標(biāo)恢復(fù)為缺省狀態(tài)"
EndSub01-04:獲取系統(tǒng)信息
SubGetSystemInfo()
MsgBox"Excel版本信息為:"&Application.CalculationVersion
MsgBox"Excel當(dāng)前允許使用的內(nèi)存為:"&Application.MemoryFree
MsgBox"Excel當(dāng)前已使用的內(nèi)存為:"&Application.MemoryUsed
MsgBox"Excel可以使用的內(nèi)存為:"&Application.MemoryTotal
MsgBox"本機(jī)操作系統(tǒng)的名稱和版本為:"&Application.OperatingSystem
MsgBox"本產(chǎn)品所登記的組織名為:"&Application.OrganizationName
MsgBox"當(dāng)前用戶名為:"&Application.UserName
MsgBox"當(dāng)前使用的Excel版本為:"&Application.Version
EndSub
說(shuō)明:可以使用給UserName屬性賦值以設(shè)置用戶名稱。01-05:退出復(fù)制/剪切模式(CutCopyMode屬性)
SubexitCutCopyMode()
Application.CutCopyMode=False
EndSub
說(shuō)明:退出復(fù)制/剪切模式后,在程序運(yùn)行時(shí)所進(jìn)行的復(fù)制或剪切操作不會(huì)在原單元格區(qū)域留下流動(dòng)的虛框線。需要提醒的是,在程序運(yùn)行完后,應(yīng)使用Application.CutCopyMode=False語(yǔ)句恢復(fù)該屬性的默認(rèn)設(shè)置。01-06:禁止彈出警告信息(DisplayAlerts屬性)
SubtestAlertsDisplay()
Application.DisplayAlerts=False
EndSub
說(shuō)明:在程序運(yùn)行過(guò)程中,有時(shí)由于Excel本身設(shè)置的原因,會(huì)彈出對(duì)話框,從而中斷程序的運(yùn)行,您可以在程序之前加上Application.DisplayAlerts=False語(yǔ)句以禁止彈出這些對(duì)話框而不影響程序正常運(yùn)行。需要注意的是,在程序運(yùn)行結(jié)束前,應(yīng)使DisplayAlerts屬性恢復(fù)為缺省狀態(tài),即使用語(yǔ)句Application.DisplayAlerts=True。該屬性的默認(rèn)設(shè)置為True,當(dāng)將該屬性設(shè)置為False時(shí),Excel會(huì)使直接使用對(duì)話框中默認(rèn)的選擇,從而不會(huì)因?yàn)閺棾鰧?duì)話框而影響程序運(yùn)行。01-07:將Excel全屏幕顯示
SubtestFullScreen()
MsgBox"運(yùn)行后將Excel的顯示模式設(shè)置為全屏幕"
Application.DisplayFullScreen=True
MsgBox"恢復(fù)為原來(lái)的狀態(tài)"
Application.DisplayFullScreen=False
EndSub01-08:Excel啟動(dòng)的文件夾路徑
SubExcelStartfolder()
MsgBox"Excel啟動(dòng)的文件夾路徑為:"&Chr(10)&Application.StartupPath
EndSub01-09:打開(kāi)最近使用過(guò)的文檔
SubOpenRecentFiles()
MsgBox"顯示最近使用過(guò)的第三個(gè)文件名,并打開(kāi)該文件"
MsgBox"最近使用的第三個(gè)文件的名稱為:"&Application.RecentFiles(3).Name
Application.RecentFiles(3).Open
EndSub01-10:打開(kāi)文件(FindFile方法)
SubFindFileOpen()
OnErrorResumeNext
MsgBox"請(qǐng)打開(kāi)文件",vbOKOnly+vbInformation,"打開(kāi)文件"
IfNotApplication.FindFileThen
MsgBox"文件未找到",vbOKOnly+vbInformation,"打開(kāi)失敗"
EndIf
EndSub
說(shuō)明:本將顯示“打開(kāi)”文件對(duì)話框,若用戶未打開(kāi)文件(即點(diǎn)擊“取消”按鈕),則會(huì)顯示“打開(kāi)失敗”信息框。中使用了FindFile方法,用來(lái)顯示“打開(kāi)”對(duì)話框并讓用戶打開(kāi)一個(gè)文件。如果成功打開(kāi)一個(gè)新文件,則該值為True。如果用戶取消了操作并退出該對(duì)話框,則該值為False。01-11:文件對(duì)話框操作(FileDialog屬性)
SubUseFileDialogOpen()
DimlngCountAsLong
'開(kāi)啟"打開(kāi)文件"對(duì)話框
WithApplication.FileDialog(msoFileDialogOpen)
.AllowMultiSelect=True‘允許用戶選擇多個(gè)文件
.Show
'顯示所選的每個(gè)文件的路徑
ForlngCount=1To.SelectedItems.Count
MsgBox.SelectedItems(lngCount)
NextlngCount
EndWith
EndSub
說(shuō)明:本顯示“打開(kāi)文件”對(duì)話框,當(dāng)用戶在其中選擇一個(gè)或多個(gè)文件后,將依次顯示每個(gè)文件的路徑。其中,F(xiàn)ileDialog屬性返回打開(kāi)和保存對(duì)話框中一系列對(duì)象的集合,您可以對(duì)該集合對(duì)象的屬性進(jìn)行進(jìn)一步的設(shè)置,如上例中的AllowMultiSelect屬性設(shè)置為True將允許用戶選擇多個(gè)文件。01-12:保存Excel的工作環(huán)境
Sub保存Excel的工作環(huán)境()
MsgBox"將Excel的工作環(huán)境保存到D:\ExcelSample\中"
Application.SaveWorkspace"D:\ExcelSample\Sample"
EndSub
說(shuō)明:運(yùn)行本程序后,將工作簿以帶后綴名.xlw保存到D盤的ExcelSample文件夾中,生成的文件全名為Sample.xlw。當(dāng)改變工作簿并保存時(shí),Excel會(huì)詢問(wèn)是覆蓋原文件還是保存副本。01-13:改變Excel工作簿名字(Caption屬性)
SubSetCaption()
Application.Caption="MyExcelBook"
EndSub
說(shuō)明:運(yùn)行本程序后,將工作簿左上角Excel圖標(biāo)右側(cè)的“MicrosoftExcel”改為“MyExcelBook”。01-14:使用InputBox方法
SubSampleInputBox()
DimvInput
vInput=InputBox("請(qǐng)輸入用戶名:","獲取用戶名",Application.UserName)
MsgBox"您好!"&vInput&".很高興能認(rèn)識(shí)您.",vbOKOnly,"打招呼"
EndSub01-15:設(shè)置頁(yè)邊距(CentimetersToPoints方法)
SubSetLeftMargin()
MsgBox"將工作表Sheet1的左頁(yè)邊距設(shè)為5厘米"
Worksheets("Sheet1").PageSetup.LeftMargin=Application.CentimetersToPoints(5)
EndSub01-16:使用Windows的計(jì)算器(ActivateMicrosoftApp方法)
SubCallCalculate()
Application.ActivateMicrosoftAppIndex:=0
EndSub
說(shuō)明:運(yùn)行本程序后,將調(diào)用Windows的計(jì)算器。01-17:在程序中運(yùn)行另一個(gè)宏(Run方法)
SubrunOtherMacro()
MsgBox"本程序先選擇A1至C6單元格區(qū)域后執(zhí)行DrawLine宏"
ActiveSheet.Range("A2:C6").Select
Application.Run"DrawLine"
EndSub01-18:在指定的時(shí)間執(zhí)行宏(OnTime方法)
SubAfterTimetoRun()
MsgBox"從現(xiàn)在開(kāi)始,5秒后執(zhí)行程序「testFullScreen」"
Application.OnTimeNow+TimeValue("00:00:05"),"testFullScreen"
EndSub
說(shuō)明:運(yùn)行本程序后,在10秒后將執(zhí)行程序testFullScreen。01-19:暫時(shí)停止宏運(yùn)行(Wait方法)
SubStop5sMacroRun()
DimSetTimeAsDate
MsgBox"按下「確定」,5秒后執(zhí)行程序「testFullScreen」"
SetTime=DateAdd("s",5,Now())
Application.WaitSetTime
CalltestFullScreen
EndSub
說(shuō)明:運(yùn)行本程序后,按下彈出的提示框中的“確定”按鈕,等待5秒后執(zhí)行另一程序testFullScreen。01-20:按下指定的按鍵后執(zhí)行程序(OnKey方法)
01-20-1
SubPressKeytoRun()
MsgBox"按下Ctrl+D后將執(zhí)行程序「testFullScreen」"
Application.OnKey"^kr4k57j","testFullScreen"
EndSub
01-20-2:
SubResetKey()
MsgBox"恢復(fù)原來(lái)的按鍵狀態(tài)"
Application.OnKey"^lwvcjqn"
EndSub
說(shuō)明:Onkey方法的作用主要是指定特定的鍵,當(dāng)按下指定的鍵時(shí)運(yùn)行相應(yīng)的宏程序,或者按下指定的鍵時(shí),使Excel屏蔽特定的功能。01-21:重新計(jì)算工作簿
01-21-1:
SubCalculateAllWorkbook()
Application.Calculate
EndSub
說(shuō)明:當(dāng)工作簿的計(jì)算模式被設(shè)置為手動(dòng)模式后,運(yùn)用Calculate方法可以重新計(jì)算所有打開(kāi)的工作簿、工作簿中特定的工作表或者工作表中指定的單元格區(qū)域。
01-21-2:
SubCalculateFullSample()
IfApplication.CalculationVersion<>Workbooks(1).CalculationVersionThen
Application.CalculateFull
EndIf
EndSub
說(shuō)明:本先將當(dāng)前MicrosoftExcel的版本與上次計(jì)算該工作簿的Excel版本進(jìn)行比較,如果兩個(gè)版本不同,則對(duì)所有打開(kāi)工作簿中的數(shù)據(jù)進(jìn)行一次完整計(jì)算。其中,CalculationVersion屬性返回工作簿的版本信息。01-22:控制函數(shù)重新計(jì)算(Volatile方法)
FunctionNonStaticRand()
'當(dāng)工作表中任意單元格重新計(jì)算時(shí)本函數(shù)更新
Application.VolatileTrue
NonStaticRand=Rnd()
EndFunction
說(shuō)明:本摸仿Excel中的Rand()函數(shù),當(dāng)工作表單元格發(fā)生變化時(shí),都會(huì)重新計(jì)算該函數(shù)。在例子中,使用了Volatile方法,強(qiáng)制函數(shù)進(jìn)行重新計(jì)算,即無(wú)論何時(shí)重新計(jì)算工作表,該函數(shù)都會(huì)重新計(jì)算。01-23:取最大值(最小值)利用工作表函數(shù)(WorksheetFunction屬性)
SubWorksheetFunctionSample()
DimmyRangeAsRange,answer
SetmyRange=Worksheets("Sheet1").Range("A1:C10")
answer=Application.WorksheetFunction.Min(myRange)
MsgBoxanswer
EndSub
說(shuō)明:本獲取工作表Sheet1中單元格區(qū)域A1:C10中的最小值,使用了工作表函數(shù)Min()。一般,使用WorksheetFunction屬性引用工作表函數(shù),但如果VBA自帶有實(shí)現(xiàn)相同功能的函數(shù),則直接使用該函數(shù),否則會(huì)出現(xiàn)錯(cuò)誤。01-24:獲取重疊區(qū)域(Intersect方法)
SubIntersectRange()
DimrSectAsRange
Worksheets("Sheet1").Activate
SetrSect=Application.Intersect(Range("rg1"),Range("rg2"))
IfrSectIsNothingThen
MsgBox"沒(méi)有交叉區(qū)域"
Else
rSect.Select
EndIf
EndSub
說(shuō)明:本在工作表Sheet1中選定兩個(gè)命名區(qū)域rg1和rg2的重疊區(qū)域,如果所選區(qū)域不重疊,則顯示一條相應(yīng)的信息。其中,Intersect方法返回一個(gè)Range對(duì)象,代表兩個(gè)或多個(gè)范圍重疊的矩形區(qū)域。01-25:獲取路徑分隔符(PathSeparator屬性)
SubGetPathSeparator()
MsgBox"路徑分隔符為"&Application.PathSeparator
EndSub
說(shuō)明:本使用PathSeparator屬性返回路徑分隔符(“\”)。01-26:快速移至指定位置(Goto方法)
SubGotoSample()
Application.GotoReference:=Worksheets("Sheet1").Range("A154"),_
scroll:=True
EndSub
說(shuō)明:本運(yùn)行后,將當(dāng)前單元格移至工作表Sheet1中的單元格A154。01-27:顯示內(nèi)置對(duì)話框(Dialogs屬性)
SubDialogSample()
Application.Dialogs(xlDialogOpen).Show
EndSub
說(shuō)明:本顯示Excel的“打開(kāi)”文件對(duì)話框。其中,Dialogs屬性返回的集合代表所有的Excel內(nèi)置對(duì)話框。01-28:退出Excel(SendKeys方法)
SubSendKeysSample()
Application.SendKeys("%fx")
EndSub
說(shuō)明:本使用SendKeys方法退出Excel,若未保存,則會(huì)彈出提示對(duì)話框并讓用戶作出相應(yīng)的選擇。SendKeys方法的作用是摸擬鍵盤輸入,如例中的“%fx”表示在Excel中同時(shí)按下Alt、F和X三個(gè)鍵。01-29:關(guān)閉Excel
Sub關(guān)閉Excel()
MsgBox"Excel將會(huì)關(guān)閉"
Application.Quit
EndSub
說(shuō)明:運(yùn)行本程序后,若該工作簿未保存,則會(huì)彈出對(duì)話框詢問(wèn)是否保存。=============================
(byfanjy)第二章
窗口(Window對(duì)象)基本操作應(yīng)用(一)
分類:ExcelVBA>>ExcelVBA編程入門范例Window對(duì)象代表一個(gè)窗口,約有48個(gè)屬性和14個(gè)方法,能對(duì)窗口特性進(jìn)行設(shè)置和操作。Window對(duì)象是Windows集合中的成員,對(duì)于Application對(duì)象來(lái)說(shuō),Windows集合包含該應(yīng)用程序中的所有窗口;對(duì)于Workbook對(duì)象來(lái)說(shuō),Windows集合只包含指定工作簿中的窗口。下面介紹一些,以演示和說(shuō)明Window對(duì)象及其屬性和方法的運(yùn)用。02-01:激活窗口(Activate方法)
SubSelectWindow()
DimiWinAsLong,iAsLong,bWin
MsgBox"依次切換已打開(kāi)的窗口"
iWin=Windows.Count
MsgBox“您已打開(kāi)的窗口數(shù)量為:”&iWin
Fori=1ToiWin
Windows(i).Activate
bWin=MsgBox("您激活了第"&i&"個(gè)窗口,還要繼續(xù)嗎?",vbYesNo)
IfbWin=vbNoThenExitSub
Nexti
EndSub02-02:窗口狀態(tài)(WindowState屬性)02-02-01:
SubWindowStateTest()
MsgBox"當(dāng)前活動(dòng)工作簿窗口將最小化"
Windows(1).WindowState=xlMinimized
MsgBox"當(dāng)前活動(dòng)工作簿窗口將恢復(fù)正常"
Windows(1).WindowState=xlNormal
MsgBox"當(dāng)前活動(dòng)工作簿窗口將最大化"
Windows(1).WindowState=xlMaximized
EndSub
說(shuō)明:使用WindowState屬性可以返回或者設(shè)置窗口的狀態(tài)。中,常量xlMinimized、xlNormal和xlMaximized分別代表窗口不同狀態(tài)值,Windows(1)表示當(dāng)前活動(dòng)窗口??梢允褂肳indows(index)來(lái)返回單個(gè)的Window對(duì)象,其中的index為窗口的名稱或編號(hào),活動(dòng)窗口總是Windows(1)。02-02-02:
SubtestWindow()
'測(cè)試Excel應(yīng)用程序窗口狀態(tài)
MsgBox"應(yīng)用程序窗口將最大化"
Application.WindowState=xlMaximized
CalltestWindowState
MsgBox"應(yīng)用程序窗口將恢復(fù)正常"
Application.WindowState=xlNormal
MsgBox"應(yīng)用程序窗口已恢復(fù)正常"
'測(cè)試活動(dòng)工作簿窗口狀態(tài)
MsgBox"當(dāng)前活動(dòng)工作簿窗口將最小化"
ActiveWindow.WindowState=xlMinimized
CalltestWindowState
MsgBox"當(dāng)前活動(dòng)工作簿窗口將最大化"
ActiveWindow.WindowState=xlMaximized
CalltestWindowState
MsgBox"當(dāng)前活動(dòng)工作簿窗口將恢復(fù)正常"
ActiveWindow.WindowState=xlNormal
CalltestWindowState
MsgBox"應(yīng)用程序窗口將最小化"
Application.WindowState=xlMinimized
CalltestWindowState
EndSub
‘*********************************************************
SubtestWindowState()
SelectCaseApplication.WindowState
CasexlMaximized:MsgBox"應(yīng)用程序窗口已最大化"
CasexlMinimized:MsgBox"應(yīng)用程序窗口已最小化"
CasexlNormal:
SelectCaseActiveWindow.WindowState
CasexlMaximized:MsgBox"當(dāng)前活動(dòng)工作簿窗口已最大化"
CasexlMinimized:MsgBox"當(dāng)前活動(dòng)工作簿窗口已最小化"
CasexlNormal:MsgBox"當(dāng)前活動(dòng)工作簿窗口已恢復(fù)正常"
EndSelect
EndSelect
EndSub
說(shuō)明:本有兩個(gè)程序,其中testWindow()是主程序,調(diào)用子程序textWindowState(),演示了應(yīng)用程序窗口和工作簿窗口的不同狀態(tài)。當(dāng)前活動(dòng)窗口一般代表當(dāng)前活動(dòng)工作簿窗口,讀者可以在VBE編輯器中按F8鍵逐語(yǔ)句運(yùn)行testWindow()程序,觀察Excel應(yīng)用程序及工作簿窗口的不同狀態(tài)。此外,在子程序中,還運(yùn)用了嵌套的SelectCase結(jié)構(gòu)。
02-02-03:
SubSheetGradualGrow()
DimxAsInteger
WithActiveWindow
.WindowState=xlNormal
.Top=1
.Left=1
.Height=50
.Width=50
Forx=50ToApplication.UsableHeight
.Height=x
Nextx
Forx=50ToApplication.UsableWidth
.Width=x
Nextx
.WindowState=xlMaximized
EndWith
EndSub
說(shuō)明:本將動(dòng)態(tài)演示工作簿窗口由小到大直至最大化的變化過(guò)程。在運(yùn)行程序時(shí),您可以將VBE窗口縮小,從而在工作簿中查看動(dòng)態(tài)效果,也可以在Excel中選擇菜單中的宏命令執(zhí)行以查看效果。02-03:切換顯示工作表元素
02-03-01:切換顯示/隱藏行列標(biāo)號(hào)
SubtestDisplayHeading()
MsgBox“切換顯示/隱藏行列標(biāo)號(hào)”
ActiveWindow.DisplayHeadings=NotActiveWindow.DisplayHeadings
EndSub
說(shuō)明:本切換是否顯示工作表中的行列標(biāo)號(hào)。運(yùn)行后,工作表中的行標(biāo)號(hào)和列標(biāo)號(hào)將消失;再次運(yùn)行后,行列標(biāo)號(hào)重新出現(xiàn),如此反復(fù)。您也可以將該屬性設(shè)置為False,以取消行列標(biāo)號(hào)的顯示,如ActiveWindow.DisplayHeadings=False;而將該屬性設(shè)置為True,則顯示行列標(biāo)號(hào)。
02-03-02:切換顯示/隱藏網(wǎng)格線
SubtestDisplayGridline()
MsgBox“切換顯示/隱藏網(wǎng)格線”
ActiveWindow.DisplayGridlines=NotActiveWindow.DisplayGridlines
EndSub
說(shuō)明:本切換是否顯示工作表中的網(wǎng)格線。運(yùn)行后,工作表中的網(wǎng)格線消失,再次運(yùn)行后,網(wǎng)格線重新出現(xiàn),如此反復(fù)。您也可以將該屬性設(shè)置為False,以取消網(wǎng)格線顯示,如ActiveWindow.DisplayGridlines=False;而將該屬性設(shè)置為True,則顯示網(wǎng)格線。02-03-03:切換顯示/隱藏水平滾動(dòng)條
SubDisplayHorizontalScrollBar()
MsgBox“切換顯示/隱藏水平滾動(dòng)條”
ActiveWindow.DisplayHorizontalScrollBar=
_
NotActiveWindow.DisplayHorizontalScrollBar
EndSub
說(shuō)明:本切換是否顯示工作表中的水平滾動(dòng)條。運(yùn)行后,工作表中的水平滾動(dòng)條消失,再次運(yùn)行后,水平滾動(dòng)條重新出現(xiàn),如此反復(fù)。您也可以將該屬性設(shè)置為False,以取消水平滾動(dòng)條,如ActiveWindow.DisplayHorizontalScrollBar=False;而將該屬性設(shè)置為True,則顯示水平滾動(dòng)條。
同理,DisplayVerticalScrollBar屬性將用來(lái)設(shè)置垂直滾動(dòng)條。
02-03-04:切換顯示/隱藏水平和垂直滾動(dòng)條
SubDisplayScrollBar()
MsgBox"切換顯示/隱藏水平和垂直滾動(dòng)條"
Application.DisplayScrollBars=Not(Application.DisplayScrollBars)
EndSub
說(shuō)明:本切換是否顯示工作表中的水平和垂直滾動(dòng)條。運(yùn)行后,工作表中的水平和垂直滾動(dòng)條同時(shí)消失,再次運(yùn)行后,水平和垂直滾動(dòng)條重新出現(xiàn),如此反復(fù)。您也可以將該屬性設(shè)置為False,以取消水平和垂直滾動(dòng)條顯示,如Application.DisplayScrollBars=False;而將該屬性設(shè)置為True,則顯示水平和垂直滾動(dòng)條。02-04:顯示公式(DisplayFormulas屬性)
SubDisplayFormula()
MsgBox“顯示工作表中包含公式的單元格中的公式”
ActiveWindow.DisplayFormulas=True
EndSub
說(shuō)明:本程序運(yùn)行后,工作表中含有公式的單元格將顯示公式而不是數(shù)值。若要顯示數(shù)值,則將該屬性設(shè)置為False,或者,如果工作表中的公式顯示的是結(jié)果數(shù)值,則該屬性為False。02-05:顯示/隱藏工作表標(biāo)簽(DisplayWorkbookTabs屬性)
SubtestDisplayWorkbookTab()
MsgBox“隱藏工作表標(biāo)簽”
ActiveWindow.DisplayWorkbookTabs=False
EndSub
說(shuō)明:本程序運(yùn)行后,工作表標(biāo)簽消失。將該屬性設(shè)置為True,重新顯示工作表標(biāo)簽。02-06:命名活動(dòng)窗口(Caption屬性)
SubtestCaption()
MsgBox"當(dāng)前活動(dòng)工作簿窗口的名字是:"&ActiveWindow.Caption
ActiveWorkbook.Windows(1).Caption="我的工作簿"
MsgBox"當(dāng)前活動(dòng)工作簿窗口的名字是:"&ActiveWindow.Caption
EndSub
說(shuō)明:本程序運(yùn)行后,顯示當(dāng)前活動(dòng)工作簿窗口原先的名稱(即工作簿窗口未處于最大化狀態(tài)時(shí),出現(xiàn)在窗口頂部標(biāo)題欄中的文字),然后設(shè)置當(dāng)前活動(dòng)工作簿窗口名稱,即使用語(yǔ)句ActiveWorkbook.Windows(1).Caption="我的工作簿",最后顯示當(dāng)前活動(dòng)工作簿窗口的新名稱。改變窗口的標(biāo)題并不會(huì)改變工作簿的名稱。02-07:移動(dòng)窗口到指定位置(ScrollRow屬性和ScrollColumn屬性)
SubtestScroll()
MsgBox“將當(dāng)前窗口工作表左上角單元格移至第10行第3列”
ActiveWindow.ScrollRow=10
ActiveWindow.ScrollColumn=3
EndSub
說(shuō)明:本程序運(yùn)行后,當(dāng)前活動(dòng)窗口左上角單元格為第10行第3列??梢酝ㄟ^(guò)設(shè)置這兩個(gè)屬性來(lái)移動(dòng)窗口到指定的位置,也可以返回指定窗格或窗口最左上面的行號(hào)或列號(hào)。02-08:調(diào)整窗口(EnableResize屬性)
SubtestResize()
MsgBox“設(shè)置窗口大小不可調(diào)整”
ActiveWindow.EnableResize=False
EndSub
說(shuō)明:測(cè)試本程序前,將當(dāng)前工作簿窗口恢復(fù)為正常狀態(tài)(即讓工作簿標(biāo)題可見(jiàn)),運(yùn)行程序后,當(dāng)前工作簿窗口將不能調(diào)整其大小,右上角的最小化最大化按鈕將消失(即隱藏最大化和最小化按鈕)。該屬性設(shè)置為True,則能調(diào)整窗口大小。02-09:拆分窗格
02-09-01:以活動(dòng)單元格為基準(zhǔn)拆分窗格
SubSplitWindow1()
DimiRowAsLong,iColumnAsLong
MsgBox"以活動(dòng)單元格為基準(zhǔn)拆分窗格"
iRow=ActiveCell.Row
iColumn=ActiveCell.Column
WithActiveWindow
.SplitColumn=iColumn
.SplitRow=iRow
EndWith
MsgBox"恢復(fù)原來(lái)的窗口狀態(tài)"
ActiveWindow.Split=False
EndSub
02-09-02:
SubSplitWindow()
DimiRowAsLong,iColumnAsLong
MsgBox"以活動(dòng)單元格為基準(zhǔn)拆分窗格"
iRow=ActiveCell.Row
iColumn=ActiveCell.Column
WithActiveWindow
.SplitColumn=iColumn
.SplitRow=iRow
EndWith
MsgBox"恢復(fù)原來(lái)的窗口狀態(tài)"
ActiveWindow.SplitColumn=0
ActiveWindow.SplitRow=0
EndSub
說(shuō)明:本演示了以活動(dòng)單元格為基準(zhǔn)拆分窗格。如果指定窗口被拆分,則Split屬性的值為True;設(shè)置該屬性的值為False則取消窗格拆分。也可以設(shè)置SplitColumn屬性和SplitRow屬性的值來(lái)取消窗格拆分。02-10:凍結(jié)窗格(FreezePanes屬性)
SubtestFreezePane()
MsgBox“凍結(jié)窗格”
ActiveWindow.FreezePanes=True
EndSub
說(shuō)明:運(yùn)行本程序后,將會(huì)凍結(jié)活動(dòng)單元格所在位置上方和左側(cè)的單元格區(qū)域。將該屬性的值設(shè)置為False,將取消凍結(jié)窗格。02-11:設(shè)置網(wǎng)格線顏色(GridlineColor屬性和GridlineColorIndex屬性)
SubsetGridlineColor()
DimiColorAsLong
iColor=ActiveWindow.GridlineColor
MsgBox"將活動(dòng)窗口的網(wǎng)格線顏色設(shè)為紅色"
ActiveWindow.GridlineColor=RGB(255,0,0)
MsgBox"將活動(dòng)窗口的網(wǎng)格線顏色設(shè)為藍(lán)色"
ActiveWindow.GridlineColorIndex=5
MsgBox“恢復(fù)為原來(lái)的網(wǎng)格線顏色”
ActiveWindow.GridlineColorIndex=iColor
EndSub
說(shuō)明:運(yùn)行程序后,當(dāng)前工作表窗口網(wǎng)格線將被設(shè)置為紅色。其中,GridlineColorIndex屬性可以用于返回或設(shè)置網(wǎng)格線的顏色,下面給出了默認(rèn)調(diào)色板中顏色的編號(hào)值:
[小結(jié)]ActiveWindow屬性返回當(dāng)前激活的工作簿窗口,可以用來(lái)設(shè)置工作表中的元素,也可以顯示特定的單元格,或者用來(lái)調(diào)整窗口的顯示比例,以及設(shè)置窗口。第二章
窗口(Window對(duì)象)基本操作應(yīng)用(二)
分類:ExcelVBA>>ExcelVBA編程入門范例02-12:設(shè)置工作表標(biāo)簽區(qū)域?qū)挾群退綕L動(dòng)條寬度比例(TabRatio屬性)
Subtest()
MsgBox"設(shè)置工作表標(biāo)簽區(qū)域?qū)挾葹樗綕L動(dòng)條寬度的一半"
ActiveWindow.TabRatio=0.5
EndSub
說(shuō)明:TabRatio屬性返回或設(shè)置工作簿中工作表標(biāo)簽區(qū)域的寬度與窗口水平滾動(dòng)條的寬度比例(可為0到1之間的數(shù)字;默認(rèn)值為0.6)。您可以改變上面程序中的數(shù)值進(jìn)行測(cè)試。02-13:設(shè)置激活窗口時(shí)運(yùn)行的程序(OnWindow屬性)
SubtestRunProcedure()
ThisWorkbook.Windows(1).OnWindow="test"
EndSub
‘*********************************************************
Subtest()
MsgBox"您可以使用本窗口了!"
EndSub
說(shuō)明:本包括兩個(gè)程序,主程序?yàn)閠estRunProcedure(),運(yùn)行后,每當(dāng)激活該窗口時(shí),將會(huì)運(yùn)行test()程序。其中,OnWindow屬性返回或設(shè)置每當(dāng)激活一個(gè)窗口時(shí)要運(yùn)行的過(guò)程的名稱,如本例中的test()程序。02-14:獲取指定窗口單元格區(qū)域地址(RangeSelection屬性)
SubtestRangeSelection()
MsgBox"顯示所選單元格地址"
EndSub
說(shuō)明:本返回當(dāng)前窗口中所選單元格區(qū)域的地址。RangeSelection屬性返回指定窗口的工作表中的選定單元格(即使指定工作表中有圖形對(duì)象處于活動(dòng)狀態(tài),或者已選定圖形對(duì)象,仍返回在圖形對(duì)象被選定之前選定的單元格區(qū)域,這是該屬性與Selection屬性的區(qū)別)。02-15:返回指定窗口中所選擇的工作表(SelectedSheets屬性)
SubtestSelectedSheet()
DimshAsWorksheet
ForEachshInActiveWorkbook.Windows(1).SelectedSheets
MsgBox"工作表"&sh.Name&"被選擇"
Next
EndSub
說(shuō)明:SelectedSheets屬性返回代表指定窗口中的所有選定工作表的集合。本中,如果您同時(shí)選擇了活動(dòng)工作簿中的工作表Sheet1和Sheet2,那么運(yùn)行程序后,將會(huì)顯示相應(yīng)工作表被選擇的信息。02-16:排列窗口(Arrange方法)
SubtestArrangeWindows()
MsgBox"請(qǐng)確保應(yīng)用程序至少含有兩個(gè)工作簿,這樣才能看出效果"
MsgBox“窗口將平鋪顯示”
Windows.ArrangeArrangeStyle:=xlArrangeStyleTiled
MsgBox“窗口將層疊顯示”
Windows.ArrangeArrangeStyle:=xlArrangeStyleCascade
MsgBox“窗口將水平排列顯示”
Windows.ArrangeArrangeStyle:=xlArrangeStyleHorizontal
MsgBox“窗口將垂直并排排列顯示”
Windows.ArrangeArrangeStyle:=xlArrangeStyleVertical
EndSub
說(shuō)明:運(yùn)行本程序后,將平鋪應(yīng)用程序中的所有窗口。Arrange方法用于對(duì)屏幕上的窗口進(jìn)行排列,其語(yǔ)法為expression.Arrange(ArrangeStyle,ActiveWorkbook,SyncHorizontal,SyncVertical),所有的參數(shù)均為可選參數(shù)。其中,參數(shù)ArrangeStyle代表排列樣式,可為以下常量:常量xlArrangeStyleTiled為缺省值,表示將平鋪窗口;常量xlArrangeStyleCascade表示將窗口進(jìn)行層疊;常量xlArrangeStyleHorizontal表示將水平排列所有窗口;常量xlArrangeStyleVertical表示將垂直并排排列所有窗口。您可以在上面的程序中測(cè)試這些常量,以體驗(yàn)效果。將參數(shù)ActiveWorkbook設(shè)置為True,則只對(duì)當(dāng)前工作簿的可見(jiàn)窗口進(jìn)行排列。如果為False,則對(duì)所有窗口進(jìn)行排列。默認(rèn)值為False。設(shè)置參數(shù)SyncHorizontal為True,在水平滾動(dòng)時(shí)同步滾動(dòng)當(dāng)前工作簿的所有窗口;如果為False,則不同步滾動(dòng)。設(shè)置參數(shù)SyncVertical為True,則在垂直滾動(dòng)時(shí)同步滾動(dòng)當(dāng)前工作簿的所有窗口;如果為False,則不同步滾動(dòng),默認(rèn)值為False。如果參數(shù)ActiveWorkbook為False或者省略,則參數(shù)SyncHorizontal和SyncVertical被忽略。02-17:窗口尺寸(UsableHeight、UsableWidth、Height、Width屬性)
SubtestActiveWindowSize()
MsgBox"當(dāng)前窗口可用區(qū)域的高度為:"&ActiveWindow.UsableHeight
MsgBox"當(dāng)前窗口的高度為:"&ActiveWindow.Height
MsgBox"當(dāng)前窗口可用區(qū)域的寬度為:"&ActiveWindow.UsableWidth
MsgBox"當(dāng)前窗口的寬度為:"&ActiveWindow.Width
EndSub02-18:水平排列兩個(gè)窗口
SubtestWindowArrange()
DimahAsLong,awAsLong
Windows.ArrangexlArrangeStyleTiled
ah=Windows(1).Height
aw=Windows(1).Width+Windows(2).Width
WithWindows(1)
.Width=aw
.Height=ah/2
.Left=0
EndWith
WithWindows(2)
.Width=aw
.Height=ah/2
.Top=ah/2
.Left=0
EndWith
EndSub
說(shuō)明:在運(yùn)行本前,保證只打開(kāi)了兩個(gè)工作簿窗口。運(yùn)行本后,將水平排列第一個(gè)窗口和第二個(gè)窗口,即每個(gè)窗口占用可使用的垂直空間的一半,占用所有水平空間。其中,Top屬性表示從窗口頂端到可用區(qū)域頂端的距離,無(wú)法對(duì)最大化的窗口設(shè)置本屬性;Left屬性表示使用區(qū)域的左邊界至窗口左邊界的距離,如果窗口已最大化,則會(huì)返回一個(gè)負(fù)數(shù);如果該屬性被設(shè)置為0,則窗口的主邊框剛好在屏幕上可見(jiàn)。02-19:改變窗口的高度和寬度
SubChangeHeightAndWidth()
DimiWinHeightAsLong,iWinWidthAsLong
ActiveWindow.WindowState=xlNormal
MsgBox"將當(dāng)前窗口的高度和寬度各減一半"
iWinHeight=ActiveWindow.Height
iWinWidth=ActiveWindow.Width
ActiveWindow.Height=iWinHeight/2
ActiveWindow.Width=iWinWidth/2
MsgBox"恢復(fù)原窗口大小"
ActiveWindow.Height=iWinHeight
ActiveWindow.Width=iWinWidth
EndSub
說(shuō)明:Height屬性和Width屬性必須在窗口處于正常顯示狀態(tài)(即不是最大化或最小化狀態(tài))時(shí)使用,否則會(huì)出錯(cuò)。02-20:移動(dòng)窗口
SubSetWindowPosition()
DimiTopAsLong,iLeftAsLong
MsgBox"將當(dāng)前窗口向下移60,向右移90"
ActiveWindow.WindowState=xlNormal
iTop=ActiveWindow.Top
iLeft=ActiveWindow.Left
ActiveWindow.Top=iTop+60
ActiveWindow.Left=iLeft+90
MsgBox"恢復(fù)原來(lái)窗口的位置"
ActiveWindow.Top=iTop
ActiveWindow.Left=iLeft
EndSub
說(shuō)明:Top屬性和Left屬性必須在窗口處于正常顯示狀態(tài)(即不是最大化或最小化狀態(tài))時(shí)使用,否則會(huì)出錯(cuò)。02-21:并排比較窗口
SubtestCompare()
MsgBox"與工作簿Book2進(jìn)行并排比較"
Windows.CompareSideBySideWith"Book2"
MsgBox"啟動(dòng)窗口滾動(dòng)功能,使兩個(gè)窗口同時(shí)滾動(dòng)"
Windows.SyncScrollingSideBySide=True
MsgBox"將工作簿Book2最小化"
Windows("Book2").WindowState=xlMinimized
MsgBox"重置并排比較顯示,恢復(fù)并排比較"
Windows.ResetPositionsSideBySide
MsgBox"關(guān)閉并排比較"
EndSub
說(shuō)明:在運(yùn)行本前,確保在本窗口外還打開(kāi)了一個(gè)名為Book2的窗口,或者您打開(kāi)了一個(gè)其它命名的窗口,相應(yīng)將上面程序中的Book2更換為您的窗口名。CompareSideBySideWith方法將以并排模式打開(kāi)兩個(gè)窗口,其中一個(gè)是當(dāng)前活動(dòng)窗口,另一個(gè)就是該方法所指定的窗口,如本例中的Book2。SyncScrollingSideBySide屬性設(shè)置是否將兩個(gè)窗口的滾動(dòng)保持同步,如果為True,在對(duì)文檔進(jìn)行并排比較的同時(shí)啟用窗口內(nèi)容的滾動(dòng)功能。若為False,則在對(duì)文檔進(jìn)行并排比較的同時(shí)禁用窗口內(nèi)容的滾動(dòng)功能。ResetPositionsSideBySide方法重置正在進(jìn)行并排比較的兩個(gè)工作表窗口的位置,例如,如果用戶將正在進(jìn)行比較的兩個(gè)工作表窗口中的其中一個(gè)窗框最小化或最大化,就可以使用ResetPositionsSideBySide方法重置顯示,以便這兩個(gè)窗口再次并排顯示。BreakSideBySide方法用來(lái)關(guān)閉并排比較。02-22:返回或設(shè)置窗口中顯示的視圖(View屬性)
SubtestView()
MsgBox"將視圖切換為分頁(yè)預(yù)覽"
ActiveWindow.View=xlPageBreakPreview
MsgBox"窗口視圖為:"&ActiveWindow.View
MsgBox"將視圖恢復(fù)正常"
ActiveWindow.View=xlNormalView
MsgBox"窗口視圖為:"&ActiveWindow.View
EndSub02-23:返回窗口中可見(jiàn)單元格區(qū)域(VisibleRange屬性)
SubtestVisibleRange()
MsgBox"當(dāng)前窗口中共有"&Windows(1).VisibleRange.Cells.Count&"個(gè)單元格可見(jiàn)"
EndSub
說(shuō)明:如果窗口中有部分行列的單元格可見(jiàn),也包括在可見(jiàn)單元格區(qū)域中。02-24:創(chuàng)建窗口(NewWindow方法)
SubtestNewWindow()
MsgBox"為活動(dòng)窗口創(chuàng)建一個(gè)副本"
ActiveWindow.NewWindow
MsgBox"所創(chuàng)建窗口的窗口號(hào)為"&ActiveWindow.WindowNumber
EndSub
說(shuō)明:本中,NewWindow方法為指定窗口(本例中為當(dāng)前活動(dòng)窗口)創(chuàng)建一個(gè)副本,然后顯示該副本窗口的窗口號(hào)。注意,窗口號(hào)與窗口索引(Index屬性)的不同,例如名稱為“Book1.xls:2”的窗口,其窗口號(hào)為2,而窗口索引為該窗口在Windows集合中的位置,可以為窗口名稱或編號(hào)。02-25:設(shè)置窗口大小(Zoom屬性)
SubtestWindowDisplaySize()
MsgBox"將窗口大小設(shè)置為與選定區(qū)域相適應(yīng)的大小"
ActiveWindow.Zoom=True
MsgBox"以雙倍大小顯示窗口"
ActiveWindow.Zoom=200
MsgBox"以正常大小顯示窗口"
ActiveWindow.Zoom=100
EndSub
說(shuō)明:Zoom屬性將以百分?jǐn)?shù)的形式(100表示正常大小,200表示雙倍大小,以此類推)返回或設(shè)置窗口的顯示大小。如果本屬性為True,則可將窗口大小設(shè)置成與當(dāng)前選定區(qū)域相適應(yīng)的大小。本功能僅對(duì)窗口中當(dāng)前的活動(dòng)工作表起作用,若要對(duì)其他工作表使用本屬性,必須先激活該工作表。02-26:激活窗口(ActivateNext方法和ActivatePrevious方法)
02-26-01:
SubtestActivateWindow1()
MsgBox"若已打開(kāi)Book1.xls、Book2.xls和Book3.xls三個(gè)工作簿且Book1.xls為當(dāng)前窗口"&Chr(10)&"則按Book3.xls-Book2.xls-Book1.xls依次激活窗口"
ActiveWindow.ActivateNext
MsgBox"激活工作簿:"&Windows(1).Caption
ActiveWindow.ActivateNext
MsgBox"激活工作簿:"&Windows(1).Caption
ActiveWindow.ActivateNext
MsgBox"激活工作簿:"&Windows(1).Caption
EndSub
02-26-02:
SubtestActivateWindow2()
MsgBox"若已打開(kāi)Book1.xls、Book2.xls和Book3.xls三個(gè)工作簿且Book1.xls為當(dāng)前窗口"&Chr(10)&"則按Book2.xls-Book3.xls-Book1.xls依次激活窗口"
ActiveWindow.ActivatePrevious
MsgBox"激活工作簿:"&Windows(1).Caption
ActiveWindow.ActivatePrevious
MsgBox"激活工作簿:"&Windows(1).Caption
ActiveWindow.ActivatePrevious
MsgBox"激活工作簿:"&Windows(1).Caption
EndSub02-27:滾動(dòng)窗口(LargeScroll方法和SmallScroll方法)
02-27-01:
SubtestScroll1()
MsgBox"將當(dāng)前窗口向下滾動(dòng)3頁(yè)并向右滾動(dòng)1頁(yè)"
ActiveWindow.LargeScrollDown:=3,ToRight:=1
EndSub
說(shuō)明:LargeScroll方法將按頁(yè)滾動(dòng)窗口的內(nèi)容,其語(yǔ)法為expression.LargeScroll(Down,Up,ToRight,ToLeft),帶有4個(gè)可選的參數(shù),其中參數(shù)Down表示將窗口內(nèi)容向下滾動(dòng)的頁(yè)數(shù);參數(shù)Up表示將窗口內(nèi)容向上滾動(dòng)的頁(yè)數(shù);參數(shù)ToRight表示將窗口內(nèi)容向右滾動(dòng)的頁(yè)數(shù);參數(shù)ToLeft表示將窗口內(nèi)容向左滾動(dòng)的頁(yè)數(shù)。如果同時(shí)指定了Down和Up,窗口內(nèi)容上下方向滾動(dòng)的頁(yè)數(shù)由這兩個(gè)參數(shù)的差決定,例如,如果Down為3,Up為6,則窗口向上滾動(dòng)三頁(yè)。如果同時(shí)指定了ToLeft和ToRight,窗口內(nèi)容左右方向滾動(dòng)的頁(yè)數(shù)由這兩個(gè)參數(shù)的差決定,例如,如果ToLeft為3,ToRight為6,則窗口向右滾動(dòng)三頁(yè)。所有這四個(gè)參數(shù)都可以使用負(fù)數(shù)。
02-27-02:
SubtestScroll2()
MsgBox"將當(dāng)前活動(dòng)窗口向下滾動(dòng)3行"
ActiveWindow.SmallScrolldown:=3
EndSub
說(shuō)明:SmallScroll方法按行或列滾動(dòng)窗口,其語(yǔ)法為expression.SmallScroll(Down,Up,ToRight,ToLeft),帶有4個(gè)可選的參數(shù),其中參數(shù)Down表示將窗口內(nèi)容向下滾動(dòng)的行數(shù);參數(shù)Up表示將窗口內(nèi)容向上滾動(dòng)的列數(shù);參數(shù)ToRight表示將窗口內(nèi)容向右滾動(dòng)的列數(shù);參數(shù)ToLeft表示將窗口內(nèi)容向左滾動(dòng)的列數(shù)。如果同時(shí)指定了Down和Up,則窗口內(nèi)容滾動(dòng)的行數(shù)由這兩個(gè)參數(shù)的差值決定,例如,如果Down為3,Up為6,則窗口內(nèi)容向上滾動(dòng)三行。如果同時(shí)指定了ToLeft和ToRight,則窗口內(nèi)容滾動(dòng)的列數(shù)由這兩個(gè)參數(shù)的差值決定,例如,如果ToLeft為3,ToRight為6,則窗口內(nèi)容向右滾動(dòng)三列。以上四個(gè)參數(shù)均可取負(fù)值。02-28:測(cè)試所選單元格寬度和高度
SubtestWidthOrHeight()
DimlWinWidthAsLong,lWinHeightAsLong
WithActiveWindow
lWinWidth=.PointsToScreenPixelsX(.Selection.Width)
lWinHeight=.PointsToScreenPixelsY(.Selection.Height)
EndWith
MsgBox"當(dāng)前選定單元格寬度為:"&lWinWidth&Chr(10)&_
"當(dāng)前選定單元格高度為:"&lWinHeight
EndSub02-29:關(guān)閉窗口(Close方法)
SubCloseWindow()
MsgBox"關(guān)閉當(dāng)前窗口"
ActiveWindow.Close
EndSub
說(shuō)明:本運(yùn)行后,將關(guān)閉當(dāng)前窗口。如果當(dāng)前窗口未保存,則會(huì)彈出詢問(wèn)是否保存的消息框供選擇。
Byfanjyin2006-9-23第三章
工作簿(Workbook)基本操作應(yīng)用(一)
分類:ExcelVBA>>ExcelVBA編程入門范例Workbook對(duì)象代表工作簿,而Workbooks集合則包含了當(dāng)前所有的工作簿。下面對(duì)Workbook對(duì)象的重要的方法和屬性以及其它一些可能涉及到的方法和屬性進(jìn)行介紹,同時(shí),后面的也深入介紹了一些工作簿對(duì)象操作的方法和技巧。03-01:創(chuàng)建工作簿(Add方法)
03-01-01:創(chuàng)建一個(gè)新工作簿
SubCreateNewWorkbook1()
MsgBox"將創(chuàng)建一個(gè)新工作簿."
Workbooks.Add
EndSub03-01-02:預(yù)設(shè)工作表格式
SubCreateNewWorkbook2()
DimwbAsWorkbook
DimwsAsWorksheet
DimiAsLong
MsgBox"將創(chuàng)建一個(gè)新工作簿,并預(yù)設(shè)工作表格式."
Setwb=Workbooks.Add
Setws=wb.Sheets(1)
ws.Name="產(chǎn)品匯總表"‘工作表的名稱,不是工作簿的名稱
ws.Cells(1,1)="序號(hào)"
ws.Cells(1,2)="產(chǎn)品名稱"
ws.Cells(1,3)="產(chǎn)品數(shù)量"
Fori=2To10
ws.Cells(i,1)=i-1
Nexti
EndSub03-02:添加并保存新工作簿
SubAddSaveAsNewWorkbook()
DimWkAsWorkbook
SetWk=Workbooks.Add
Application.DisplayAlerts=False
Wk.SaveAsFilename:="D:/SalesData.xls"
EndSub
說(shuō)明:本使用了Add方法和SaveAs方法,添加一個(gè)新工作簿并將該工作簿以文件名SalesData.xls保存在D盤中。其中,語(yǔ)句Application.DisplayAlerts=False表示禁止彈出警告對(duì)話框。03-03:打開(kāi)工作簿(Open方法)
03-03-01:
SubopenWorkbook1()
Workbooks.Open"<需打開(kāi)文件的路徑>\<文件名>"
EndSub
說(shuō)明:代碼中的<>里的內(nèi)容需用所需打開(kāi)的文件的路徑及文件名代替。Open方法共有15個(gè)參數(shù),其中參數(shù)FileName為必需的參數(shù),其余參數(shù)可選。
03-03-02:
SubopenWorkbook2()
DimfnameAsString
MsgBox"將D盤中的<測(cè)試.xls>工作簿以只讀方式打開(kāi)"
fname="D:\測(cè)試.xls"
Workbooks.OpenFilename:=fname,ReadOnly:=True
EndSub03-04:將文本文件導(dǎo)入工作簿中(OpenText方法)
SubTextToWorkbook()
'本打開(kāi)某文本文件并將制表符作為分隔符對(duì)此文件進(jìn)行分列處理轉(zhuǎn)換成為工作表
Workbooks.OpenTextFilename:="<文本文件所在的路徑>/<文本文
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年軟件開(kāi)發(fā)項(xiàng)目經(jīng)理勞動(dòng)合同3篇
- 2025年度城市廣場(chǎng)草坪修剪與夜間經(jīng)濟(jì)合同3篇
- 2024甲乙雙方關(guān)于區(qū)塊鏈技術(shù)研發(fā)與應(yīng)用的合同
- 2024年財(cái)產(chǎn)分割協(xié)議:無(wú)共同債權(quán)雙方自愿離婚協(xié)商書(shū)3篇
- 2024年環(huán)保新材料研發(fā)與應(yīng)用合作協(xié)議
- 2024年車間租賃合同:工業(yè)用途
- 2025賓館股權(quán)轉(zhuǎn)讓與旅游產(chǎn)品開(kāi)發(fā)協(xié)議3篇
- 2024年砌墻工程質(zhì)量檢測(cè)合同
- 2024年食堂食品安全追溯系統(tǒng)委托運(yùn)營(yíng)管理協(xié)議3篇
- 2024長(zhǎng)租公寓協(xié)議標(biāo)準(zhǔn)格式版A版
- GB/T 7324-2010通用鋰基潤(rùn)滑脂
- GB/T 21709.5-2008針灸技術(shù)操作規(guī)范第5部分:拔罐
- 大三上-診斷學(xué)復(fù)習(xí)重點(diǎn)
- 帶式輸送機(jī)設(shè)計(jì)
- 北京市生態(tài)環(huán)境評(píng)估與投訴中心公開(kāi)招聘1人【共500題附答案解析】模擬試卷
- 音樂(lè)常識(shí)知識(shí)考試題庫(kù)(300題版)
- 酵素行業(yè)分析研究報(bào)告
- 股東變更情況報(bào)告表
- 房產(chǎn)中介門店6S管理規(guī)范
- 蘇教版五年級(jí)數(shù)學(xué)下冊(cè)解方程五種類型50題
- 部編人教版九年級(jí)語(yǔ)文上冊(cè)全冊(cè)課后教學(xué)反思匯總
評(píng)論
0/150
提交評(píng)論