Excel VBA常用語(yǔ)法辭典_第1頁(yè)
Excel VBA常用語(yǔ)法辭典_第2頁(yè)
Excel VBA常用語(yǔ)法辭典_第3頁(yè)
Excel VBA常用語(yǔ)法辭典_第4頁(yè)
Excel VBA常用語(yǔ)法辭典_第5頁(yè)
已閱讀5頁(yè),還剩365頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

ExcelVBA常見(jiàn)語(yǔ)法辭典目錄\h\h第1章ExcelVBA入門(mén)\h\h\h1.1創(chuàng)建和管理宏\h\h\h案例1錄制宏\h\h\h案例2編輯宏\h\h\h案例3運(yùn)行宏\h\h\h1.2使用VBE\h\h\h案例4添加模塊\h\h\h案例5導(dǎo)出模塊\h\h\h案例6導(dǎo)入模塊\h\h\h案例7顯示屬性列表\h\h\h第2章VBA語(yǔ)法基礎(chǔ)\h\h\h2.1輸入和輸出語(yǔ)句\h\h\h案例8輸出數(shù)據(jù)表\h\h\h案例9輸入用戶(hù)名\h\h\h案例10事件確認(rèn)\h\h\h2.2選擇結(jié)構(gòu)\h\h\h案例11判斷優(yōu)秀員工\h\h\h案例12根據(jù)編號(hào)分組\h\h\h案例13計(jì)算消費(fèi)金額\h\h\h2.3循環(huán)結(jié)構(gòu)\h\h\h案例14計(jì)算自然數(shù)之和\h\h\h案例15為單元格賦值\h\h\h案例16計(jì)算階乘和\h\h\h第3章單元格的基本操作\h\h\h3.1獲取單元格的引用\h\h\h案例17使用A1樣式引用單元格\h\h\h案例18使用R1C1樣式引用單元格\h\h\h案例19引用多個(gè)單元格區(qū)域\h\h\h案例20合并單元格區(qū)域\h\h\h案例21引用合并區(qū)域的子區(qū)域\h\h\h案例22當(dāng)前單元格的前一單元格\h\h\h案例23當(dāng)前單元格的后一單元格\h\h\h案例24引用整行或者整列單元格\h\h\h案例25引用相對(duì)其他單元格的單元格\h\h\h案例26引用當(dāng)前區(qū)域\h\h\h案例27引用已使用區(qū)域\h\h\h案例28調(diào)整單元格區(qū)域的大小\h\h\h案例29引用命名的單元格區(qū)域\h\h\h案例30引用交叉區(qū)域\h\h\h案例31引用區(qū)域內(nèi)的單元格\h\h\h案例32引用最后一行單元格\h\h\h案例33引用列末單元格\h\h\h案例33引用整行數(shù)據(jù)\h\h\h案例34引用不同長(zhǎng)度的非連續(xù)列\(zhòng)h\h\h案例35引用條件格式單元格\h\h\h案例36引用所有單元格\h\h\h案例37跨表引用\h\h\h3.2獲取單元格信息\h\h\h案例38獲取標(biāo)題行的信息\h\h\h案例39獲取當(dāng)前區(qū)域的信息\h\h\h案例40獲取單元格的地址信息\h\h\h案例41獲取單元格的公式信息\h\h\h3.3設(shè)置單元格格式\h\h\h案例42設(shè)置單元格的屬性\h\h\h案例43設(shè)置自動(dòng)套用格式\h\h\h案例44突顯單元格\h\h\h案例45標(biāo)記特殊單元格\h\h\h案例46設(shè)置單元格的邊框\h\h\h案例47設(shè)置文本的對(duì)齊方式\h\h\h案例48設(shè)置文本的方向\h\h\h案例49設(shè)置條件格式\h\h\h案例50合并單元格\h\h\h3.4操作單元格\h\h\h案例51復(fù)制單元格\h\h\h案例52添加公式\h\h\h案例53設(shè)置單元格范圍\h\h\h案例54添加批注\h\h\h案例55清除單元格的格式\h\h\h案例56刪除單元格\h\h\h第4章工作表操作\h\h\h4.1操作工作表\h\h\h案例57插入工作表\h\h\h案例58復(fù)制工作表\h\h\h案例59統(tǒng)計(jì)工作表的數(shù)目\h\h\h案例60選擇多個(gè)工作表\h\h\h案例61選擇前一個(gè)工作表\h\h\h案例62移動(dòng)工作表\h\h\h案例63重命名工作表\h\h\h案例64判斷工作表是否存在\h\h\h案例65判斷工作表是否為空\(chéng)h\h\h案例66設(shè)置工作表標(biāo)簽顏色\h\h\h案例67工作表排序\h\h\h案例68確定工作表的可視范圍\h\h\h案例69保護(hù)工作表\h\h\h案例70取消工作表的保護(hù)\h\h\h案例71拆分工作表\h\h\h案例72刪除工作表\h\h\h案例73隱藏工作表\h\h\h案例74打印工作表\h\h\h案例75禁止選擇單元格\h\h\h案例76導(dǎo)出工作表\h\h\h4.2操作工作表的行和列\(zhòng)h\h\h案例77插入單行\(zhòng)h\h\h案例78插入多行\(zhòng)h\h\h案例79插入數(shù)據(jù)列\(zhòng)h\h\h案例80隱藏?cái)?shù)據(jù)行\(zhòng)h\h\h案例81隱藏?cái)?shù)據(jù)列\(zhòng)h\h\h案例82設(shè)置單元格的行高\(yùn)h\h\h案例83設(shè)置單元格的列寬\h\h\h4.3使用工作表事件\h\h\h案例84記錄修改的單元格\h\h\h案例85激活時(shí)自動(dòng)排序\h\h\h案例86記錄區(qū)域內(nèi)的修改信息\h\h\h案例87突顯選擇的單元格\h\h\h案例88添加快捷菜單\h\h\h案例89失焦操作\h\h\h案例90自定義條件格式\h\h\h第5章工作簿操作\h\h\h5.1操作工作簿\h\h\h案例91新建工作簿\h\h\h案例92打開(kāi)工作簿\h\h\h案例93導(dǎo)入文本文件\h\h\h案例94保存工作簿\h\h\h案例95重命名保存工作簿\h\h\h案例96將工作簿保存為網(wǎng)頁(yè)\h\h\h案例97查看工作簿信息\h\h\h案例98查看工作簿的內(nèi)置屬性\h\h\h案例99設(shè)置工作簿密碼\h\h\h案例100查看用戶(hù)狀態(tài)信息\h\h\h案例101激活工作簿\h\h\h案例102保護(hù)工作簿\h\h\h案例103設(shè)置名稱(chēng)\h\h\h案例104判斷工作簿是否存在\h\h\h案例105判斷打開(kāi)的工作簿個(gè)數(shù)\h\h\h案例106備份工作簿\h\h\h5.2使用工作簿事件\h\h\h案例107強(qiáng)制保存工作簿\h\h\h案例108限制打印\h\h\h案例109限制保存\h\h\h案例110顯示工作表的插入時(shí)間\h\h\h案例111設(shè)置工作簿的使用時(shí)間\h\h\h第6章數(shù)據(jù)處理\h\h\h6.1對(duì)數(shù)據(jù)進(jìn)行排序\h\h\h案例112對(duì)數(shù)據(jù)進(jìn)行排序\h\h\h案例113兩個(gè)關(guān)鍵字排序\h\h\h案例114多關(guān)鍵字排序\h\h\h案例115自定義排序\h\h\h案例116隨機(jī)排序\h\h\h案例117自動(dòng)排序\h\h\h6.2對(duì)數(shù)據(jù)進(jìn)行篩選\h\h\h案例118簡(jiǎn)單篩選\h\h\h案例119多條件篩選\h\h\h案例120多字段篩選\h\h\h案例121使用通配符篩選\h\h\h案例122動(dòng)態(tài)篩選\h\h\h案例123高級(jí)篩選\h\h\h案例124篩選非重復(fù)值\h\h\h案例125取消篩選\h\h\h6.3查詢(xún)數(shù)據(jù)\h\h\h案例126查找數(shù)值\h\h\h案例127格式查詢(xún)\h\h\h案例128向前查詢(xún)\h\h\h案例129向后查詢(xún)\h\h\h案例130模糊查詢(xún)\h\h\h6.4處理公式\h\h\h案例131判斷單元格是否包含公式\h\h\h案例132自動(dòng)填充公式\h\h\h案例133鎖定公式\h\h\h案例134隱藏公式\h\h\h案例135將公式轉(zhuǎn)換為數(shù)值\h\h\h第7章圖表對(duì)象操作\h\h\h7.1創(chuàng)建圖表\h\h\h案例136創(chuàng)建圖表工作表\h\h\h案例137創(chuàng)建嵌入式圖表\h\h\h案例138確定圖表的位置\h\h\h案例139刪除圖表\h\h\h7.2設(shè)置圖表的屬性\h\h\h案例140確定是否是圖表工作表\h\h\h案例141添加網(wǎng)格線\h\h\h案例142自定義數(shù)據(jù)源\h\h\h案例143添加圖表的陰影\h\h\h案例144添加數(shù)據(jù)標(biāo)簽\h\h\h案例145將圖表保存為圖片\h\h\h案例146設(shè)置圖表顏色\h\h\h案例147按值顯示顏色\h\h\h案例148設(shè)置圖表類(lèi)型\h\h\h案例149設(shè)置數(shù)據(jù)系列的圖表類(lèi)型\h\h\h案例150設(shè)置坐標(biāo)軸的屬性\h\h\h7.3圖表事件\h\h\h案例151激活圖表工作表\h\h\h案例152顯示子對(duì)象名稱(chēng)\h\h\h第8章用戶(hù)界面操作\h\h\h8.1使用內(nèi)置對(duì)話框\h\h\h案例153使用“打開(kāi)”對(duì)話框\h\h\h案例154使用“保存”對(duì)話框\h\h\h案例155調(diào)用內(nèi)置對(duì)話框\h\h\h案例156調(diào)用功能區(qū)功能\h\h\h8.2創(chuàng)建自定義窗體\h\h\h案例157插入窗體\h\h\h案例158刪除窗體\h\h\h案例159導(dǎo)入窗體\h\h\h案例160顯示窗體\h\h\h案例161設(shè)置窗體背景圖片\h\h\h案例162加載窗體圖片\h\h\h案例163創(chuàng)建Splash窗體\h\h\h8.3使用控件\h\h\h案例164添加工具箱中的控件\h\h\h案例165自定義控件提示信息\h\h\h案例166添加窗體控件\h\h\h案例167顯示文本\h\h\h案例168選擇窗體圖片\h\h\h案例169禁用關(guān)閉按鈕\h\h\h第9章自定義Excel2007界面\h\h\h9.1使用工具欄對(duì)象\h\h\h案例170創(chuàng)建自定義菜單\h\h\h案例171刪除自定義菜單\h\h\h案例172創(chuàng)建快捷菜單\h\h\h9.2自定義Excel2007的功能區(qū)\h\h\h案例173自定義Office按鈕\h\h\h案例174自定義快速訪問(wèn)欄\h第1章ExcelVBA入門(mén)本章主要講解ExcelVBA的基礎(chǔ)入門(mén)知識(shí),主要包括使用宏和VBE環(huán)境。宏是由VBA語(yǔ)句組成的命令集,實(shí)現(xiàn)Excel操作。VBE是用戶(hù)創(chuàng)建和編輯代碼的主要環(huán)境,本章將詳細(xì)介紹VBE的創(chuàng)建操作方法。1.1創(chuàng)建和管理宏用戶(hù)對(duì)VBA知識(shí)還不熟悉的時(shí)候,宏是最好的入門(mén)方法。用戶(hù)可以在不了解VBA語(yǔ)法和對(duì)象的前提下,通過(guò)錄制宏了解宏完成的基本功能。本節(jié)將詳細(xì)講解如何創(chuàng)建和管理宏。案例1錄制宏功能說(shuō)明:本實(shí)例的主要功能是演示如何在Excel2007中錄制宏,在用戶(hù)對(duì)ExcelVBA某些方面的知識(shí)不太了解的時(shí)候,通過(guò)錄制宏來(lái)了解Excel如何“記錄”操作是最好的方法。語(yǔ)法說(shuō)明:本案例涉及的語(yǔ)法是“錄制”技術(shù),這是Excel本身提供的功能。用戶(hù)只需啟動(dòng)“錄制”功能,然后進(jìn)行操作。在操作結(jié)束后,設(shè)置“錄制”結(jié)束,就完成整個(gè)錄制過(guò)程。案例說(shuō)明:在案例中將錄制一個(gè)簡(jiǎn)單的宏,這個(gè)宏實(shí)現(xiàn)的功能是設(shè)置單元格中數(shù)字的屬性(位數(shù)、顏色等)。設(shè)置這些屬性的過(guò)程并不復(fù)雜,用戶(hù)可以直接查看錄制后的代碼。編寫(xiě)代碼:(1)輸入數(shù)值,然后啟動(dòng)錄制宏功能。在單元格B2中輸入數(shù)值“123”,然后單擊“開(kāi)發(fā)工具”|“代碼”|“錄制宏”按鈕,如圖1.1所示。(2)設(shè)置宏。在打開(kāi)的“錄制新宏”對(duì)話項(xiàng)中,在“宏名”選項(xiàng)中輸入“設(shè)置格式”,在“說(shuō)明”選項(xiàng)中輸入“該宏的功能是設(shè)置數(shù)字格式”,并設(shè)置宏的快捷鍵是“Ctrl+t”,如圖1.2所示。圖1.1啟動(dòng)錄制宏的功能圖1.2設(shè)置宏的屬性(3)設(shè)置數(shù)字的格式。選中數(shù)字單元格,然后選擇“開(kāi)始”選項(xiàng)卡,然后依次設(shè)置數(shù)字的位數(shù)、格式和顏色等,如圖1.3所示。(4)結(jié)束錄制宏。切換到“開(kāi)發(fā)工具”選項(xiàng)卡,然后單擊“停止錄制”按鈕,如圖1.4所示。運(yùn)行結(jié)果:查看錄制宏對(duì)應(yīng)的VBA代碼。調(diào)出VBE,查看宏對(duì)應(yīng)的代碼,如圖1.5所示。圖1.3設(shè)置數(shù)字屬性圖1.4結(jié)束錄制宏圖1.5宏對(duì)應(yīng)的程序代碼程序分析:在使用Excel宏的時(shí)候,盡量將宏的有用信息都填寫(xiě)完整,這樣當(dāng)用戶(hù)使用宏的時(shí)候,可以通過(guò)信息來(lái)了解宏的內(nèi)容。案例2編輯宏功能說(shuō)明:在ExcelVBA中,盡管用戶(hù)可以使用Excel進(jìn)行自動(dòng)“錄制”宏,但是,Excel自動(dòng)記錄的VBA代碼具有“自動(dòng)性”。常常需要用戶(hù)對(duì)其代碼進(jìn)行編輯,本例將詳細(xì)演示如何編輯宏。語(yǔ)法說(shuō)明:本例將講解如何進(jìn)入編輯宏的環(huán)境,然后對(duì)VBA宏代碼進(jìn)行修改。本例將重新編寫(xiě)宏,希望用戶(hù)從最后的代碼對(duì)比中,查看出編輯宏的方法。案例說(shuō)明:本例的主要功能是編寫(xiě)和案例1自動(dòng)宏功能一樣的宏代碼,即編寫(xiě)設(shè)置數(shù)字格式的宏代碼。編寫(xiě)代碼:(1)選擇編輯宏。選擇“開(kāi)發(fā)工具”|“代碼”|“宏”選項(xiàng),打開(kāi)“宏”對(duì)話框,然后選擇對(duì)應(yīng)的宏,單擊“編輯”按鈕,如圖1.6所示。(2)查看對(duì)應(yīng)的宏。當(dāng)用戶(hù)單擊“編輯”按鈕,進(jìn)入VBE環(huán)境,編寫(xiě)新的宏代碼,如圖1.7所示。圖1.6選擇編輯宏圖1.7查看相應(yīng)的宏運(yùn)行結(jié)果:查看新的代碼,其具體代碼如下:Sub設(shè)置格式()''設(shè)置格式Macro'該宏的功能是設(shè)置數(shù)字格式''快捷鍵:Ctrl+t'Selection.Font.Italic=TrueWithSelection.Font.Color=-16776961.TintAndShade=0EndWithSelection.NumberFormatLocal="0.00_"EndSub程序分析:本例涉及的程序代碼知識(shí)和后面章節(jié)的內(nèi)容類(lèi)似,關(guān)于其具體的語(yǔ)法知識(shí),請(qǐng)用戶(hù)參考后面相關(guān)章節(jié)的內(nèi)容。案例3運(yùn)行宏功能說(shuō)明:在ExcelVBA中,用戶(hù)編寫(xiě)宏的主要目的是運(yùn)行宏。利用宏的代碼,多次完成類(lèi)似的操作和功能。語(yǔ)法說(shuō)明:運(yùn)行宏在技術(shù)上等于程序的運(yùn)行和調(diào)試。如果錄制完成的宏,則屬于程序的運(yùn)行,因?yàn)椴粫?huì)出現(xiàn)語(yǔ)法錯(cuò)誤。案例說(shuō)明:本例將介紹如何在Excel中運(yùn)行宏。為了讓讀者對(duì)宏的功能有直觀的認(rèn)識(shí),本例將運(yùn)行前面案例的宏。編寫(xiě)代碼:(1)添加原始的數(shù)據(jù)。前面案例中宏的功能是設(shè)置數(shù)字格式,因此,首先需要輸入原始數(shù)據(jù),如圖1.8所示。(2)選擇運(yùn)行宏。選擇單元格A2,然后選擇“開(kāi)發(fā)工具”|“代碼”|“宏”選項(xiàng),如圖1.9所示。圖1.8原始數(shù)據(jù)圖1.9選擇運(yùn)行宏(3)執(zhí)行宏功能。在前面步驟中打開(kāi)的“宏”對(duì)話框中,單擊“執(zhí)行”按鈕,選擇執(zhí)行對(duì)應(yīng)的宏功能,如圖1.10所示。(4)查看宏運(yùn)行的結(jié)果。當(dāng)單擊“執(zhí)行”按鈕后,查看運(yùn)行的結(jié)果,如圖1.11所示。圖1.10執(zhí)行宏圖1.11查看宏執(zhí)行的結(jié)果運(yùn)行結(jié)果:依次選擇其他單元格,然后分別運(yùn)行宏,查看得到的結(jié)果,如圖1.12所示。程序分析:由于用戶(hù)錄制和編寫(xiě)的宏是用于設(shè)置數(shù)字格式的,因此,執(zhí)行這些宏會(huì)有直觀的設(shè)置結(jié)果。但是,不是每個(gè)宏都會(huì)產(chǎn)生直觀的結(jié)果,有些宏只是完成中間處理功能。圖1.12執(zhí)行的結(jié)果1.2使用VBE在本節(jié)中,用戶(hù)將了解VBA的編輯環(huán)境VBE。熟悉VBE各部分組件的功能和設(shè)置,這將會(huì)給讀者編寫(xiě)代碼帶來(lái)很大的便利。用戶(hù)可以根據(jù)自己編碼的習(xí)慣顯示不同的窗口并設(shè)置VBE的編碼屬性。本節(jié)將結(jié)合具體例子講解如何使用VBE。案例4添加模塊功能說(shuō)明:模塊是VBA編程的起點(diǎn),幾乎所有的代碼都保存在某個(gè)模塊中。本例將講解如何添加模塊。語(yǔ)法說(shuō)明:在ExcelVBA中,通常有三種方法向工程中添加模塊:·錄制宏。當(dāng)用戶(hù)錄制宏時(shí),系統(tǒng)將自動(dòng)插入VBA模塊,并將宏代碼放在該模塊中?!ぴ赩BE中,選擇工具欄中的“插入”|“模塊”選項(xiàng)?!ぴ赩BE中,右擊“工程”子窗口,彈出快捷菜單,選擇“插入”|“模塊”選項(xiàng)。案例說(shuō)明:在本例中,首先演示如何在VBE中添加新的模塊,然后設(shè)置模塊的屬性。編寫(xiě)代碼:(1)添加新的模塊。右擊“工程”子窗口,彈出快捷菜單,選擇“插入”|“模塊”選項(xiàng),如圖1.13所示。添加后的新模塊如圖1.14所示。圖1.13進(jìn)入VBE環(huán)境圖1.14添加的新模塊(2)修改模塊的名稱(chēng)。在“屬性”列表中,在“名稱(chēng)”選項(xiàng)中輸入“MyModule”,修改模塊的名稱(chēng),結(jié)果如圖1.15所示。圖1.15修改模塊的名稱(chēng)運(yùn)行結(jié)果:從前面的結(jié)果中,用戶(hù)可以查看添加的模塊,如圖1.16所示。圖1.16添加的模塊程序分析:當(dāng)工程中的模塊較少時(shí),可以使用默認(rèn)的名稱(chēng)。但是,當(dāng)工程比較復(fù)雜,模塊比較多時(shí),建議用戶(hù)在添加模塊的時(shí)候,自行設(shè)置符合工程屬性的名稱(chēng)。案例5導(dǎo)出模塊功能說(shuō)明:用戶(hù)在實(shí)際開(kāi)發(fā)時(shí),特別是開(kāi)發(fā)大型程序時(shí),會(huì)遇到功能雷同的模塊。例如,在多個(gè)項(xiàng)目中,都需要使用“設(shè)置格式”功能。用戶(hù)可以避免每次都編寫(xiě)同樣的模塊,而只需編寫(xiě)一個(gè)模塊,然后將其導(dǎo)出保存。當(dāng)需要使用這種功能時(shí),導(dǎo)入這個(gè)模塊。關(guān)鍵技術(shù):在ExcelVBA中,根據(jù)輸出類(lèi)型的不同,用戶(hù)可導(dǎo)出三種模塊:模塊、類(lèi)模塊和窗體。根據(jù)不同類(lèi)型的模塊,可以導(dǎo)出的文件類(lèi)型也不同。具體文件類(lèi)型如下:·BAS:導(dǎo)出模塊文件的擴(kuò)展名?!RM或FRX:導(dǎo)出用戶(hù)窗體的擴(kuò)展名?!LS:導(dǎo)出類(lèi)模塊的擴(kuò)展名。案例說(shuō)明:本例將演示如何將編寫(xiě)的模塊導(dǎo)出并保存。編寫(xiě)代碼:(1)復(fù)制前文中的“錄制宏”文件,并將其名稱(chēng)修改為“導(dǎo)出模塊”。然后按快捷鍵“Alt+F11”,進(jìn)入VBE,如圖1.17所示。(2)選擇導(dǎo)出模塊。選中前面章節(jié)添加的模塊,右擊鼠標(biāo),在彈出的快捷菜單中選擇“導(dǎo)出文件”選項(xiàng),如圖1.18所示。圖1.17進(jìn)入“導(dǎo)出模塊”的VBE圖1.18導(dǎo)出模塊(3)選擇文件的保存路徑。選擇對(duì)應(yīng)的選項(xiàng)后,Excel會(huì)彈出“導(dǎo)出文件”對(duì)話框,在其中選擇導(dǎo)出模塊的保存路徑,如圖1.19所示。圖1.19選擇保存路徑運(yùn)行結(jié)果:查看導(dǎo)出的模塊。在模塊保存的路徑中,用記事本打開(kāi)模塊文件,如圖1.20所示。程序分析:當(dāng)用戶(hù)導(dǎo)出模塊時(shí),可以自定義模塊的名稱(chēng),用戶(hù)可以根據(jù)定義的模塊名稱(chēng),來(lái)查看或者分析模塊功能。圖1.20查看導(dǎo)出的模塊案例6導(dǎo)入模塊功能說(shuō)明:前面案例已經(jīng)講解到,導(dǎo)出模塊的主要功能是為了在其他情況下,能夠使用該模塊的功能。使用模塊功能的主要方法就是導(dǎo)入模塊。語(yǔ)法說(shuō)明:導(dǎo)入模塊是導(dǎo)出模塊的反向操作。當(dāng)用戶(hù)導(dǎo)入模塊時(shí),VBE根據(jù)擴(kuò)展名來(lái)判斷導(dǎo)入的模塊類(lèi)型,具體是模塊、類(lèi)模塊或窗體。案例說(shuō)明:本案例將演示如何向VBA文檔中導(dǎo)入之前保存的模塊文件。編寫(xiě)代碼:(1)新建Excel文件,然后進(jìn)入VBE環(huán)境,選擇工具欄中的“文件”|“導(dǎo)入文件”命令,如圖1.21所示。(2)選擇需要導(dǎo)入的文件。在前面步驟中打開(kāi)的“導(dǎo)入文件”對(duì)話框中,選擇前面案例中導(dǎo)出的文件模塊,然后單擊“打開(kāi)”按鈕,如圖1.22所示。運(yùn)行結(jié)果:當(dāng)用戶(hù)單擊“打開(kāi)”按鈕后,在ExcelVBA中導(dǎo)入相應(yīng)的模塊,如圖1.23所示。圖1.21選擇導(dǎo)入文件圖1.22導(dǎo)入文件圖1.23導(dǎo)入的模塊程序分析:當(dāng)用戶(hù)向ExcelVBA文件中導(dǎo)入其他類(lèi)型的模塊文件,操作方法和本例類(lèi)似,這里不再重復(fù)介紹。案例7顯示屬性列表功能說(shuō)明:當(dāng)用戶(hù)在進(jìn)行VBA編程時(shí),經(jīng)常需要用到對(duì)象的屬性或者方法。ExcelVBA對(duì)同一個(gè)對(duì)象提供了多個(gè)屬性。如果用戶(hù)自行輸入屬性的代碼,會(huì)經(jīng)常犯錯(cuò)誤。在VBE中,當(dāng)用戶(hù)在窗口中輸入對(duì)象名稱(chēng)和句點(diǎn)時(shí),窗口中會(huì)顯示屬性列表,用戶(hù)可以在列表中選擇。語(yǔ)法說(shuō)明:在VBE代碼窗口中,當(dāng)用戶(hù)輸入對(duì)象名和一個(gè)句點(diǎn)后,如果沒(méi)有彈出“屬性/方法”列表框,可使用以下方法顯示該列表框?!ぐ聪隆癈trl+J”組合鍵。·單擊“編輯”工具欄中的“屬性/方法列表”按鈕?!び覔舸a窗口中的對(duì)象代碼,在彈出的快捷菜單中選擇“屬性/方法列表”命令。案例說(shuō)明:本例將演示如何在VBE的代碼窗口中顯示“屬性/方法列表”。編寫(xiě)代碼:(1)新建Excel文件,然后進(jìn)入VBE環(huán)境,插入新的模塊和過(guò)程,并在其中輸入代碼“ThisWorkbook”,然后輸入一個(gè)句點(diǎn),系統(tǒng)會(huì)彈出屬性和方法的列表,如圖1.24所示。(2)完成代碼語(yǔ)句。在屬性列表中選擇“ActiveSheet”選項(xiàng),完成代碼語(yǔ)句,如圖1.25所示。代碼如下:ThisWorkbook.ActiveSheet.Cells(2,3)="ExcelVBA"運(yùn)行結(jié)果:當(dāng)用戶(hù)完成代碼后,按快捷鍵F5,測(cè)試程序,得到的結(jié)果如圖1.26所示。程序分析:在“屬性/方法”列表中,圖標(biāo)表示內(nèi)容屬于方法,圖標(biāo)表示內(nèi)容屬于屬性。通過(guò)上面的圖標(biāo),用戶(hù)可以方便地判斷對(duì)應(yīng)的內(nèi)容。圖1.24顯示列表圖1.25完成代碼語(yǔ)句圖1.26程序調(diào)試結(jié)果第2章VBA語(yǔ)法基礎(chǔ)和其他編程語(yǔ)言類(lèi)似,VBA程序代碼也是由基礎(chǔ)語(yǔ)句組成的。本章將結(jié)合具體的例子來(lái)介紹VBA語(yǔ)法的基礎(chǔ)內(nèi)容。主要包括輸入語(yǔ)句、輸出語(yǔ)句、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)等。在講解例子的同時(shí)詳細(xì)分析了例子的應(yīng)用范圍。2.1輸入和輸出語(yǔ)句本節(jié)將詳細(xì)講解最基礎(chǔ)的語(yǔ)法結(jié)構(gòu):順序結(jié)構(gòu)。順序結(jié)構(gòu)不需要使用特殊的控制語(yǔ)句,編輯工具按照用戶(hù)編寫(xiě)的程序語(yǔ)句依次編譯,依次執(zhí)行。本節(jié)將詳細(xì)講解最基礎(chǔ)的順序語(yǔ)句:輸入語(yǔ)句和輸出語(yǔ)句。案例8輸出數(shù)據(jù)表功能說(shuō)明:在ExcelVBA中,用戶(hù)可以使用Print方法輸入各種類(lèi)型的數(shù)據(jù)。同時(shí),用戶(hù)可以在程序代碼中設(shè)置不同的輸出,來(lái)檢測(cè)程序代碼。語(yǔ)法說(shuō)明:在ExcelVBA中,Print方法主要應(yīng)用于Debug對(duì)象,其語(yǔ)法格式如下:Debug.Print[outputlist]參數(shù)outputlist表示需要打印的表達(dá)式或列表。如果省略參數(shù),則打印空白行。Print方法先計(jì)算表達(dá)式的數(shù)值,然后輸出結(jié)果。在outputlist參數(shù)中還可以使用分隔符,格式化輸出的結(jié)果,分隔符有以下幾種:·spc(n):插入n個(gè)空格到輸出數(shù)據(jù)之間?!ab(n):移動(dòng)光標(biāo)到適當(dāng)位置,n為移動(dòng)的列數(shù)?!し痔?hào):表示前后兩個(gè)數(shù)據(jù)項(xiàng)連在一起輸出?!ざ禾?hào):以14個(gè)字符為一個(gè)輸出區(qū),每個(gè)數(shù)據(jù)輸出到對(duì)應(yīng)的輸出區(qū)。案例說(shuō)明:本例使用Print方法向VBE的立即窗口中輸出數(shù)據(jù)表。編寫(xiě)代碼:輸出數(shù)據(jù)表的代碼如下:SubGetNumbers()DimiAsIntegerDimjAsIntegerFori=1To5Forj=1ToiDebug.Printi;"+";j;"=";i+j;"";NextDebug.PrintNextEndSub運(yùn)行結(jié)果:按功能鍵“F5”運(yùn)行子過(guò)程,在“立即窗口”輸出數(shù)據(jù)計(jì)算表,如圖2.1所示。圖2.1輸出結(jié)果程序分析:在上面的程序代碼中,利用循環(huán)結(jié)構(gòu)依次輸出不同情況的數(shù)字計(jì)算結(jié)果。關(guān)于循環(huán)結(jié)構(gòu)的知識(shí),將在后面章節(jié)中詳細(xì)講解。案例9輸入用戶(hù)名功能說(shuō)明:在ExcelVBA開(kāi)發(fā)過(guò)程中,經(jīng)常需要和用戶(hù)進(jìn)行交互。例如,很多程序代碼的結(jié)果依賴(lài)于用戶(hù)輸入的信息。這個(gè)時(shí)候,用戶(hù)需要調(diào)用輸入函數(shù),提供用戶(hù)輸入信息,并接收用戶(hù)所輸入的信息。語(yǔ)法說(shuō)明:在ExcelVBA中,用戶(hù)可以使用InputBox函數(shù)輸入信息。該函數(shù)將打開(kāi)對(duì)話框,用戶(hù)可以在對(duì)話框中輸入數(shù)據(jù),并返回所輸入的內(nèi)容。其語(yǔ)法格式如下:InputBox(prompt[,title][,default][,xpos][,ypos][,helpfile,context])下面解釋各參數(shù)的含義。·prompt:對(duì)話框消息出現(xiàn)的字符串表達(dá)式。最大長(zhǎng)度為1024個(gè)字符。如果需要在對(duì)話框中顯示多行數(shù)據(jù),則可在各行之間用回車(chē)符或換行符來(lái)分隔。·title:對(duì)話框標(biāo)題欄中的字符串。如果省略該參數(shù),則把應(yīng)用程序名放入標(biāo)題欄中?!efault:顯示在文本框中的字符串。如果省略該參數(shù),則文本框?yàn)榭??!pos:和ypos成對(duì)出現(xiàn),指定對(duì)話框的左邊與屏幕左邊的水平距離。如果省略該參數(shù),則對(duì)話框會(huì)在水平方向居中?!pos:和xpos成對(duì)出現(xiàn),指定對(duì)話框的上邊與屏幕上邊的距離。如果省略該參數(shù),則對(duì)話框被放置在屏幕垂直方向距下邊大約三分之一的位置。·helpfile:設(shè)置對(duì)話框的幫助文件,可省略。·context:設(shè)置對(duì)話框的幫助主題編號(hào),可省略。案例說(shuō)明:本例將演示使用InputBox函數(shù)對(duì)話框輸入信息,然后將信息輸出到立即窗口中。編寫(xiě)代碼:在模塊中輸入以下代碼:SubCetUserName()DimTitleAsStringDimNameAsStringDimStrNameAsStringTitle="輸入用戶(hù)名"Name="在選框中輸入用戶(hù)名:"StrName=InputBox(Name,Title)Debug.Print"用戶(hù)名:";StrNameEndSub運(yùn)行結(jié)果:(1)按功能鍵“F5”運(yùn)行子過(guò)程,將彈出“輸入個(gè)人信息”窗口,如圖2.2所示。在對(duì)話框中輸入內(nèi)容后單擊“確定”按鈕。(2)在“立即窗口”中將輸出這些內(nèi)容,如圖2.3所示。圖2.2輸入用戶(hù)名圖2.3輸出結(jié)果程序分析:本案例比較簡(jiǎn)單,直接使用InputBox函數(shù)來(lái)輸入信息。對(duì)于InputBox函數(shù)的其他參數(shù),都直接使用默認(rèn)數(shù)值。在實(shí)際開(kāi)發(fā)中,用戶(hù)可以設(shè)置這些參數(shù)的數(shù)值,實(shí)現(xiàn)不同的功能。案例10事件確認(rèn)功能說(shuō)明:在ExcelVBA編碼和調(diào)試代碼的過(guò)程中,經(jīng)常需要獲取代碼運(yùn)行的階段性結(jié)果或者信息。例如,在編寫(xiě)數(shù)據(jù)處理的代碼中,用戶(hù)需要跟蹤某變量的數(shù)值變化。因此,需要在程序進(jìn)行的不同地方,顯示該變量的數(shù)值。語(yǔ)法說(shuō)明:在ExcelVBA中,用戶(hù)可以使用MsgBox函數(shù)來(lái)顯示提示信息。MsgBox函數(shù)可打開(kāi)對(duì)話框,顯示提示信息。并根據(jù)用戶(hù)選擇對(duì)話框中的按鈕,執(zhí)行不同的程序代碼。其語(yǔ)法格式如下:Value=MsgBox(prompt[,buttons][,title][,helpfile,context])通過(guò)函數(shù)返回值可獲得用戶(hù)單擊的按鈕,并可根據(jù)按鈕數(shù)值而選擇程序段來(lái)執(zhí)行。函數(shù)有5個(gè)參數(shù),各參數(shù)的意義與InputBox函數(shù)參數(shù)的意義類(lèi)似。對(duì)于buttons參數(shù),其含義是指定顯示按鈕的數(shù)目及形式、使用提示圖標(biāo)樣式以及默認(rèn)按鈕等。其常數(shù)值如表2.1所示。表2.1中的數(shù)值(或常數(shù))可分為四組,下面介紹各組數(shù)值的功能?!さ谝唤M值(0~5):確定對(duì)話框中按鈕的類(lèi)型與數(shù)量?!さ诙M值(16,32,48,64):確定對(duì)話框中顯示的圖標(biāo)?!さ谌M值(0,256,512):設(shè)置對(duì)話框的默認(rèn)活動(dòng)按鈕?!さ谒慕M值(0,4096):確定消息框的強(qiáng)制響應(yīng)性。buttons參數(shù)由上面4組數(shù)值組成,其組成方法是:從每一類(lèi)中選擇一個(gè)值,把這些數(shù)值組合起來(lái),就是buttons參數(shù)的值。案例說(shuō)明:本例的主要功能是當(dāng)用戶(hù)激活工作表Sheet1時(shí),Excel顯示激活的信息。編寫(xiě)代碼:(1)進(jìn)入VBE,在代碼窗口左上方的對(duì)象列表中選擇“Worksheet”,如圖2.4所示。(2)在代碼窗口右上方的事件列表中選擇“Activate”,如圖2.5所示。圖2.4對(duì)象列表圖2.5事件列表(3)在上面生成的事件過(guò)程中輸入以下代碼:PrivateSubWorksheet_Activate()MsgBox("你激活了Sheet1工作表!")EndSub運(yùn)行結(jié)果:打開(kāi)工作簿,然后選擇Sheet1工作表,結(jié)果如圖2.6所示。程序分析:在本例中,使用的是MsgBox函數(shù)的最簡(jiǎn)單形式,也就是直接使用MsgBox函數(shù)顯示一個(gè)字符串信息。在實(shí)際開(kāi)發(fā)中,用戶(hù)可以設(shè)置各參數(shù),得到不同的顯示結(jié)果。圖2.6顯示的提示信息2.2選擇結(jié)構(gòu)在ExcelVBA中,除了常見(jiàn)的順序結(jié)構(gòu)之外,還有一種常見(jiàn)結(jié)構(gòu):選擇結(jié)構(gòu)。選擇結(jié)構(gòu)的程序?qū)⒏鶕?jù)給定的條件選擇執(zhí)行后續(xù)的代碼。選擇結(jié)構(gòu)在日常生活中應(yīng)用十分廣泛,本節(jié)將結(jié)合具體的例子來(lái)講解如何使用選擇結(jié)構(gòu)。案例11判斷優(yōu)秀員工功能說(shuō)明:在實(shí)際開(kāi)發(fā)中,當(dāng)用戶(hù)只需要進(jìn)行一種情況的判斷時(shí),最方便的方法是If……Then語(yǔ)句。If后面的語(yǔ)句就是判斷的條件,Then后面的語(yǔ)句是需要執(zhí)行的操作。語(yǔ)法說(shuō)明:在ExcelVBA中,使用If……Then語(yǔ)句可有條件地執(zhí)行語(yǔ)句。其語(yǔ)法格式如下:If邏輯表達(dá)式Then語(yǔ)句1語(yǔ)句1……語(yǔ)句nEndIf邏輯表達(dá)式可以是計(jì)算數(shù)值的表達(dá)式,VBA將0看作False,而非零數(shù)值都看作True。該語(yǔ)句的執(zhí)行順序是:當(dāng)邏輯表達(dá)式的值是True,則執(zhí)行位于Then與EndIf之間的語(yǔ)句;當(dāng)邏輯表達(dá)式的值是False,則不執(zhí)行Then與EndIf之間的語(yǔ)句,直接跳出循環(huán)結(jié)構(gòu),其流程圖如圖2.7所示。圖2.7If……Then語(yǔ)句流程圖If……Then結(jié)構(gòu)還有單行結(jié)構(gòu)條件語(yǔ)句。其語(yǔ)法格式如下:If邏輯表達(dá)式Then語(yǔ)句該語(yǔ)句的功能為:當(dāng)邏輯表達(dá)式的值是True,則執(zhí)行Then后的語(yǔ)句;當(dāng)邏輯表達(dá)式的值是False,則不執(zhí)行Then后的語(yǔ)句。案例說(shuō)明:某公司統(tǒng)計(jì)了員工上個(gè)月的銷(xiāo)量,根據(jù)銷(xiāo)量數(shù)值,公司判定銷(xiāo)量數(shù)值大于350的員工為優(yōu)秀員工。對(duì)于優(yōu)秀員工將其對(duì)應(yīng)的單元格標(biāo)紅,原始數(shù)據(jù)如圖2.8所示。圖2.8原始數(shù)據(jù)編寫(xiě)代碼:判斷優(yōu)秀員工的代碼如下:SubShowExcel()DimiAsIntegerFori=2To10IfSheets(1).Cells(i,2).Value>350ThenCells(i,2).Interior.ColorIndex=3EndIfNextEndSub運(yùn)行結(jié)果:打開(kāi)工作簿,然后運(yùn)行程序代碼,結(jié)果如圖2.9所示。圖2.9運(yùn)行結(jié)果程序分析:從上述案例的結(jié)果中可以看出,當(dāng)程序處理的只有一個(gè)條件時(shí),使用If……Then語(yǔ)句可以很便利地解決問(wèn)題。案例12根據(jù)編號(hào)分組功能說(shuō)明:當(dāng)用戶(hù)在實(shí)際開(kāi)發(fā)時(shí),經(jīng)常需要進(jìn)行多條件判斷。例如,當(dāng)滿(mǎn)足條件1時(shí),執(zhí)行第一種操作;當(dāng)不滿(mǎn)足條件1時(shí),執(zhí)行另外一種操作。當(dāng)用戶(hù)需要編寫(xiě)這些類(lèi)型的代碼時(shí),前面案例中的If……Then語(yǔ)句將無(wú)法滿(mǎn)足,用戶(hù)需要使用If……Then……Else語(yǔ)句。語(yǔ)法說(shuō)明:在ExcelVBA中,用戶(hù)可以使用If……Then……Else語(yǔ)句,根據(jù)條件是否成立分別執(zhí)行兩段不同的代碼,其語(yǔ)法格式如下:If邏輯表達(dá)式Then語(yǔ)句序列1Else語(yǔ)句序列2EndIf該語(yǔ)句的執(zhí)行過(guò)程是:當(dāng)邏輯表達(dá)式的值是True時(shí),將執(zhí)行“語(yǔ)句序列1”中的各條語(yǔ)句;當(dāng)“邏輯表達(dá)式”的值為False時(shí),就執(zhí)行“語(yǔ)句序列2”中的各條語(yǔ)句,其流程圖如圖2.10所示。圖2.10If……Then……Else語(yǔ)句流程圖案例說(shuō)明:某公司統(tǒng)計(jì)了員工上個(gè)月的銷(xiāo)量,公司需要根據(jù)員工編號(hào)判斷員工的組別。當(dāng)編號(hào)是偶數(shù)的時(shí)候,員工屬于女組;當(dāng)編號(hào)是奇數(shù)時(shí),員工屬于男組,原始數(shù)據(jù)如圖2.11所示。編寫(xiě)代碼:分組的程序代碼如下:SubShowTeam()DimiAsIntegerFori=2To10IfSheets(1).Cells(i,1).ValueMod2ThenCells(i,3).Value="男組"ElseCells(i,3).Value="女組"EndIfNextEndSub圖2.11原始數(shù)據(jù)運(yùn)行結(jié)果:打開(kāi)工作簿,運(yùn)行程序代碼,得到的結(jié)果如圖2.12所示。圖2.12運(yùn)行結(jié)果程序分析:從上面的典型例子中可以看出,當(dāng)在實(shí)際情況中需要根據(jù)某條件執(zhí)行兩種不同的操作時(shí),可以使用If……Then……Else語(yǔ)句便利地完成任務(wù)。案例13計(jì)算消費(fèi)金額功能說(shuō)明:在實(shí)際開(kāi)發(fā)中,用戶(hù)可能需要處理多條件問(wèn)題。例如,某公司根據(jù)多個(gè)銷(xiāo)量,將折扣分為多個(gè)檔次。在計(jì)算銷(xiāo)售金額的時(shí)候,需要判斷具體銷(xiāo)售屬于哪個(gè)檔次,然后根據(jù)該檔次的折扣值,計(jì)算銷(xiāo)售金額。這個(gè)時(shí)候,用戶(hù)可以使用SelectCase語(yǔ)句。語(yǔ)法說(shuō)明:在ExcelVBA中,SelectCase結(jié)構(gòu)的語(yǔ)法格式如下:SelectCase測(cè)試表達(dá)式Case表達(dá)式列表1語(yǔ)句序列1Case表達(dá)式列表2語(yǔ)句序列2……CaseElse語(yǔ)句序列nEndSelect根據(jù)上面的程序結(jié)構(gòu),代碼首先計(jì)算“測(cè)試表達(dá)式”的值,然后將表達(dá)式的值與結(jié)構(gòu)中的Case的值進(jìn)行比較。如果相等,就執(zhí)行與該Case語(yǔ)句下面的語(yǔ)句塊,執(zhí)行完畢再跳轉(zhuǎn)到EndSelect語(yǔ)句后執(zhí)行,其流程圖如圖2.13所示。圖2.13SelectCase語(yǔ)句流程圖在SelectCase結(jié)構(gòu)中,“測(cè)試表達(dá)式”通常是數(shù)值或字符型的變量?!氨磉_(dá)式列表”可以是一個(gè)或幾個(gè)值的列表。如果在列表中有多個(gè)值,需要用逗號(hào)將各值分開(kāi)。表達(dá)式列表可以分下面幾種情況?!け磉_(dá)式:表示具體的取值。例如,Case5,8,9。·表達(dá)式ATo表達(dá)式B:表示數(shù)據(jù)范圍。例如,Case8To12,表示8~12之間的值?!s比較運(yùn)算符表達(dá)式:表示范圍。例如,CaseIs>45,表示所有大于45的值?!ひ陨先N情況的混合。例如,Case8To12,17,Is>35。案例說(shuō)明:某銷(xiāo)售公司根據(jù)商品的銷(xiāo)量實(shí)行不同的折扣,公司需要根據(jù)銷(xiāo)量和價(jià)格,計(jì)算其銷(xiāo)量的總額,其中原始數(shù)據(jù)如圖2.14所示。圖2.14原始數(shù)據(jù)編寫(xiě)代碼:計(jì)算銷(xiāo)量金額的代碼如下:SubGetIncome()DimIntSaleAsIntegerDimdiscountAsSingleDimSingleMoneyAsSingleDimiAsIntegerDimIntPricAsIntegerFori=2To10IntPric=Cells(i,1).ValueIntSale=Cells(i,2).ValueSelectCaseIntSaleCaseIs<=100discount=0.95CaseIs<=150discount=0.85CaseIs<=200discount=0.7CaseIs<=300discount=0.65CaseElsediscount=0.6EndSelectSingleMoney=IntSale*IntPric*discountCells(i,3).Value=SingleMoneyNextiEndSub運(yùn)行結(jié)果:打開(kāi)工作簿,運(yùn)行程序代碼,得到的結(jié)果如圖2.15所示。圖2.15計(jì)算銷(xiāo)售金額程序分析:用戶(hù)可以使用If……Then……Else結(jié)構(gòu)來(lái)重新編寫(xiě)上面的案例,然后和SelectCase結(jié)構(gòu)進(jìn)行比較,可以發(fā)現(xiàn)SelectCase結(jié)構(gòu)在處理多條件的情況下,要簡(jiǎn)潔很多。2.3循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)是ExcelVBA經(jīng)常使用的一種程序結(jié)構(gòu),當(dāng)用戶(hù)需要使用程序代碼反復(fù)完成同一任務(wù)的時(shí)候,則需要使用循環(huán)結(jié)構(gòu)。本節(jié)將結(jié)合具體例子來(lái)講解如何使用循環(huán)結(jié)構(gòu)。案例14計(jì)算自然數(shù)之和功能說(shuō)明:當(dāng)用戶(hù)進(jìn)行循環(huán)運(yùn)算的時(shí)候,有時(shí)可能了解具體循環(huán)的次數(shù)。這個(gè)時(shí)候可以使用For……Next循環(huán)語(yǔ)句依次完成循環(huán)運(yùn)算。其中,最典型的例子就是計(jì)算自然數(shù)的總和。當(dāng)用戶(hù)需要計(jì)算自然數(shù)之和時(shí),循環(huán)次序已經(jīng)由自然數(shù)的大小決定。語(yǔ)法說(shuō)明:在ExcelVBA中,如果知道循環(huán)的次數(shù),可以使用For……Next循環(huán)語(yǔ)句來(lái)執(zhí)行循環(huán)。For循環(huán)的語(yǔ)法如下:For循環(huán)變量=初始值To終值[Step步長(zhǎng)值]語(yǔ)句序列1[ExitFor][語(yǔ)句序列2]Next[循環(huán)變量]在上面的結(jié)構(gòu)中,循環(huán)變量控制循環(huán),每重復(fù)一次循環(huán),循環(huán)變量的值將以步長(zhǎng)值相加。步長(zhǎng)的默認(rèn)數(shù)值是1,并且可正可負(fù)。如果步長(zhǎng)值為正,則初始值必須小于等于終值,才執(zhí)行循環(huán)體。如果步長(zhǎng)值為負(fù),則初始值必須大于等于終值,才能執(zhí)行循環(huán)體。For……Next循環(huán)結(jié)構(gòu)的流程圖如圖2.16所示。案例說(shuō)明:根據(jù)循環(huán)結(jié)構(gòu)計(jì)算1+2+3+……+1000的數(shù)值。編寫(xiě)代碼:計(jì)算自然數(shù)之和程序代碼如下:SubGetSums()DimclockAsIntegerDimsumAsLongDimcounterAsIntegerclock=1sum=0counter=1Forcounter=1To1000sum=sum+clockclock=clock+1NextMsgBox"1+2+3+……+1000="&sum,vbOKOnly,"計(jì)算自然數(shù)之和"EndSub圖2.16For……Next流程圖運(yùn)行結(jié)果:運(yùn)行程序代碼,結(jié)果如圖2.17所示。程序分析:從上面的結(jié)果中可以看出,由于用戶(hù)計(jì)算的是自然數(shù)之和。所以,在代碼中不需要設(shè)置參數(shù)Step的數(shù)值。圖2.17運(yùn)行結(jié)果案例15為單元格賦值功能說(shuō)明:在Excel中,有一種特殊的循環(huán)。在其循環(huán)結(jié)構(gòu)中,其循環(huán)運(yùn)算的范圍是一個(gè)區(qū)域。例如,用戶(hù)需要在某工作表的單元格區(qū)域中進(jìn)行循環(huán)。這個(gè)時(shí)候,用戶(hù)可以使用ForEach……Next循環(huán)語(yǔ)句。語(yǔ)法說(shuō)明:在ExcelVBA中,F(xiàn)orEach……Next循環(huán)語(yǔ)句的語(yǔ)法格式如下:ForEach元素In對(duì)象集合[語(yǔ)句序列1][ExitFor][語(yǔ)句序列2]Next該循環(huán)結(jié)構(gòu)可在對(duì)象集合每個(gè)元素中執(zhí)行循環(huán)體。集合中必須至少有一個(gè)元素,才會(huì)進(jìn)入ForEach循環(huán)體。循環(huán)結(jié)構(gòu)先對(duì)“對(duì)象集合”中的第一個(gè)元素執(zhí)行循環(huán)語(yǔ)句,然后對(duì)“對(duì)象集合”其他的元素執(zhí)行循環(huán)語(yǔ)句,當(dāng)“對(duì)象集合”中的所有元素都執(zhí)行結(jié)束,會(huì)退出循環(huán)。在循環(huán)體中,用戶(hù)可以設(shè)置多個(gè)ExitFor語(yǔ)句,退出循環(huán)。案例說(shuō)明:本例的主要功能是利用循環(huán)結(jié)構(gòu)為單元格賦值。編寫(xiě)代碼:為單元格賦值的程序代碼如下:SubGetValues()DimcounterAsIntegerDimrngAsRangeWorksheets("sheet1").ActivateForEachrngInRange("A1:E10")rng.Value=countercounter=counter+1NextEndSub運(yùn)行結(jié)果:運(yùn)行程序代碼,結(jié)果如圖2.18所示。圖2.18為單元格區(qū)域賦值程序分析:從上述例子的結(jié)果中可以看出,循環(huán)結(jié)構(gòu)首先填充第一行單元格的數(shù)值,然后依次填充其他行的數(shù)值,直到循環(huán)結(jié)束。案例16計(jì)算階乘和功能說(shuō)明:在實(shí)際應(yīng)用開(kāi)發(fā)中,用戶(hù)也許不僅僅面對(duì)循環(huán)問(wèn)題,或者僅僅面對(duì)選擇問(wèn)題。很多復(fù)雜問(wèn)題都是嵌套結(jié)構(gòu),循環(huán)結(jié)構(gòu)和分支結(jié)構(gòu)的嵌套,或者循環(huán)結(jié)構(gòu)之間的嵌套等。語(yǔ)法說(shuō)明:在ExcelVBA中,編寫(xiě)嵌套循環(huán)的代碼時(shí),要注意循環(huán)語(yǔ)句的配對(duì)情況。如圖2.19a所示,是正確的嵌套關(guān)系,Next關(guān)閉了內(nèi)層的For循環(huán),而Loop關(guān)閉了外層的Do循環(huán)。同樣,在嵌套的If語(yǔ)句中,EndIf語(yǔ)句自動(dòng)與最靠近的If語(yǔ)句配對(duì)。嵌套的Do……Loop結(jié)構(gòu)的工作方式也是一樣的,最內(nèi)圈的Loop語(yǔ)句與最內(nèi)圈的Do語(yǔ)句匹配。圖2.19b所示是錯(cuò)誤的嵌套關(guān)系。圖2.19嵌套的結(jié)構(gòu)案例說(shuō)明:本例將演示計(jì)算1!+2!+3!+……+10!的結(jié)果,并輸出結(jié)果。編寫(xiě)代碼:計(jì)算結(jié)果的程序代碼如下:SubSumProduct()DimsumAsDoubleDimiAsIntegerDimDouProductAsDoubleDimjAsIntegersum=0Fori=1To10DouProduct=1Forj=1ToiDouProduct=DouProduct*jNextsum=sum+DouProductNextMsgBox"1!+2!+3!+……+10!="&sum,vbOKOnly,"求階乘的和"EndSub運(yùn)行結(jié)果:運(yùn)行程序代碼,得到的結(jié)果如圖2.20所示。圖2.20計(jì)算階乘的和程序分析:使用ExcelVBA的嵌套結(jié)構(gòu),用戶(hù)可以處理許多復(fù)雜問(wèn)題,只是在使用嵌套結(jié)構(gòu)時(shí),用戶(hù)需要特別注意匹配問(wèn)題。第3章單元格的基本操作本章將詳細(xì)介紹如何操作Excel中的單元格對(duì)象。在Excel中,單元格對(duì)象是用戶(hù)經(jīng)常需要處理的對(duì)象。同時(shí),單元格對(duì)象也是用戶(hù)操作Excel的最小單元。在本章中,將對(duì)涉及單元格的常見(jiàn)操作進(jìn)行介紹。3.1獲取單元格的引用在ExcelVBA中,經(jīng)常要使用到對(duì)單元格的引用,然后使用屬性和方法對(duì)區(qū)域進(jìn)行操作。根據(jù)單元格區(qū)域的使用屬性不同,主要包括以下幾種情況:·單個(gè)單元格?!ざ鄠€(gè)連續(xù)或者不連續(xù)單元格組成的區(qū)域?!ふ谢蛘?。如果用戶(hù)希望使用VBA代碼對(duì)單元格區(qū)域進(jìn)行操作,就必須將單元格區(qū)域賦值給某個(gè)變量,也就是首先獲得某個(gè)單元格區(qū)域的引用。案例17使用A1樣式引用單元格功能說(shuō)明:在使用Excel中,A1樣式是用戶(hù)最熟悉的一種引用樣式。A1樣式其實(shí)就是列名和行名的組合,確定對(duì)應(yīng)的單元格。在ExcelVBA中,當(dāng)用戶(hù)需要對(duì)單元格進(jìn)行操作的時(shí)候,需要首先使用代碼引用單元格。語(yǔ)法說(shuō)明:在VBA中,通過(guò)Range對(duì)象的Range屬性返回Range對(duì)象。Range屬性返回一個(gè)單元格或單元格區(qū)域,對(duì)區(qū)域的引用如果使用A1樣式,需將引用字符串包含在引號(hào)中。另外還可以使用以下方式引用單元格?!A3]:引用單元格“A3”?!ctiveCell:當(dāng)前單元格。在本例中,因?yàn)橐玫膯卧駷閷?duì)象,因此需要?jiǎng)?chuàng)建對(duì)象變量。創(chuàng)建對(duì)象變量通常分為兩個(gè)步驟。(1)聲明對(duì)象變量。與聲明普通變量類(lèi)似,用戶(hù)可以使用Dim語(yǔ)句或其他的聲明語(yǔ)句之一來(lái)聲明對(duì)象變量。引用對(duì)象的變量必須是Variant、Object,或是一個(gè)對(duì)象的指定類(lèi)型。下面的聲明在Excel中都是有效的:DimMyRange'聲明Variant數(shù)據(jù)類(lèi)型DimMyRangeAsObject'聲明Object數(shù)據(jù)類(lèi)型DimMyRangeAsRange'聲明Range類(lèi)型(2)賦值對(duì)象變量給對(duì)象。在ExcelVBA中,需要使用Set語(yǔ)句賦值對(duì)象給對(duì)象變量,可以賦值對(duì)象表達(dá)式或是Nothing。下面的賦值語(yǔ)句在ExcelVBA中是有效的:SetMyRange=Range("B3")'賦值對(duì)象引用SetMyRange=Nothing'中斷關(guān)聯(lián)設(shè)置對(duì)象變量為Nothing,會(huì)中斷此對(duì)象變量與其他對(duì)象的關(guān)聯(lián),可預(yù)防因意外改變變量而更改對(duì)象。在關(guān)閉關(guān)聯(lián)對(duì)象后,對(duì)象變量總是設(shè)置為Nothing,所以可以檢測(cè)對(duì)象變量是否指到有效的對(duì)象。案例說(shuō)明:本例中,用戶(hù)需要首先引用單元格D3,然后在對(duì)應(yīng)的單元格中添加字符串“IloveExcelVBA”。編寫(xiě)代碼:實(shí)現(xiàn)A1樣式引用的代碼如下:SubForCell()DimRngCellAsRangeSetRngCell=Range("D3")WithRngCell.Value="IloveExcelVBA".Font.Name="Tahoma".Font.Italic=TrueEndWithSetRngCell=NothingEndSub運(yùn)行結(jié)果:運(yùn)行程序代碼,得到的結(jié)果如圖3.1所示。圖3.1A1樣式引用結(jié)果程序分析:在上面的代碼中,通過(guò)下面的代碼段:DimRngCellAsRangeSetRngCell=Range("D3")定義了Range變量,然后通過(guò)Range("D3")獲取對(duì)單元格D3的引用。案例18使用R1C1樣式引用單元格功能說(shuō)明:在Excel中,R1C1的引用格式在開(kāi)發(fā)過(guò)程中也是經(jīng)常用到的。在很多情況下,使用單元格的行列序號(hào)來(lái)引用單元格,會(huì)給程序開(kāi)發(fā)帶來(lái)更大的便利。例如,當(dāng)用戶(hù)需要在單元格區(qū)域內(nèi)進(jìn)行循環(huán)設(shè)置的時(shí)候,使用R1C1樣式就便利很多。因?yàn)椋瑢?duì)于循環(huán)而言,數(shù)字會(huì)更加方便,而A1樣式中的列名字母則不適合循環(huán)。語(yǔ)法說(shuō)明:Excel的工作表由行和列構(gòu)成。通過(guò)使用行列索引號(hào),可用Cells屬性引用單個(gè)單元格。該屬性返回代表單個(gè)單元格的Range對(duì)象。Cells(3,2)返回對(duì)工作表中單元格B3的引用。同時(shí),R1C1樣式可以使用多種引用方式:絕對(duì)引用、相對(duì)引用和混合引用,得到的結(jié)果都是一樣的。因此,用戶(hù)在實(shí)際的編程中,可以根據(jù)情況選擇合適的方法。使用Cells屬性引用單元格時(shí),用戶(hù)可以使用變量替代行列索引號(hào),所以Cells屬性適合在單元格區(qū)域中循環(huán)。另外,使用Cells屬性還可按以下方式引用單元格區(qū)域:Cells(2,"B"):表示第2行B列如果使用Cells屬性時(shí),不指定行列索引號(hào),程序?qū)⒎祷毓ぷ鞅砩纤袉卧竦腞ange對(duì)象。案例說(shuō)明:本例主要的功效就是利用索引號(hào)引用單元格,并在單元格中輸入數(shù)字。編寫(xiě)代碼:R1C1樣式的代碼如下:SubR1C1_cells()DimiAsIntegerDimjAsIntegerFori=1To4Forj=1To4Cells(i,j).Value=(i-1)*4+jNextNextEndSub運(yùn)行結(jié)果:運(yùn)行程序代碼,得到的結(jié)果如圖3.2所示。圖3.2R1C1樣式引用單元格程序分析:從上面的例子中可以看出,當(dāng)用戶(hù)使用R1C1的樣式引用單元格時(shí),可以很方便地使用循環(huán)結(jié)構(gòu),進(jìn)行各種復(fù)雜的運(yùn)算。案例19引用多個(gè)單元格區(qū)域功能說(shuō)明:在使用Excel分析數(shù)據(jù)或者處理問(wèn)題時(shí),有時(shí)需要同時(shí)選擇多個(gè)單元格,然后再進(jìn)行處理。同時(shí),這些單元格區(qū)域在范圍上可能并不連續(xù),因此需要使用特殊方法引用單元格區(qū)域。當(dāng)單元格區(qū)域范圍比較多,同時(shí)比較雜亂,沒(méi)有規(guī)律的時(shí)候,對(duì)單個(gè)單元格區(qū)域依次選擇,效率很低。因此,需要使用特定的語(yǔ)法對(duì)多個(gè)單元格區(qū)域進(jìn)行引用。語(yǔ)法說(shuō)明:在ExcelVBA中,可以使用兩種法選擇單元格區(qū)域。如果是連續(xù)的單元格區(qū)域,可以使用左上角和右下角的單元格來(lái)確定區(qū)域。例如,使用下面的代碼:Range("B2:D3")表示引用的是單元格B2:D3的區(qū)域。如果是不連續(xù)的單元格區(qū)域,可以選擇使用Range屬性。其中,使用Range屬性的方法是,用逗號(hào)將不同的單元格區(qū)域隔開(kāi),例如:Range("B2:D3,E4:F8")在上面的代碼中,逗號(hào)必須在引號(hào)的內(nèi)部。案例說(shuō)明:在本例中,用戶(hù)需要通過(guò)程序代碼同時(shí)選中單元格中多個(gè)不連續(xù)的單元格區(qū)域,然后設(shè)置這些單元格區(qū)域的填充紅色。編寫(xiě)代碼:本例代碼如下:Subselect_range()DimrngAsRangeSetrng=Range("A1:B4,D1:G6,B8:C9")rng.SelectSelection.Interior.ColorIndex=3Setrng=NothingEndSub運(yùn)行結(jié)果:運(yùn)行程序代碼,得到的結(jié)果如圖3.3所示。圖3.3選擇多個(gè)單元格區(qū)域程序分析:當(dāng)用戶(hù)使用代碼Range("A1:B3","D4:E5")時(shí),程序選擇的單元格區(qū)域是A1:E5,即以第一個(gè)區(qū)域左上角單元格為起點(diǎn),第二個(gè)區(qū)域右下角單元格為終點(diǎn),連接成一個(gè)新的連續(xù)區(qū)域。案例20合并單元格區(qū)域功能說(shuō)明:前面的案例說(shuō)明了如何使用Range屬性引用多個(gè)單元格區(qū)域。在ExcelVBA中,用戶(hù)還可以使用Union方法來(lái)合并不同的單元格區(qū)域。在本案例中,將詳細(xì)講解如何使用Union方法來(lái)合并單元格的區(qū)域。語(yǔ)法說(shuō)明:使用Application對(duì)象的Union方法,可將多個(gè)單元格區(qū)域組合到Range對(duì)象中。Union方法的語(yǔ)法格式如下:表達(dá)式.Union(Arg1,Arg2,Arg3,Arg4,Arg5,Arg6,Arg7,Arg8,Arg9,Arg10,Arg11,Arg12,Arg13,Arg14,Arg15,Arg16,Arg17,Arg18,Arg19,Arg20,Arg21,Arg22,Arg23,Arg24,Arg25,Arg26,Arg27,Arg28,Arg29,Arg30)用戶(hù)在使用Union方法時(shí),至少需要兩個(gè)單元格區(qū)域,最多可合并30個(gè)單元格區(qū)域。例如:Union(Range("A1:C3"),Range("E1:F5"))案例說(shuō)明:在本例中,用戶(hù)需要引用多個(gè)單元格區(qū)域,然后在引用區(qū)域的單元格中添加隨機(jī)數(shù)。編寫(xiě)代碼:合并單元格區(qū)域的具體代碼如下:Subunion_range()Dimrng1AsRangeDimrng2AsRangeDimrng3AsRangeSetrng1=Range("A1:B3")Setrng2=Range("D4:F6")Setrng3=Union(rng1,rng2)rng3.Formula="=int(100*RAND()+20)"EndSub運(yùn)行結(jié)果:運(yùn)行程序代碼,得到的結(jié)果如圖3.4所示。圖3.4合并單元格區(qū)域的結(jié)果程序分析:在本例的代碼中,首先使用兩個(gè)對(duì)象變量獲取單元格區(qū)域,然后使用Union方法將兩個(gè)區(qū)域合并為一個(gè)區(qū)域。案例21引用合并區(qū)域的子區(qū)域功能說(shuō)明:當(dāng)用戶(hù)同時(shí)選中多個(gè)單元格區(qū)域時(shí),某些操作不能在選定區(qū)域內(nèi)同時(shí)執(zhí)行,必須在選定區(qū)域內(nèi)的單個(gè)子區(qū)域上循環(huán),對(duì)每個(gè)單獨(dú)的子區(qū)域分別執(zhí)行該操作。因此,這個(gè)時(shí)候有必要引用合并區(qū)域的子區(qū)域。語(yǔ)法說(shuō)明:在ExcelVBA中,用戶(hù)選定多個(gè)區(qū)域后,將生成Areas集合。Areas集合的每個(gè)成員是Range對(duì)象。選定區(qū)域內(nèi)每個(gè)離散的連續(xù)單元格區(qū)域都有Range對(duì)象。如果選定區(qū)域內(nèi)只有一個(gè)子區(qū)域,則Areas集合包含一個(gè)與該選定區(qū)域?qū)?yīng)的Range對(duì)象。使用Areas(index)可從集合中返回單個(gè)Range對(duì)象。該索引號(hào)對(duì)應(yīng)選定這些區(qū)域的順序。下例中,如果當(dāng)前選定區(qū)域包含多個(gè)子區(qū)域,就清除該選定區(qū)域中的第一個(gè)子區(qū)域。案例說(shuō)明:選擇工作表中的多個(gè)單元格區(qū)域,將其單元格區(qū)域進(jìn)行合并,然后依次遍歷合并后的單元格區(qū)域的各個(gè)子區(qū)域。編寫(xiě)代碼:引用合并區(qū)域的子區(qū)域的具體代碼如下:SubGet_Part_rubrange()Dimrng1AsRangeDimrng2AsRangeDimiAsIntegerDimstrAsStringSetrng1=Range("A1:C2,B3:D4,E4:F6")rng1.SelectFori=1Torng1.Areas.CountSetrng2=rng1.Areas(i)str="子區(qū)域"&i&"的地址是:"&vbCr&vbCrstr=str&rng2.AddressMsgBoxstrNextSetrng1=NothingSetrng2=NothingEndSub運(yùn)行結(jié)果:運(yùn)行程序代碼,得到的結(jié)果如圖3.5所示。圖3.5遍歷第一個(gè)子區(qū)域的結(jié)果單擊對(duì)話框中的“確定”按鈕,然后依次運(yùn)行程序代碼,得到的最后一個(gè)子區(qū)域的結(jié)果如圖3.6所示。圖3.6遍歷最后一個(gè)子區(qū)域的結(jié)果程序分析:在本例的代碼中,Areas集合包括三個(gè)子區(qū)域,通過(guò)循環(huán)分別顯示每個(gè)子區(qū)域的地址,然后顯示在對(duì)話框中。案例22當(dāng)前單元格的前一單元格功能說(shuō)明:Excel表格是一個(gè)二維結(jié)構(gòu),所有的單元格組成了一個(gè)工作表。這些單元格在物理位置上是相互關(guān)聯(lián)的:前、后、左和右,這些都是相鄰單元格的區(qū)域關(guān)系。在Excel中,用戶(hù)通過(guò)VBA代碼還可以處理非相鄰的單元格物理關(guān)系。在本案例中,將首先講解如何引用當(dāng)前單元格的前一單元格。語(yǔ)法說(shuō)明:使用Range對(duì)象的Previous屬性,可獲取對(duì)指定單元格的前一個(gè)單元格的引用。其語(yǔ)法格式如下:表達(dá)式.Previous如果表達(dá)式為一個(gè)對(duì)象區(qū)域,則Previous屬性會(huì)模擬Shift+Tab鍵,但此屬性只是返回上一單元格,并不選定它。案例說(shuō)明:某公司統(tǒng)計(jì)了部分員工上、下半年銷(xiāo)量,同時(shí)提供了員工所處的地區(qū)。本例中,用戶(hù)在選中某單元格后,需要查看該單元格的前面一個(gè)單元格數(shù)據(jù)。原始數(shù)據(jù)如圖3.7所示。圖3.7原始數(shù)據(jù)編寫(xiě)代碼:獲取當(dāng)前單元格前一單元格的引用的代碼如下:Subpre_cells()DimrngAsRangeSetrng=ActiveCell.PreviousMsgBox"當(dāng)前單元格的前一單元格的值為:"&rng1.ValueSetrng=NothingEndSub運(yùn)行結(jié)果:選擇單元格D6,運(yùn)行程序代碼,得到的結(jié)果如圖3.8所示。圖3.8運(yùn)行結(jié)果程序分析:在上面的程序代碼中,通過(guò)Previous屬性獲取了前一單元格的引用,然后顯示該單元格的數(shù)值。案例23當(dāng)前單元格的后一單元格功能說(shuō)明:前面小節(jié)的例子中,已經(jīng)詳細(xì)介紹了如何獲取當(dāng)前單元格的前一單元格的引用。類(lèi)似地,Excel中同樣可以引用當(dāng)前單元格的后一單元格。在本案例中,將詳細(xì)介紹如何獲取當(dāng)前單元格的后一單元格。語(yǔ)法說(shuō)明:使用Range對(duì)象的Next屬性,可獲取對(duì)指定單元格的后一個(gè)單元格的引用。其語(yǔ)法格式如下:表達(dá)式.Next如果表達(dá)式為一個(gè)對(duì)象區(qū)域,則Next屬性會(huì)模擬Tab鍵的功能。但此屬性只是返回下一單元格對(duì)象,并不選定它。案例說(shuō)明:某公司統(tǒng)計(jì)了部分員工上、下半年銷(xiāo)量,同時(shí)提供了員工所處的地區(qū)。本例中,用戶(hù)在選中某單元格后,需要查看該單元格的后面一個(gè)單元格數(shù)據(jù)。原始數(shù)據(jù)如圖3.9所示。圖3.9原始數(shù)據(jù)編寫(xiě)代碼:獲取當(dāng)前單元格的后一單元格的引用的代碼具體如下:Subnext_cells()DimrngAsRangeSetrng=ActiveCell.NextMsgBox"當(dāng)前單元格的后一單元格的值為:"&rng.ValueSetrng=NothingEndSub運(yùn)行結(jié)果:選擇單元格C7,運(yùn)行程序代碼,得到的結(jié)果如圖3.10所示。圖3.10運(yùn)行結(jié)果程序分析:在上面的程序代碼中,通過(guò)Next屬性獲取了后一單元格的引用,然后顯示該單元格的數(shù)值。案例24引用整行或者整列單元格功能說(shuō)明:在使用ExcelVBA進(jìn)行數(shù)據(jù)處理的時(shí)候,經(jīng)常會(huì)需要對(duì)某列或某行單元格進(jìn)行設(shè)置。這個(gè)使用,用戶(hù)就需要首先選擇整行或者整列單元格區(qū)域。語(yǔ)法說(shuō)明:在ExcelVBA中,可以使用多種方法選擇整行或者整列。首先,可用Rows屬性或Columns屬性來(lái)處理整行或整列。這兩個(gè)屬性返回代表單元格區(qū)域的Range對(duì)象。在下面的代碼中,將返回工作表的第二行,然后將區(qū)域字體加粗。Worksheets("Sheet1").Rows(2).Font.Bold=True下面列出了使用Rows和Columns屬性的一些行和列的引用。Rows(2)第二行Rows工作表上所有的行Columns(3)第三列Columns("C")第三列Columns工作表上所有的列同時(shí),用戶(hù)可以直接使用Range屬性來(lái)返回整行或者整列單元格,如下:Range("D:D").Select選擇D列Range("D:F").Select選擇D列至F列Range("2:2").Select選擇第二行Range("2:4").Select選擇第2行至第4行Range("D:D").EntireColumn選擇D列Range("E1").EntireColumn選擇E列案例說(shuō)明:某公司統(tǒng)計(jì)了部分員工上、下半年銷(xiāo)量,同時(shí)提供了員工所處的地區(qū)。本例中,需要設(shè)置工作表的最后一行的格式,原始數(shù)據(jù)如圖3.11所示。圖3.11原始數(shù)據(jù)編寫(xiě)代碼:獲取整行單元格引用的代碼具體如下:SubAll_RowCol()Range("11:11").SelectWithSelection.Font.Bold=True.Italic=TrueEndWithEndSub運(yùn)行結(jié)果:運(yùn)行程序代碼,得到的結(jié)果如圖3.12所示。圖3.12運(yùn)行結(jié)果程序分析:在上面的程序代碼中,通過(guò)代碼“Range("11:11").Select”引用了第11行的所有數(shù)據(jù)。</p>案例25引用相對(duì)其他單元格的單元格功能說(shuō)明:前面案例已經(jīng)講解了多種不同的引用方法。使用不同的引用樣式,用戶(hù)可以應(yīng)用不同的單元格區(qū)域。其中,以某單元格為基準(zhǔn)單元格,然后根據(jù)偏移數(shù)引用其他單元格應(yīng)用十分廣泛。理論上,使用這種方法可以引用任何相對(duì)位置。語(yǔ)法說(shuō)明:在ExcelVBA中,用戶(hù)可以使用Range對(duì)象的Offset屬性返回Range對(duì)象,代表位于指定單元格區(qū)域的一定的偏移量位置上的區(qū)域。其使用格式為:Offset(RowOffset,ColumnOffset)兩個(gè)參數(shù)的含義如下:·RowOffset為行偏移量,區(qū)域偏移的行數(shù)可為正數(shù)、負(fù)數(shù)或0(零)。正數(shù)表示向下偏移,負(fù)數(shù)表示向上偏移。默認(rèn)值是0?!olumnOffset為列偏移量,區(qū)域偏移的列數(shù)可為正數(shù)、負(fù)數(shù)或0(零)。正數(shù)表示向右偏移,負(fù)數(shù)表示向左偏移。默認(rèn)值是0。例如下面的程序代碼:Range("E4").Offset(,-1)'表示單元格D4Range("B2").Offset(2,2)'表示單元格D4案例說(shuō)明:某公司統(tǒng)計(jì)了部分員工上、下半年銷(xiāo)量,同時(shí)提供了員工所處的地區(qū)。根據(jù)用戶(hù)選擇的單元格,設(shè)置該單元格右下方單元格的背景。原始數(shù)據(jù)如圖3.13所示。圖3.13原始數(shù)據(jù)編寫(xiě)代碼:引用相對(duì)其他單元格的單元格的具體代碼如下:SubOffset_Cells()DimrngAsRangeSetrng=ActiveCell.Offset(1,1)rng.SelectSelection.Interior.ColorIndex=3Setrng=NothingEndSub運(yùn)行結(jié)果:選擇工作表的單元格C5,如圖3.14所示。運(yùn)行程序代碼后,得到的程序結(jié)果如圖3.15所示。程序分析:在上面的程序代碼中,是以當(dāng)前單元格為基準(zhǔn),所以每執(zhí)行一次上面的子過(guò)程,當(dāng)前單元格就向下移動(dòng)三行、向右移動(dòng)三列。圖3.14選中單元格圖3.15運(yùn)行的程序代碼結(jié)果class="middle-img">class="middle-img">class="middle-img">class="middle-img">class="middle-img">class="middle-img">class="p3">案例26引用當(dāng)前區(qū)域功能說(shuō)明:當(dāng)前區(qū)域是Excel工作表中一個(gè)十分特殊的單元格區(qū)域,是指以空行與空列的組合為邊界的區(qū)域。當(dāng)前區(qū)域這個(gè)概念在數(shù)據(jù)處理領(lǐng)域使用的十分普遍,特別是當(dāng)用戶(hù)需要添加、編輯或者修改當(dāng)前數(shù)據(jù)的時(shí)候。在工作表中,選擇“開(kāi)始”|“編輯”|“查找和選擇”|“定位條件”命令,在“定位條件”對(duì)話框中,選中“當(dāng)前區(qū)域”選項(xiàng)按鈕,也能獲取關(guān)于當(dāng)前區(qū)域的信息,如圖3.16所示。圖3.16選擇“當(dāng)前區(qū)域”選項(xiàng)語(yǔ)法說(shuō)明:在ExcelVBA中,使用Range對(duì)象的CurrentRegion屬性,可返回表示當(dāng)前區(qū)域的Range對(duì)象。其語(yǔ)法格式如下:表達(dá)式.CurrentRegion該屬性對(duì)于許多自動(dòng)展開(kāi)選擇區(qū)域,包括整個(gè)當(dāng)前區(qū)域的操作很有用。注意:該屬性不能用于被保護(hù)的工作表。案例說(shuō)明:某公司統(tǒng)計(jì)了部分員工上、下半年銷(xiāo)量,同時(shí)提供了員工所處的地區(qū)?,F(xiàn)在需要通過(guò)VBA代碼獲取當(dāng)前區(qū)域的信息。原始數(shù)據(jù)如圖3.17所示。圖3.17原始數(shù)據(jù)編寫(xiě)代碼:引用當(dāng)前區(qū)域的具體代碼如下:SubCurrent_Region()DimrngAsRangeSetrng=Range("A1")Setrng=rng.CurrentRegionrng.SelectSetrng=NothingEndSub運(yùn)行結(jié)果:運(yùn)行程序代碼,得到的結(jié)果如圖3.18所示。圖3.18引用當(dāng)前區(qū)域程序分析:在當(dāng)前區(qū)域范圍內(nèi),無(wú)論活動(dòng)單元格是哪一個(gè)單元格,所在的當(dāng)前區(qū)域均為同一區(qū)域。如上例中的A1:D11區(qū)域,活動(dòng)單元格B2的當(dāng)前區(qū)域?yàn)锳1:D11,當(dāng)活動(dòng)單元格為D2時(shí),其當(dāng)前區(qū)域仍為A1:D11。案例27引用已使用區(qū)域功能說(shuō)明:已使用區(qū)域在Excel中是一個(gè)十分常用的概念,其主要功能是顯示當(dāng)前使用的單元格的范圍區(qū)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論