入門指南——獻(xiàn)給在這里得到幫助但看不懂代碼的朋友_第1頁(yè)
入門指南——獻(xiàn)給在這里得到幫助但看不懂代碼的朋友_第2頁(yè)
入門指南——獻(xiàn)給在這里得到幫助但看不懂代碼的朋友_第3頁(yè)
入門指南——獻(xiàn)給在這里得到幫助但看不懂代碼的朋友_第4頁(yè)
入門指南——獻(xiàn)給在這里得到幫助但看不懂代碼的朋友_第5頁(yè)
已閱讀5頁(yè),還剩17頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、VBA入門指南獻(xiàn)給在這里得到幫助但看不懂代碼的朋友(1.27已更新)VBA入門指南獻(xiàn)給在這里得到幫助但看不懂代碼的朋友                來(lái)這里幾天了,回復(fù)了一些帖子,但仔細(xì)想想,發(fā)現(xiàn)很多朋友雖然得到了版主、高手們的幫助,也拿到了可以實(shí)現(xiàn)其所要求的功能的范例XLS文件,但往往并不能理解其中的原理和代碼,更不能舉一反三化為自己的東西加以應(yīng)用。為了能體現(xiàn)“授人以魚不如授人以漁”的技術(shù)共享精神,特開(kāi)此帖,希望本帖的一些介紹能帶著您進(jìn)入VBA的大門。當(dāng)然由于水平有限,難免

2、出現(xiàn)錯(cuò)誤,希望各位版主、高手們加以批評(píng)指正寫在開(kāi)貼之初!        【2009.1.16】初識(shí)VBA今天,陽(yáng)光明媚,清晨剛到辦公室,泡好香茗一杯,便開(kāi)始構(gòu)思,該如何組織這篇帖子,看來(lái)我是作好了打持久戰(zhàn)的準(zhǔn)備,不管最終出來(lái)的是又臭又長(zhǎng)的裹腳布還是無(wú)厘頭的流水賬,只要能對(duì)您帶來(lái)一點(diǎn)幫助或者樂(lè)趣,我就很滿意了。         既然題目是初識(shí)VBA,那么我想先給大家一個(gè)直觀的感受什么是VBA?,往往在一些EXCEL的教材中,都會(huì)講:VBA是一種自動(dòng)化語(yǔ)言,它可以使常用的程序自動(dòng)

3、化,可以創(chuàng)建自定義的解決方案。就我看書學(xué)習(xí)的經(jīng)驗(yàn)來(lái)說(shuō),我感到這樣的定義式的描述帶有很典型的中國(guó)式教材的風(fēng)格,然而卻不能讓人立即理解,那么這樣的定義有什么用呢?我給VBA下的定義是:VBA是一些代碼的組合。可能這個(gè)定義沒(méi)有上面教材的定義那么嚴(yán)謹(jǐn)和準(zhǔn)確,但我想你一看就應(yīng)該能明白,原來(lái)VBA就是寫代碼,或者說(shuō)就是寫程序。(如果掌握了VBA,居然我也能寫程序了驚喜吧?)        那么你用了這么久的EXCEL,可能從來(lái)沒(méi)在EXCEL的XLS文件中看到過(guò)代碼,難道就寫在單元格里?那我就帶你去找找,VBA的代碼藏在哪里吧,這也正式我今天要談的

4、第二個(gè)問(wèn)題。當(dāng)你打開(kāi)一個(gè)EXCEL文件,你只能看到由許多單元格組成的工作表,這時(shí),你可以通過(guò)【視圖】菜單的【工具欄】項(xiàng)目,打開(kāi)一個(gè)工具欄,名字叫“控件工具箱”,從左往右屬第三個(gè)按鈕,名字叫“查看代碼”,點(diǎn)一下,就可以打開(kāi)VBA代碼編輯窗口。更簡(jiǎn)單的方法是,通過(guò)【ALT】+【F11】的快捷鍵,打開(kāi)VBA代碼編輯窗口,看到了吧,原來(lái)代碼就是藏在這里的哦         怎么寫代碼呢?你也太心急了點(diǎn)吧,你還沒(méi)掌握命令、語(yǔ)法、關(guān)鍵字、對(duì)象、事件、屬性等等內(nèi)容,就想寫代碼?一口是吃不成個(gè)胖子的,還是讓我來(lái)帶你先認(rèn)識(shí)下這里的每個(gè)角落吧,就像進(jìn)了一

5、間陌生的屋子,總歸每個(gè)角落都得轉(zhuǎn)到吧?最上面的幾行,和EXCEL以及每一個(gè)微軟平臺(tái)下的應(yīng)用程序都一樣,總歸是標(biāo)題欄、菜單欄、工具欄等,接下來(lái),看左邊,有一個(gè)縱欄,寫著“工程-VBAProject”,這里是工程資源管理窗口,里面通過(guò)樹(shù)形列表展示了這個(gè)XLS文件(或者標(biāo)準(zhǔn)的應(yīng)該叫“工作簿”)所包含的各個(gè)工作表對(duì)象以及工作簿對(duì)象本身。有什么用呢?你雙擊任何一個(gè)SHEET,比如SHEET1,試試?是不是在右側(cè)打開(kāi)了一個(gè)文檔編輯窗口?那么你就能明白,如果是SHEET1的代碼,就應(yīng)該寫在這里了,那么SHEET2的呢?當(dāng)然就寫在雙擊SHEET2后打開(kāi)的窗口里咯那么SHEET3呢?你煩不煩啊人家都明白了!再看

6、看右側(cè)的文檔窗口吧,頂上有兩個(gè)下拉列表框,一個(gè)寫著“通用”,一個(gè)寫著“聲明”,什么東東?。孔筮叺哪莻€(gè)是對(duì)象列表框,可以讓你選擇在這個(gè)SHEET里面包含的所有對(duì)象,右邊的那個(gè)是過(guò)程列表框,可以讓你選擇和左側(cè)當(dāng)前選中的對(duì)象關(guān)聯(lián)的系統(tǒng)或自定義過(guò)程。那么什么是對(duì)象?什么又是過(guò)程呢?今天沒(méi)時(shí)間了,什么?領(lǐng)導(dǎo)要我馬上去開(kāi)會(huì)?不會(huì)加工資了吧?哈哈,明天繼續(xù)!【2009.1.17】初識(shí)VBA(續(xù))看到這么多朋友的支持和期待,倍感壓力??!怎么感覺(jué)寫不好就對(duì)不起觀眾呢?哎,書到用時(shí)方恨少,大家將就著看吧       昨天我們?cè)赩BA代碼編輯器里轉(zhuǎn)了一圈,是不是有別有洞天的感

7、覺(jué)?。靠墒?,這里對(duì)于大家都是陌生的環(huán)境,到底該怎么用這里的每一個(gè)工具呢?別心急,且聽(tīng)我慢慢道來(lái)。在講代碼之前,我首先必須介紹一下OOP的概念和基本知識(shí)。去去去,怎么你也學(xué)著那些教材里挑些專用名詞來(lái)忽悠我們?。亢呛?,因?yàn)檫@樣才能體現(xiàn)作者,也就是本人的水平啊?。▌e扔雞蛋,說(shuō)你呢!下次不說(shuō)了,還不行嗎?)所謂OOP就是指Object Oriented Programming,即面向?qū)ο蟮某绦蛟O(shè)計(jì)方法,這種程序設(shè)計(jì)思想主要是相對(duì)于以前的面向過(guò)程的程序設(shè)計(jì)方法而言的。下面我就給大家講個(gè)故事,很久很久以前,寫程序還是很專業(yè)很神秘的一種技術(shù)活,這個(gè)時(shí)候的程序員寫出來(lái)的東西,是必須要按照他給你安排好的步驟來(lái)執(zhí)

8、行的,比方說(shuō),你運(yùn)行一個(gè)程序,必須先輸入一條打開(kāi)數(shù)據(jù)表的命令,然后才能對(duì)這個(gè)數(shù)據(jù)表進(jìn)行操作,否則就會(huì)報(bào)錯(cuò),甚至對(duì)于有些設(shè)計(jì)不完善的程序就會(huì)崩潰。這樣寫出來(lái)的程序一個(gè)是缺乏靈活性,難道作為用戶就不能自己決定先瀏覽還是先打?。苛硪环矫?,對(duì)于那時(shí)候?qū)懗鰜?lái)的程序,如果將來(lái)要修改或擴(kuò)充功能,那將牽一發(fā)而動(dòng)全身,也為在設(shè)計(jì)這些功能的時(shí)候是一步一步安排好的,如果要修改后面的步驟,必然會(huì)影響到前面的代碼,這樣導(dǎo)致了程序員非常累。(所以高薪啊其實(shí)也不過(guò)是重復(fù)勞動(dòng),呵呵)。后來(lái),出來(lái)了一個(gè)聰明人,寫出了一個(gè)叫“Smalltalk”的語(yǔ)言,這個(gè)語(yǔ)言本身并沒(méi)有什么特別的地方,但其中其中表現(xiàn)出來(lái)的接近現(xiàn)實(shí)形態(tài)描述的對(duì)象

9、思想?yún)s讓整個(gè)軟件設(shè)計(jì)理論提升了一個(gè)新的層次。說(shuō)這些和我有什么關(guān)系?。亢呛?,下面的東西就和你有關(guān)了,也為現(xiàn)在的基于可視化架構(gòu)的程序設(shè)計(jì)基本都引入了OOP的思想,所以如果你將OOP中最主要的概念搞清楚了,那么將對(duì)以后的學(xué)習(xí)奠定扎實(shí)的基礎(chǔ)。面向?qū)ο蟮某绦蛟O(shè)計(jì)思想中主要包含四個(gè)概念。對(duì)象、事件、方法和屬性。別看這些概念這么復(fù)雜,我給大家舉個(gè)例子就明白了。對(duì)象是什么?就像現(xiàn)實(shí)中看得見(jiàn)摸得著的東西一樣,是實(shí)實(shí)在在的東西。比如,一個(gè)蘋果,就可以作為一個(gè)對(duì)象,圍繞對(duì)象概念,延伸了一個(gè)“類”的概念,什么是類呢?蘋果就是一個(gè)類。暈,剛才還說(shuō)蘋果是對(duì)象呢,怎么一會(huì)又成了類了?其實(shí)作為類而言的蘋果的概念,就是指區(qū)別于

10、梨和橘子的蘋果類的概念,而不是具體指某一個(gè)蘋果。紅蘋果、綠蘋果都屬于蘋果這個(gè)類,哪怕?tīng)€蘋果也是。(別扔啊?。┪覀?cè)谠O(shè)計(jì)程序的時(shí)候,可以定義一個(gè)自己的類,這樣以后要用到這類對(duì)象的時(shí)候,就可以通過(guò)這個(gè)類來(lái)派生出來(lái),而不用每次都去寫定義。還有個(gè)好處是,以后修改對(duì)象屬性的時(shí)候,就可以通過(guò)修改類的屬性來(lái)達(dá)到同時(shí)修改通過(guò)這個(gè)類派生的所有對(duì)象的屬性的目的。對(duì)象的基本概念還有三個(gè),屬性、方法和事件。蘋果的顏色可以看作蘋果這個(gè)對(duì)象的一個(gè)屬性,蘋果的大小也可以看作他的一個(gè)屬性,你自己還能說(shuō)出什么屬性嗎?恩,重量、好壞、產(chǎn)地等等。慢點(diǎn),價(jià)格是不是啊?這個(gè)問(wèn)題留給大家思考吧。從上面的例子可以看出,屬性是描述對(duì)象在某一

11、方面的特征的,通過(guò)不同屬性的值就可以區(qū)別開(kāi)不同的對(duì)象。方法呢?對(duì)于蘋果來(lái)說(shuō)“吃”就是方法,啥?吃蘋果也是方法?恩,別饞啊,對(duì)蘋果而言,吃就是方法,因?yàn)檫@個(gè)是可以作用于這個(gè)對(duì)象的,還能舉個(gè)例子嗎?比方相對(duì)于表格對(duì)象的方法就可以是打開(kāi)、關(guān)閉、修改等。方法是用來(lái)作用于對(duì)象,使其產(chǎn)生某種變化的。事件是什么呢?事件就是被設(shè)計(jì)用來(lái)觸發(fā)某些代碼來(lái)自動(dòng)執(zhí)行的,這個(gè)就叫做事件驅(qū)動(dòng)機(jī)制。還記得剛才我們談到的面向過(guò)程的程序設(shè)計(jì)方法的缺點(diǎn)嗎?對(duì),代碼的執(zhí)行順序是由設(shè)計(jì)者在設(shè)計(jì)時(shí)指定的。這種吃力不討好的事情,勸大家以后還是少做做。我們有了事件驅(qū)動(dòng)機(jī)制以后,這樣的情況就可以避免了?,F(xiàn)在,可以通過(guò)將代碼寫在可能發(fā)生的事件中

12、的辦法,由用戶決定啥時(shí)候運(yùn)行這些代碼,只要程序運(yùn)行時(shí),用戶的操作行為觸發(fā)了相應(yīng)的事件,那么該事件中定義的代碼,就會(huì)被自動(dòng)執(zhí)行了。好了,該吃午飯了,有朋友回復(fù)說(shuō)最好圖文并茂,現(xiàn)在講的是理論,在以后講到代碼時(shí)候,會(huì)加上插圖和動(dòng)畫的。明天見(jiàn)!快過(guò)年了,早晨去了趟超市,那個(gè)人叫擠啊!本來(lái)想早點(diǎn)回來(lái)的,結(jié)果午飯到了2點(diǎn)才吃到。打開(kāi)電腦,看到好多朋友都在關(guān)心這個(gè)帖子,而且好幾位朋友提出了自己的見(jiàn)解和疑惑,想到昨天講了“類”,今天真的感到了好“累”。因?yàn)榇蠹叶紕偨佑|VBA,可能光聽(tīng)我介紹還沒(méi)有直觀的感受,為了幫助大家理解,下面先介紹兩個(gè)方法,可以讓大家看到更多的東西。首先要介紹的是對(duì)象瀏覽器。打開(kāi)這個(gè)對(duì)話框

13、有三種方法。(中國(guó)的教材和教育模式下的考試,最喜歡列舉完成一件事情的方法,我就納悶,只要能解決問(wèn)題,知道了一條路,干嘛還要打破沙鍋問(wèn)到底?)一個(gè)是通過(guò)【視圖】菜單的【對(duì)象瀏覽器】項(xiàng)目,另一個(gè)是在工具欄上點(diǎn)擊【對(duì)象瀏覽器】按鈕。最方便的是按【F2】快捷鍵。打開(kāi)了以后,大家看到了一個(gè)新的窗口,這里列舉了三種信息,最上面的部分是用來(lái)搜索和查找信息的,中間的部分分了三欄來(lái)分別列舉“庫(kù)”、“類”和“成員”信息。最下面是提示和說(shuō)明部分,用來(lái)說(shuō)明當(dāng)前選中對(duì)象的信息。為什么要介紹對(duì)象瀏覽器呢?大家通過(guò)這個(gè)工具可以搜索到和EXCEL以及VBA有關(guān)的各種各樣的“類”和“對(duì)象”。順便說(shuō)一下,這里說(shuō)的“成員”基本相當(dāng)

14、于對(duì)象、屬性、方法和事件;類是成員的上級(jí);很多類又組成了一個(gè)類庫(kù),在這里叫做“庫(kù)”。以后大家如果有不明白的類,就可以在這里找到這個(gè)類有哪些對(duì)象、屬性、方法和事件,以及他們之間是什么層級(jí)關(guān)系。其次,簡(jiǎn)單介紹下如何使用幫助。其實(shí)按照微軟的體系,VBA的幫助包括了兩個(gè)部分,一個(gè)是本地脫機(jī)幫助,也就是安裝完OFFICE軟件就自帶的幫助,這里只是簡(jiǎn)單的介紹了VBA的基本信息。另一個(gè)部分則被微軟放在了MSDN里面,這是微軟單獨(dú)提供給微軟平臺(tái)的開(kāi)發(fā)人員的獨(dú)立幫助工具,其中包含了非常詳細(xì)的各種編程信息、技巧和案例。通過(guò)仔細(xì)研讀MSDN里的內(nèi)容,可以快速掌握之前不了解的編程知識(shí),并且MSDN總是被微軟的工程師們

15、不斷更新并保持著最新的狀態(tài)。下面,我們就繼續(xù)昨天的內(nèi)容,接著講面向?qū)ο蟮木幊?。什么?昨天的已?jīng)都忘記了?那就先回頭去看看再繼續(xù)吧。今天主要給大家介紹VBA中最常用到的一些關(guān)鍵字。什么是關(guān)鍵字,關(guān)鍵字就是那些在OFFICE軟件里已經(jīng)被定義好了特定含義和用法的字符串。比方說(shuō),“IF”這個(gè)字符串,表示“如果”的意思,在VBA里用來(lái)表示條件語(yǔ)句的起始,那么關(guān)鍵字和普通字符串有什么區(qū)別呢?關(guān)鍵字被規(guī)定為不可以用來(lái)表示變量名、過(guò)程名、函數(shù)名等用戶定義的信息,只能根據(jù)系統(tǒng)規(guī)定的含義使用。也就是說(shuō),你如果有個(gè)變量起個(gè)名字叫“IF”,你寫一條賦值語(yǔ)句“IF = 1”,這樣系統(tǒng)在編譯的時(shí)候就會(huì)提示一個(gè)錯(cuò)誤,而不能

16、通過(guò)編譯和運(yùn)行。想看看VBA里一共有多少個(gè)關(guān)鍵字嗎?從明天開(kāi)始,我們將開(kāi)始一一給大伙講解,歡迎繼續(xù)關(guān)注?!?009.1.19】代碼起步關(guān)鍵字“同學(xué)們好!”,“老師好”,“請(qǐng)坐下,把書翻到25頁(yè),今天我們講.”,才三歲的兒子已經(jīng)開(kāi)始模仿和憧憬著學(xué)校的生活了哈哈,當(dāng)我們回憶起兒時(shí)上課的情景,親切吧?那就讓我們重溫一下這份感受吧。今天開(kāi)始,我們將正式進(jìn)入代碼的學(xué)習(xí)階段。我多年以來(lái)的授課經(jīng)驗(yàn)告訴我,學(xué)代碼應(yīng)該從關(guān)鍵字開(kāi)始。下面列舉了一些常見(jiàn)的關(guān)鍵字給大家先了解下?!究蚣茴愱P(guān)鍵字】工程(Project): 是指用于創(chuàng)建一個(gè)應(yīng)用程序的文件的集合。對(duì)象(Object): 可控制的某個(gè)東西,例如窗體和控件。窗

17、體(Form):  應(yīng)用程序的用戶界面。  控件(Control): 指的是各種按鈕、標(biāo)簽、文本框等。屬性(Property):是指對(duì)象的特征,如大小、標(biāo)題或顏色。工作表(Worksheet):指EXCEL文件里的工作表,例如sheet1、sheet2等。模塊(Module):指在VBA工程中存放獨(dú)立于用戶定義對(duì)象代碼的容器。過(guò)程(Sub):容納和組織代碼的限定符號(hào),一般和End Sub聯(lián)用,不返回結(jié)果。函數(shù)(Function):容納和組織代碼的限定符號(hào),一般和End Function聯(lián)用,并返回結(jié)果?!究丶愱P(guān)鍵字】標(biāo)簽(Label):用來(lái)顯示文本。文

18、本框(Textbox):用來(lái)提供給用戶輸入文本。命令按鈕(CommandButton):用來(lái)組織和提供程序功能。列表框(ListBox):用來(lái)提供給用戶選擇列表中的數(shù)據(jù)。組合框(ComboBox):用來(lái)提供給用戶下拉選擇列表中的數(shù)據(jù)。選項(xiàng)按鈕(OptionButton):用來(lái)提供給用戶指定單項(xiàng)數(shù)據(jù),一般成組使用。復(fù)選框(CheckBox):用來(lái)提供給用戶指定多項(xiàng)數(shù)據(jù),一般成組使用?!韭暶黝愱P(guān)鍵字】Public:聲明公共類型的數(shù)據(jù);Private:聲明私有類型的數(shù)據(jù);Static:聲明靜態(tài)類型的數(shù)據(jù);Dim:聲明數(shù)據(jù)類型;如:Dim myCell As RangereDim:定義未顯式聲明的數(shù)組

19、的維數(shù)和元素;Const:聲明常量數(shù)據(jù);如:Const limit As Integer = 33As:一般用于聲明數(shù)據(jù)類型中的“As Type”子句;Type:聲明用戶自定義數(shù)據(jù)類型;【數(shù)據(jù)類型關(guān)鍵字】Byte:字節(jié)類型;Integer:整型數(shù)值類型;Long:長(zhǎng)整型數(shù)值類型;String:字符串類型;Boolean:邏輯類型;Single:?jiǎn)尉阮愋?;Double:雙精度類型;Currency:貨幣數(shù)值類型;Decimal:可以容納小數(shù)的數(shù)值類型;Variant:任何數(shù)字值或字符串值;Object:對(duì)象類型;用戶自定義:利用TYPE語(yǔ)句由用戶自己定義的數(shù)據(jù)類型?!具\(yùn)算符關(guān)鍵字】這類關(guān)鍵字太

20、多了,而且有很多種分類方法,比如按參數(shù)個(gè)數(shù)分為單目運(yùn)算符、雙目運(yùn)算符、三目運(yùn)算符和多目運(yùn)算符等,按參與運(yùn)算的參數(shù)類型可以分為數(shù)值運(yùn)算符、字符運(yùn)算符、邏輯運(yùn)算符、日期運(yùn)算符、字節(jié)運(yùn)算符等,按照運(yùn)算符的作用范圍可以分為過(guò)程級(jí)運(yùn)算符、函數(shù)級(jí)運(yùn)算符和模塊級(jí)運(yùn)算符?!境绦蚪Y(jié)構(gòu)類】IF.ELSE.END IF:分支判斷選擇語(yǔ)句;DO WHILE.LOOP:先判斷后執(zhí)行循環(huán)語(yǔ)句;DO.LOOP WHILE:先執(zhí)行后判斷循環(huán)語(yǔ)句;FOR.NEXT:限定次數(shù)循環(huán)語(yǔ)句;GOTO.:無(wú)條件轉(zhuǎn)移語(yǔ)句。一下子列舉了這么多的關(guān)鍵字,是不是眼睛都花了?是不是對(duì)這些關(guān)鍵字還是沒(méi)搞明白該怎么用?沒(méi)關(guān)系,下面就給大家一一介紹。哎

21、呀,今天的時(shí)間又快到了,明天繼續(xù)吧,別換頻道啊【2009.1.20】代碼起步關(guān)鍵字(續(xù))引用:原帖由 fdd 于 2009-1-19 11:04 發(fā)表 感謝樓主熱情的講解及樂(lè)于助人的精神!這樣的論壇就是靠這樣的精神支撐起來(lái)的!我從一個(gè)初學(xué)者的角度向樓主建議:每次的內(nèi)容以一個(gè)生動(dòng)的事例為核心,重點(diǎn)講解相關(guān)的知識(shí)點(diǎn)。這樣內(nèi)容會(huì)更吸引人,也會(huì)有更好的 . 大伙的熱情支持,真的讓我很感動(dòng),提出的很多建議對(duì)我也非常有啟發(fā),今后的帖子里將會(huì)不斷吸收各位的好的意見(jiàn)和建議,盡我所能把這篇入門指南寫好。什么今天講?不,今天講什么?哎太過(guò)激動(dòng)以至于有點(diǎn)語(yǔ)無(wú)倫次了。對(duì)了,今天先說(shuō)說(shuō)框架類關(guān)鍵字。列舉如下:【框架類關(guān)

22、鍵字】工程(Project): 是指用于創(chuàng)建一個(gè)應(yīng)用程序的文件的集合。對(duì)象(Object): 可控制的某個(gè)東西,例如窗體和控件。窗體(Form):  應(yīng)用程序的用戶界面。  控件(Control): 指的是各種按鈕、標(biāo)簽、文本框等。屬性(Property):是指對(duì)象的特征,如大小、標(biāo)題或顏色。工作表(Worksheet):指EXCEL文件里的工作表,例如sheet1、sheet2等。模塊(Module):指在VBA工程中存放獨(dú)立于用戶定義對(duì)象代碼的容器。過(guò)程(Sub):容納和組織代碼的限定符號(hào),一般和End Sub聯(lián)用,不返回結(jié)果。函數(shù)(Function

23、):容納和組織代碼的限定符號(hào),一般和End Function聯(lián)用,并返回結(jié)果。記得我在學(xué)寫程序的時(shí)候(那是很久很久以前的事情了),我最怕的就是看到這些E文字母。我經(jīng)常去看HELP里面的例子,然而那里面居然連變量和過(guò)程的名字都是很長(zhǎng)的E文。沒(méi)辦法,誰(shuí)叫人家微軟是美國(guó)公司呢!(記得之前有過(guò)幾個(gè)用中文寫程序的編輯器,甚至還熱過(guò)一陣某語(yǔ)言,但隨著時(shí)間的流逝,好像現(xiàn)在也不知去向了.)那么怎么樣才能記住這些又長(zhǎng)又難記的單詞呢?不用記,你如果用VBA編程,你會(huì)發(fā)現(xiàn)只要你輸入了正確的第一個(gè)關(guān)鍵字之后,可以通過(guò)支持VBA語(yǔ)言的編輯器自動(dòng)提示輸入接下來(lái)的單詞,是不是很簡(jiǎn)單啊其實(shí)多使用幾次,你也就記住了。還有一個(gè)可

24、以判斷是否輸入正確的方法,就是你總是用小寫字母書寫關(guān)鍵字,如果正確,編輯器會(huì)自動(dòng)修正你錄入的關(guān)鍵字的第一個(gè)字母為大寫。Project,中文翻譯為工程、項(xiàng)目等。這個(gè)關(guān)鍵字在VBA中表示一個(gè)工作簿所關(guān)聯(lián)的代碼的總?cè)萜?。所有和這個(gè)工作簿(XLS文件)關(guān)聯(lián)的代碼,都裝在這個(gè)容器里。但這個(gè)容器不僅僅裝代碼,還能裝好多東西,比如工作表、模塊、過(guò)程、函數(shù)等。那么這個(gè)容器是不是一個(gè)對(duì)象呢?請(qǐng)大家結(jié)合前面的講解思考下這個(gè)問(wèn)題?答案是肯定的。(如果你答錯(cuò)了,請(qǐng)接著往下看;否則請(qǐng)?zhí)^(guò)下一段。)Object,對(duì)象,實(shí)體。在VBA中,工程、窗體、控件、工作表、模塊等無(wú)一不是對(duì)象,因?yàn)檫@些都是實(shí)體,具備了獨(dú)立存在的所有條

25、件。比如,我問(wèn)你書是對(duì)象嘛?是,因?yàn)闀梢元?dú)立存在。那么顏色是對(duì)象嘛?不是,因?yàn)槟銦o(wú)法單單拿出來(lái)一個(gè)叫“顏色”的東西,它只能作為其他東西的一種屬性而存在。同樣,工程,在VBA中是獨(dú)立存在的,可以作為對(duì)象來(lái)看待。窗體、控件、工作表、模塊也是一樣。還有個(gè)小提示給大家,大家以后看到代碼中某個(gè)對(duì)象名稱后面跟了個(gè)S,在E文里應(yīng)該表示復(fù)數(shù),即多于一個(gè)的意思。那么在VBA中表示什么意思呢?表示多個(gè)對(duì)象放在一起,我們給它們一個(gè)名字叫“集合”。集合是對(duì)象嘛?不是,是多個(gè)對(duì)象放在一起。這個(gè)千萬(wàn)要注意,因?yàn)橹形氖菦](méi)有復(fù)數(shù)的表示方法的,所以不能理解為“一個(gè)人是人嘛?是;一群人是人嘛?當(dāng)然是!”,那就錯(cuò)了,在VBA里“

26、一群人”不是人,是人的集合!那么你可能又會(huì)將集合同我們之前講的“類”搞在一起了,類是對(duì)象的抽象,還拿書做例子,一本實(shí)實(shí)在在的書是一個(gè)對(duì)象,它可能是文學(xué)書,也可能是計(jì)算機(jī)書,當(dāng)然可能是紅色的,也可能是綠色的。而如果你脫離了具體的書而說(shuō)“書”的概念,那么這時(shí)就指書這個(gè)類了。一個(gè)典型的例子是來(lái)自于生物界的分類。比如某只麻雀和某只鴿子,都是具體對(duì)象,而麻雀和鴿子都可以作為獨(dú)立的一類鳥(niǎo)這個(gè)概念來(lái)描述,這時(shí)應(yīng)該說(shuō)成是麻雀類和鴿子類,同時(shí)它們又都屬于鳥(niǎo)類這個(gè)概念,所以在類這個(gè)東西里,是可以分很多層次的,但除非具體到某一只鳥(niǎo),不然就都是類的概念,而不是對(duì)象。集合呢?一群麻雀或者一群鴿子,就是集合,因?yàn)樗鼈兪怯?/p>

27、具體的很多只麻雀或鴿子組成的。干嘛費(fèi)那么大勁說(shuō)這些概念呢?可能你聽(tīng)得都快睡著了。但我還是要說(shuō),因?yàn)槿绻悴慌宄悺?duì)象和集合等概念,那么在以后寫代碼的時(shí)候,你就會(huì)犯糊涂,“怎么我寫了一個(gè)對(duì)象,就是不能用它的某個(gè)屬性或方法呢?”,其實(shí),很有可能你把對(duì)象寫成了類或集合,因?yàn)樗麄兙筒钜稽c(diǎn)點(diǎn)。(比如Row可以作為一個(gè)類,也可以作為一個(gè)對(duì)象,就看你如何聲明它,同時(shí),Rows就是一個(gè)集合)。我還要講一下如何使用類、對(duì)象和集合。類一般在聲明部分使用,比如DIM A As Range,這里Range就表示“行”這個(gè)“范圍”類,而A被聲明為屬于“行”這個(gè)類的類型的變量,換句話說(shuō),A在經(jīng)過(guò)這樣的聲明以后,就可以

28、用來(lái)引用某個(gè)具體的行對(duì)象了。比如Set A = Sheet1.rows(1)。那么這時(shí),A就可以代表第一行這個(gè)對(duì)象了。這里的ROWS代表Sheet1的所有行對(duì)象的集合。一般集合有一個(gè)屬性,叫做COUNT,表示在這個(gè)集合中的對(duì)象的個(gè)數(shù)。同時(shí),要用集合表示具體對(duì)象時(shí),要在集合名稱后加上一對(duì)括號(hào),里面填寫對(duì)象的索引值或名稱。Form,窗體。你一般在Windows里運(yùn)行的程序,都具備可視化的功能。那么這就是Form的功勞。通過(guò)引用FORM對(duì)象,你可以對(duì)這個(gè)工程里的一些窗體進(jìn)行屬性的設(shè)置、事件的定義以及運(yùn)行某些方法。Control,控件。 指的是各種按鈕、標(biāo)簽、文本框等。它們可以裝飾你的窗體,并在窗體中

29、提供用戶各種功能。從某種意義上講,窗體也可以看做是控件的容器。Worksheet,工作表。指EXCEL文件里的工作表,例如sheet1、sheet2等。通過(guò)引用這個(gè)對(duì)象,可以對(duì)工作表以及下級(jí)對(duì)象的屬性進(jìn)行設(shè)置、事件進(jìn)行定義、方法進(jìn)行執(zhí)行。Module,模塊。指在VBA工程中存放獨(dú)立于用戶定義對(duì)象代碼的容器。如果你想定義一些變量、過(guò)程或函數(shù),并且想在各個(gè)對(duì)象(比如Sheet1、Sheet2等)中都能使用,并且可以互相傳遞值。那么就應(yīng)該將這些聲明或代碼寫在模塊中。詳細(xì)的以后用到再詳述。以上講的都是對(duì)象,請(qǐng)大家參考對(duì)象的用法,具體操作一下如何聲明、如何引用它們。至于如何通過(guò)對(duì)象設(shè)置屬性、定義事件和執(zhí)

30、行方法,我們?cè)诰唧w講解各類對(duì)象的時(shí)候再詳細(xì)闡述。Sub,過(guò)程。容納和組織代碼的限定符號(hào),一般和End Sub聯(lián)用,不返回結(jié)果。Function,函數(shù)。容納和組織代碼的限定符號(hào),一般和End Function聯(lián)用,并返回結(jié)果。這兩個(gè)概念,本來(lái)應(yīng)該在代碼里講的,這里只是提示一下。大家只要明白一個(gè)概念,除聲明語(yǔ)句外其他代碼都應(yīng)該放在這兩種容器內(nèi)。Property,屬性。是指對(duì)象的特征,如大小、標(biāo)題或顏色。最后講講這個(gè)。還記得上面講到的對(duì)象的聲明和引用的例子嗎?剛講過(guò),應(yīng)該不會(huì)忘吧,否則應(yīng)該回頭重新看下這篇文章了?,F(xiàn)在,A已經(jīng)被聲明為一個(gè)Range類對(duì)象,并且已經(jīng)賦予A引用為Sheet1的第一行了。那

31、么如果想對(duì)Sheet1表的第一行設(shè)置為值都等于0,應(yīng)該如何做呢?其實(shí)只要對(duì)Range類對(duì)象的一個(gè)Value屬性設(shè)置一下就可以了,即:A.value=0。把上面所有的代碼都放在Sheet1的一個(gè)叫“Worksheet_SelectionChange”的事件中,然后隨便用鼠標(biāo)點(diǎn)一個(gè)單元格試一下,是不是第一行的所有單元格都是0?恭喜你,寫出了第一個(gè)完整的程序!不僅如此,你還可以在設(shè)置屬性的語(yǔ)句后面,再寫一句“A.Select”,這個(gè)是什么意思?先運(yùn)行下試試(別忘記先保存)。是不是在將第一行都賦值為0以后,又把第一行都選中了?這里執(zhí)行了Range類對(duì)象的一個(gè)叫“Select”的方法,作用是選中對(duì)象?;?/p>

32、過(guò)頭來(lái)想想,事件是什么?看下這個(gè)事件的名稱吧:Worksheet_SelectionChange,翻譯過(guò)來(lái)就是“工作表的選中項(xiàng)目發(fā)生改變”,也就是說(shuō)只要該工作表(Sheet1)中的選中位置發(fā)生了變化,那么這個(gè)事件就會(huì)被觸發(fā),其中的代碼就會(huì)被自動(dòng)執(zhí)行?,F(xiàn)在明白什么叫“事件觸發(fā)機(jī)制”了吧?換了以前基于過(guò)程的編程方法,那么必須規(guī)定啥時(shí)候這個(gè)單元格會(huì)被選中,而用戶必須在這個(gè)規(guī)定的時(shí)候選中這個(gè)單元格,而現(xiàn)在有了事件觸發(fā)機(jī)制,隨便什么時(shí)候,只要滿足事件觸發(fā)的條件,這個(gè)動(dòng)作就會(huì)被執(zhí)行。今天講的所有的代碼總結(jié)如下,你可以直接把它們復(fù)制粘貼到Sheet1的代碼集中:Private Sub Worksheet_S

33、electionChange(ByVal Target As Range)           '聲明一個(gè)Worksheet_SelectionChange事件的私有過(guò)程    Dim A As Range                                 

34、                                                     '聲明一個(gè)變量A,并制定為Range類型    Set A = Sheet1.Rows(1) 

35、                                                                     &

36、#160;  '將A賦值為(引用)Sheet1工作表的第一行    A.Value = 0                                                     

37、60;                                       '設(shè)置A變量(表示Sheet1工作表的第一行)的Value屬性值為0    A.Select               

38、60;                                                                    

39、0;              '執(zhí)行A變量的Select方法End Sub                                                 

40、;                                                      '事件過(guò)程結(jié)束標(biāo)志具體示例程序見(jiàn)下面的附件。(打開(kāi)EXCEL表格后,可以通過(guò)按“【ALT】+【F11】”的方法打開(kāi)代碼編輯窗口,并通

41、過(guò)雙擊左側(cè)Sheet1工作表的方法打開(kāi)該工作表下的代碼集)。【2009.1.21】代碼起步關(guān)鍵字(續(xù))昨天剛洗了車,今天就下雨了,哎,天意弄人“今年春節(jié)怎么過(guò)?出門嘛?”最近聽(tīng)得最多的就是這句話,不管是經(jīng)濟(jì)危機(jī)的影響還是交通擁堵一票難求的作用,今年明顯出門的人少了許多,昨天偶然聽(tīng)到了廣播里張信哲的逃生,其中一首“牡丹憂”讓我想起了父母,立馬跑去買了龍井和翡翠的平安扣,晚上看著嘴上埋怨卻掩飾不了臉上高興的父母,總算心安了一些。不管什么借口,今年在家陪陪爸媽吧!所謂“娘生兒,連心肉;兒行千里母擔(dān)憂;兒思娘親難叩首;娘想兒來(lái)淚雙流.”言歸正傳,繼續(xù)昨天的話題,讓我們來(lái)看看第二類關(guān)鍵字控件,先列表如下

42、:【控件類關(guān)鍵字】標(biāo)簽(Label):用來(lái)顯示文本。文本框(Textbox):用來(lái)提供給用戶輸入文本。命令按鈕(CommandButton):用來(lái)組織和提供程序功能。列表框(ListBox):用來(lái)提供給用戶選擇列表中的數(shù)據(jù)。組合框(ComboBox):用來(lái)提供給用戶下拉選擇列表中的數(shù)據(jù)。選項(xiàng)按鈕(OptionButton):用來(lái)提供給用戶指定單項(xiàng)數(shù)據(jù),一般成組使用。復(fù)選框(CheckBox):用來(lái)提供給用戶指定多項(xiàng)數(shù)據(jù),一般成組使用。先來(lái)說(shuō)說(shuō),什么是控件,顧名思義,控件就是提供給用戶控制程序運(yùn)行的組件。回憶一下,以往我們用過(guò)的程序很多,都用過(guò)哪些控件呢?可能之前都沒(méi)有注意,但現(xiàn)在既然要做程序給

43、別人用,就得注意了。我們看到,一般在我們打開(kāi)的窗口上,都會(huì)有些文字,這些文字只是提供了一些信息,比如告訴你這里是輸入姓名的,那里是選擇性別的等等,這些文字用戶并不能修改或刪除,那么這些文字是不是就是寫在窗體上的呢?不是,窗體只是一個(gè)容器,里面是空的,就像不能在空氣里寫文字一樣。VBA給我們提供了一個(gè)可以寫這些文字的控件,我們給它一個(gè)名字叫“標(biāo)簽”,E文叫“Label”。從我們上面描述的文字可以總結(jié)出標(biāo)簽控件的特點(diǎn)和作用:無(wú)法修改,主要用于顯示提示信息。這是第一個(gè)控件。第二個(gè)控件叫做“文本框”,E文叫做“Textbox”。這個(gè)控件和標(biāo)簽有點(diǎn)類似,也是放文字的,但這里的文字是讓用戶輸入的,而不是顯

44、示給用戶看的,所以我們把文本框的特點(diǎn)和作用做個(gè)總結(jié)就是:可以提供用戶文字編輯功能,主要用來(lái)供用戶錄入文字信息供程序處理或存入數(shù)據(jù)庫(kù)。第三個(gè)控件叫命令按鈕,E文叫“CommandButton”。這個(gè)控件的作用不用我多說(shuō)了吧?當(dāng)你之前每次用鼠標(biāo)點(diǎn)擊按鈕,你可曾想過(guò),為什么這么多按鈕會(huì)有各種各樣不同的功能?按鈕除了能單擊還能雙擊嘛?按鈕的作用是在按下的時(shí)候發(fā)生還是放開(kāi)的時(shí)候發(fā)生呢?所有這些問(wèn)題的答案都在于事件是如何寫的。按鈕提供了單擊、雙擊、按下、放開(kāi)等事件,如果代碼寫在了按鈕的某個(gè)事件里,那么在用戶做出相應(yīng)動(dòng)作以后就會(huì)觸發(fā)執(zhí)行這些代碼。第四個(gè)控件叫列表框,E文叫“ListBox”。這個(gè)控件的外觀,

45、像一張一維表格(只有列標(biāo)題)。這個(gè)控件的作用除了可以提供給用戶一些整齊的列表信息外,還可以通過(guò)選中、單擊、雙擊等事件,實(shí)現(xiàn)用戶選擇標(biāo)準(zhǔn)化錄入的效果。第五個(gè)控件叫組合框,E文叫“ComboBox”。這個(gè)控件比較靈活,有三種形態(tài)。第一種是下拉列表的形式,主要提供給用戶選擇列表里的值,用戶的選擇只能限于下拉列表提供的內(nèi)容,不能自己輸入,并且選擇只能是單選。第二種是用戶除了可以選擇下拉列表提供的內(nèi)容外,還可以輸入自定義的內(nèi)容,即兼具了文本框和下拉列表框的作用。第三種是用戶可以對(duì)下拉列表框提供的內(nèi)容進(jìn)行復(fù)選。組合框是比較常用且功能較為強(qiáng)大的控件之一。還有兩個(gè)控件,一個(gè)叫選項(xiàng)按鈕,就是我們平時(shí)說(shuō)的單選按鈕

46、,另一個(gè)叫復(fù)選框,這兩個(gè)控件經(jīng)常被成組提供,主要讓用戶選擇某些項(xiàng)目,而避免了文本框的不規(guī)則文本錄入的問(wèn)題,達(dá)到了錄入結(jié)果標(biāo)準(zhǔn)化的效果。說(shuō)了這么多控件,還沒(méi)看見(jiàn)呢!?別急,下面就告訴你怎么添加控件。如圖( 1.jpg (3.83 KB)2009-1-21 17:04)單擊“控件工具箱”工具欄中的某一個(gè)控件按鈕,然后在SHEET表上就可以按住左鍵拖動(dòng)鼠標(biāo)勾畫出某種控件,就這么簡(jiǎn)單。畫好了,看到了,可沒(méi)任何作用?。亢呛?,接下來(lái)就是要給這些控件“賦予生命”了。再次看到“控件工具箱”工具欄,從左數(shù)第一個(gè)按鈕(如圖: 2.jpg (4.14 KB)2009-1-21 17:04),這個(gè)按鈕的作用是進(jìn)入設(shè)計(jì)

47、模式和退出設(shè)計(jì)模式,如果在非設(shè)計(jì)模式下,那么對(duì)于你添加的控件就會(huì)按照你所定義的事件代碼觸發(fā)執(zhí)行,如果要編輯這些按鈕,就必須確保這個(gè)切換設(shè)計(jì)模式的按鈕處于被按下的狀態(tài),這時(shí)候就進(jìn)入了設(shè)計(jì)模式,這時(shí)對(duì)上述你添加的控件進(jìn)行操作就不會(huì)觸發(fā)你定義的事件代碼,就可以提供給你編輯修改這些控件屬性和代碼的機(jī)會(huì)。請(qǐng)確認(rèn)切換設(shè)計(jì)模式按鈕處于按下?tīng)顟B(tài),雙擊你添加在當(dāng)前工作表中的任何一個(gè)控件,你就能看到自動(dòng)打開(kāi)了VBA編輯窗口,并生成了與被雙擊控件關(guān)聯(lián)的一個(gè)事件,當(dāng)前光標(biāo)正在這個(gè)事件過(guò)程中一閃一閃的等你呢!請(qǐng)把目光移到代碼編輯窗口的最頂端的兩個(gè)下拉列表框那里(還記得前面講的叫什么名字嘛?),左側(cè)的下拉框顯示的是當(dāng)前控

48、件的名稱,右側(cè)下拉框顯示的是該控件的默認(rèn)事件,(如圖: 3.jpg (3.32 KB)2009-1-21 17:04)比如文本框,默認(rèn)名稱為“TextBox1”,默認(rèn)事件為“Change”,這個(gè)事件表示當(dāng)文本框內(nèi)容發(fā)生變化的時(shí)候被觸發(fā)執(zhí)行。你可以下拉右側(cè)的列表框,你會(huì)發(fā)現(xiàn),和當(dāng)前控件關(guān)聯(lián)的事件有很多,至于如何用我們下面會(huì)逐個(gè)講解。現(xiàn)在請(qǐng)重新回到SHEET1工作表界面,再重新選擇另外一類控件,添加這個(gè)控件并雙擊進(jìn)入編輯窗口,看看和這種(比如命令按鈕)控件關(guān)聯(lián)的事件有哪些?至此,知道如何給控件添加代碼了嘛?還有個(gè)小問(wèn)題,你考慮過(guò)為什么這里出現(xiàn)的控件名稱都是一樣的,只是在最后添加了數(shù)字以示區(qū)別嘛?因

49、為你沒(méi)有修改控件的名稱,所以就只能用默認(rèn)的名稱咯。其實(shí)每個(gè)控件都有名稱,因?yàn)槊總€(gè)控件都是對(duì)象嘛!所以,設(shè)置控件的名稱就是設(shè)置控件對(duì)象的一個(gè)屬性。除了名稱屬性外,常見(jiàn)的還有哪些屬性呢?我在這里講一個(gè)查看屬性的方法,大家不妨自己去看看各類對(duì)象的屬性。所謂“師傅領(lǐng)進(jìn)門,修行在個(gè)人”嘛!上面提到的“控件工具箱”工具欄還在嗎?剛才講了從左邊數(shù)第一個(gè)按鈕的作用,除了各類控件外,還有2個(gè)按鈕,也就是從左邊數(shù)第2個(gè)和第3個(gè)按鈕沒(méi)用過(guò),你一定猜出來(lái)了,不錯(cuò),第二個(gè)按鈕是打開(kāi)屬性對(duì)話框的(如圖: 4.jpg (32.43 KB)2009-1-21 17:04),點(diǎn)了這個(gè)按鈕就可以看到當(dāng)前選中對(duì)象的屬性,而第三個(gè)按

50、鈕則和雙擊某個(gè)控件一樣,是打開(kāi)代碼編輯窗口的。最后,我想結(jié)合一個(gè)實(shí)例講講常見(jiàn)控件的常見(jiàn)屬性和事件。(實(shí)例: 例2.rar (9.07 KB) 例2.rar (9.07 KB)下載次數(shù): 232009-1-21 17:04)一般控件常見(jiàn)屬性主要有如下幾個(gè):Enable,取值為邏輯值,通過(guò)設(shè)置該屬性可以決定控件當(dāng)前是否可用;Visible,取值為邏輯值,通過(guò)設(shè)置該屬性可以決定控件當(dāng)前是否可以被顯示出來(lái)。對(duì)于標(biāo)簽控件,常見(jiàn)屬性就是Caption屬性,取值為文本,該屬性決定了標(biāo)簽當(dāng)前顯示出來(lái)的文本。對(duì)于文本框、列表框、組合框控件,常見(jiàn)屬性有Value屬性,取值為文本,該屬性決定了文本框、列表框和組合框

51、的內(nèi)容,可讀寫。對(duì)于命令按鈕控件,常見(jiàn)屬性有Caption屬性,取值為文本,該屬性決定了按鈕當(dāng)前顯示出來(lái)的文本。接下來(lái),大家新建一個(gè)空白的EXCEL文檔,在Sheet1工作表中,依次添加標(biāo)簽、文本框、命令按鈕各一個(gè),如圖: 5.jpg (6.38 KB)2009-1-21 17:04。設(shè)置標(biāo)簽控件的名稱屬性為:Lbl_A1;Caption屬性為“A1單元格的值:”;文本框控件的名稱屬性為:Txt_A1;命令按鈕控件的名稱屬性為:Cmd_A1;Caption屬性為“讀取”;接著,雙擊命令按鈕控件,打開(kāi)代碼編輯器窗口,并在Cmd_A1_Click()事件中,添加如下代碼:Txt_A1.value

52、= Cstr(Sheet1.Range("A1").value)。保存后,回到Sheet1工作表編輯界面,單擊控件工具箱的左側(cè)第一個(gè)按鈕,即退出設(shè)計(jì)模式。這時(shí)候,在A1單元格輸入一個(gè)值后,只要按一下命令按鈕,在文本框中就會(huì)出現(xiàn)A1單元格的值。由于時(shí)間關(guān)系,今天只是簡(jiǎn)要的講述了一些常見(jiàn)控件的常見(jiàn)屬性、方法和事件,至于其他一些控件和大家以后遇到的新的控件的屬性、事件和方法,可以參照我上面講述的過(guò)程和方法自己去學(xué)習(xí)、練習(xí)和使用。明天繼續(xù)?!?009.1.22】代碼起步關(guān)鍵字(續(xù))新年的腳步離我們?cè)絹?lái)越近了,越是臨近過(guò)年,事情就越忙,辦年貨、籌備年夜飯.好不容易跑出來(lái)寫點(diǎn)東西,不知

53、道一會(huì)還會(huì)有啥事等著我呢!    不知道昨天講的關(guān)于控件類的關(guān)鍵字大家有沒(méi)有掌握,如果沒(méi)搞清楚也沒(méi)關(guān)系,我們接下來(lái)會(huì)專題詳細(xì)講解每一個(gè)控件的用法,只要大家耐心聽(tīng)下去。今天繼續(xù)聊關(guān)鍵字的話題。今天要講的是聲明類關(guān)鍵字。先列示如下:    【聲明類關(guān)鍵字】    Public:聲明公共類型的數(shù)據(jù);    Private:聲明私有類型的數(shù)據(jù);    Static:聲明靜態(tài)類型的數(shù)據(jù);    Dim:聲明數(shù)據(jù)類型;如:Dim myCell As Range   

54、reDim:定義未顯式聲明的數(shù)組的維數(shù)和元素;    Const:聲明常量數(shù)據(jù);如:Const limit As Integer = 33    As:一般用于聲明數(shù)據(jù)類型中的“As Type”子句;    Type:聲明用戶自定義數(shù)據(jù)類型。    考慮到該類關(guān)鍵字屬于一個(gè)相互聯(lián)系的整體,并且一般在寫代碼的時(shí)候都會(huì)遇到,因此我想分三個(gè)部分來(lái)講解。首先我們先了解下VBA代碼的語(yǔ)法結(jié)構(gòu)。每一種編程語(yǔ)言都有各自的語(yǔ)法組織結(jié)構(gòu),什么內(nèi)容就應(yīng)該放在什么地方,就像人身上的“部件”,如果鼻子長(zhǎng)到了眼睛的上面,那就不屬于正常的人了

55、。VBA代碼一般都按照事件、過(guò)程、函數(shù)、模塊、類模塊等來(lái)組織,不管是系統(tǒng)內(nèi)部定義好的還是開(kāi)發(fā)人員自定義的過(guò)程、函數(shù)或模塊,使用前都必須聲明。聲明也就是告訴VBA代碼的編譯器,我下面的程序中會(huì)用到這些變量、過(guò)程、函數(shù)和模塊等。聲明分兩種,一種是顯式聲明,也就是將聲明部分代碼明確的寫出來(lái)。另一種是非顯式聲明,意思正好和前一種相反。當(dāng)您的模塊中含有這條語(yǔ)句“Option Explicit”,那么系統(tǒng)就強(qiáng)制規(guī)定您必須顯式聲明該模塊中的所有變量,否則將編譯出錯(cuò)。如果沒(méi)有出現(xiàn)上述語(yǔ)句,那么您可以在使用變量前不顯式聲明該變量,系統(tǒng)編譯時(shí)將默認(rèn)該變量類型為Variant。    聲明語(yǔ)句可

56、以命名和定義過(guò)程、變量、數(shù)組以及常數(shù)。當(dāng)聲明一個(gè)過(guò)程、變量或常數(shù)時(shí),也同時(shí)定義了它的作用范圍,而此范圍是取決于聲明位置以及用什么關(guān)鍵字來(lái)聲明它。這就是我要講的第二個(gè)問(wèn)題。先說(shuō)聲明的位置,如果你在某個(gè)工作表的某個(gè)過(guò)程中聲明了一個(gè)變量或函數(shù),那么這個(gè)變量或函數(shù)的作用范圍就局限于這個(gè)過(guò)程;如果你在一個(gè)工作表的(通用)部分聲明了一個(gè)變量或函數(shù),那么這個(gè)變量或函數(shù)的作用范圍就局限于該工作表代碼模塊中。這就表明聲明的位置可以決定變量或函數(shù)的作用范圍。除了聲明位置外,采用哪個(gè)關(guān)鍵字也可以決定被聲明對(duì)象的作用范圍。比如,如果你在一個(gè)自定義模塊中,采用PUBLIC這個(gè)關(guān)鍵字來(lái)聲明一個(gè)變量,那么這個(gè)變量在所有應(yīng)用

57、程序的所有沒(méi)有使用 Option Private Module 的模塊的任何過(guò)程中都是可用的(若該模塊使用了 Option Private Module,則該變量只是在其所屬工程中是公用的)。而采用PRIVATE聲明的變量,其作用范圍就只有該模塊內(nèi)部,稱為私有變量。上述兩個(gè)關(guān)鍵字只能在模塊級(jí)別代碼中使用。(所謂模塊級(jí)別就是只在過(guò)程外部的代碼,即某個(gè)工作表的<通用>部分中寫的代碼,區(qū)別于過(guò)程級(jí)別的代碼,即過(guò)程中書寫的代碼)除此以外,還有一個(gè)DIM關(guān)鍵字,用這個(gè)關(guān)鍵字可以在模塊級(jí)別中聲明變量,也可以在過(guò)程級(jí)別中聲明的變量;前者聲明的變量對(duì)該模塊中的所有過(guò)程都是可用的,而后者則只在過(guò)程內(nèi)

58、是可用的。STATIC關(guān)鍵字是用來(lái)聲明靜態(tài)類型變量的,這是什么意思呢?舉個(gè)例子你就清楚了,一般聲明的過(guò)程級(jí)別變量,在程序代碼運(yùn)行完該過(guò)程之后,該變量的值就自動(dòng)清空了,該變量也由于所在過(guò)程的運(yùn)行完畢而結(jié)束了其生存周期。這樣的過(guò)程級(jí)別的變量稱為動(dòng)態(tài)變量。那么有另外一種變量,雖然也是在過(guò)程級(jí)別中被聲明的,但在該過(guò)程運(yùn)行結(jié)束以后,該變量的值仍然保持不變,直至該變量所在過(guò)程所在的模塊運(yùn)行中止為止。這樣的變量就叫做靜態(tài)變量。靜態(tài)變量只能在過(guò)程級(jí)別中使用,用于聲明變量并分配存儲(chǔ)空間。在整個(gè)代碼運(yùn)行期間都能保留使用 Static 語(yǔ)句聲明的變量的值,并且其生命周期與包含該過(guò)程定義的模塊相同。從作用范圍來(lái)講,這

59、類變量由于在過(guò)程級(jí)別的代碼中被聲明,因此其作用范圍只是局限于其所在的過(guò)程內(nèi)部。如下圖所示:變量關(guān)系圖.jpg (81.61 KB)2009-1-22 16:52    今天的內(nèi)容可能比較枯燥,但絕對(duì)重要。正確理解聲明類關(guān)鍵字的用法,對(duì)把握變量、過(guò)程、函數(shù)等對(duì)象的作用范圍和生命周期有著非常總要的作用。希望今天的講解能對(duì)大家正確理解這部分關(guān)鍵字帶來(lái)幫助。    “什么?要定年夜飯的菜單?這就來(lái)”各位,明天見(jiàn)!【2009.1.27】代碼起步關(guān)鍵字(續(xù))小別數(shù)日,今日終于回來(lái)了。先給大伙道一聲“新年好”!早晨一早驅(qū)車三個(gè)多小時(shí),趕到了孩子他外婆家。到達(dá)的時(shí)候已然

60、到了中午,自然免不了應(yīng)酬一番。喝了點(diǎn)小酒,一下午頭都昏昏的。到此時(shí)日落西山,方突然想起年前許下的今日之約,立即開(kāi)機(jī)上網(wǎng)、奮起疾書,至此,才有了下面的文字,望諸位海涵!還記得年前我們說(shuō)完了聲明類關(guān)鍵字,今天我們要講的是數(shù)據(jù)類型關(guān)鍵字,列舉如下。【數(shù)據(jù)類型關(guān)鍵字】Byte:字節(jié)類型;Integer:整型數(shù)值類型;Long:長(zhǎng)整型數(shù)值類型;String:字符串類型;Boolean:邏輯類型;Single:?jiǎn)尉阮愋?;Double:雙精度類型;Currency:貨幣數(shù)值類型;Decimal:可以容納小數(shù)的數(shù)值類型;Variant:任何數(shù)字值或字符串值;Object:對(duì)象類型;用戶自定義:利用TYPE語(yǔ)

61、句由用戶自己定義的數(shù)據(jù)類型。首先,我們先談?wù)刅BA中大伙見(jiàn)到的文字有哪些。大家在VBA中能夠見(jiàn)到的文字,除了之前列舉的幾大類關(guān)鍵字(保留字)外,就是些數(shù)據(jù)和注釋了。注釋是以西文半角方式的單引號(hào)開(kāi)頭的文字,在VBA編輯器里顯示為綠色。這些字主要用來(lái)注釋解說(shuō)變量或代碼的用途。數(shù)據(jù)則有很多種,這才是我們今天要講的主要內(nèi)容。在VBA中,數(shù)據(jù)按照形態(tài)大致分為三類,常量、變量和數(shù)組。常量就是指在程序中已經(jīng)指定的值,并且常量的值在程序中保持不變。舉個(gè)例子,我們聲明一個(gè)常量名字叫“Name”,我們?cè)诳梢栽诼暶鞯臅r(shí)候直接賦予這個(gè)常量一個(gè)值比如“張三”。那么在這個(gè)程序里,我們就不用直接引用“張三”這個(gè)名字了,我們

62、在需要引用的時(shí)候只要用Name這個(gè)常量就可以替代了??赡苡械呐笥褧?huì)說(shuō),既然Name就是代表“張三”,那我們?yōu)槭裁床恢苯釉诔绦蚶飳憽皬埲蹦??這里有這么幾個(gè)原因。一是有可能直接使用“張三”不方便,如果起個(gè)有意義的名字更便于閱讀和維護(hù)代碼。二是如果以后需要修改程序,需要將程序中使用到“張三”的地方都改成“李四”,那么如果用引用一個(gè)常量的這種方式的話,就只需要修改Name這個(gè)常量的值就可以了。變量和常量有點(diǎn)類似,都是以一個(gè)名字來(lái)命名并賦予一個(gè)值給它,不同之處在于,常量的值在整個(gè)應(yīng)用程序代碼中是不變的,而變量的值會(huì)隨著代碼位置的不同而發(fā)生變化。在這里提供一個(gè)小建議,在給變量起名字的時(shí)候最好起一些有意義

63、的名字,否則在今后維護(hù)代碼的時(shí)候會(huì)遇到困難。比如可以給整型變量加上INT的前綴,如果這個(gè)變量用來(lái)保存“編號(hào)”的,那么可以起這樣的名字“INT_name”,如果是保存“生日”的日期型變量呢?可以這樣起“DATE_birthday”,等等。再來(lái)說(shuō)說(shuō)數(shù)組,數(shù)組也是變量,不同之處是數(shù)組是一組變量的集合而不是單個(gè)變量。因此,數(shù)組一般由變量名和下標(biāo)組成,例如:NAME(2)、k(5)等。數(shù)組按照下標(biāo)的個(gè)數(shù)分為一維數(shù)組(只有一個(gè)下標(biāo))、二維數(shù)組(有兩個(gè)下標(biāo))和多維數(shù)組(有多于2個(gè)下標(biāo))。除了普通變量能采用數(shù)組形式外,對(duì)象、控件、單元格等都可以采用數(shù)組的形式來(lái)表示。對(duì)于有規(guī)律的變量或?qū)ο蟛捎脭?shù)組的形式可以方便的配合循環(huán)語(yǔ)句來(lái)簡(jiǎn)化代碼、提高執(zhí)行效率,不過(guò)會(huì)占用更多的內(nèi)存資源,因此是一種空間換時(shí)間的方法。其次,在學(xué)習(xí)具體變量之前,我們還要談?wù)動(dòng)?jì)算機(jī)是如何保存和處理各類數(shù)據(jù)的。按照數(shù)據(jù)的種類和載體我們大致可以分為這么幾類,數(shù)字、西文字符、中文字符、圖形、動(dòng)畫、視頻、音頻等。這些數(shù)據(jù)在計(jì)算機(jī)中都被翻譯為2進(jìn)制來(lái)保存。比如數(shù)字,分為整形、浮點(diǎn)型、單精度、雙精度、長(zhǎng)整形等,按照2的N次冪的方法計(jì)算所能保存的最大數(shù)和最小數(shù)來(lái)確定范圍;再比如數(shù)字型字符和西文字符,都是按照ASCII編碼來(lái)保存的,一個(gè)字符占用一個(gè)字節(jié)(8位二進(jìn)制);中文字符由于數(shù)量眾多,就采用國(guó)際標(biāo)準(zhǔn)交

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論