【正文】
到您猜中為止。這個(gè)游戲程序中既包含了新的知識(shí)點(diǎn),又要考驗(yàn)?zāi)鷮?duì)前兩課知識(shí)運(yùn)用的熟練程度,就讓我們靜下心來克服這個(gè)小難關(guān)吧。通過對(duì)前面兩個(gè)實(shí)例的學(xué)習(xí),相信您對(duì)自己掌握VBA編程已充滿了信心。 掌握程序的循環(huán)與判斷; 請(qǐng)思考:哪些情況下,會(huì)使用到MsgBox函數(shù)的不同返回的值? 請(qǐng)將本課中學(xué)到的MsgBox函數(shù)的參數(shù)分別運(yùn)用到實(shí)例一中,看看效果如何。加點(diǎn)油吧。分別運(yùn)行本程序與最前面的程序,并選擇“取消”,對(duì)比一下運(yùn)行的效果,從完善后的程序中——想必您不難看出“常數(shù)”在程序中的作用了吧? X amp?!?============完善后的B程序=============== Sub B() Dim X Dim Y X = InputBox(您的姓名是:, 姓名輸入框, 您的姓名請(qǐng)輸入到這兒。關(guān)于“If”判斷語句,不是本實(shí)例的學(xué)習(xí)重點(diǎn),下節(jié)課我們將會(huì)詳細(xì)介紹它。所以,InputBox函數(shù)只有一個(gè)常數(shù)——“空”。MsgBox函數(shù)的常數(shù)如下: 程序?qū)懙竭@么詳細(xì),您是否已經(jīng)覺得它已經(jīng)很完善了呢?那么,在當(dāng)程序要求您輸入您的姓名時(shí),如果您選擇了“取消”,會(huì)有什么現(xiàn)象呢?對(duì),“取消”按鈕同樣會(huì)向程序返回一個(gè)值。(請(qǐng)與前面的圖21與圖22對(duì)比一下,看看到底哪些地方有了變化?)。 X amp。 根據(jù)上面的格式,請(qǐng)修改本實(shí)例的程序代碼為: ’’’======還有待完善的程序二===== Sub B() Dim X Dim Y X = inputbox(您的姓名是:,” 姓名輸入框”,” 您的姓名請(qǐng)輸入到這兒。例子:X= InputBox(“請(qǐng)輸入您的姓名”,”這里是輸入對(duì)話框”,”您的姓名請(qǐng)輸入到這兒。變量=InputBox(“要顯示的提示文本”,” 輸入框的題目”,”輸入框中默認(rèn)顯示的語句”) 使用InputBox函數(shù)時(shí)的標(biāo)準(zhǔn)格式:”朋友??!”,0,”這里是歡迎對(duì)話框”)請(qǐng)注意格式中英文狀態(tài)下的引號(hào)、逗號(hào)與空格的使用。 例子:Y= MsgBox(”歡迎您” amp。使用MsgBox函數(shù)時(shí)的標(biāo)準(zhǔn)格式:”連接符號(hào)時(shí),請(qǐng)一定注意字符串與字符串之間有一個(gè)空格,否則程序一定會(huì)出錯(cuò)?!狈?hào)來連接字符串,所以我們?cè)诔绦蜻\(yùn)行最后,看到的是一個(gè)像圖22那樣完整的歡迎語句。字符串“歡迎您” 、字符串“朋友!”和變量“X”所可能對(duì)應(yīng)的字符串“老王、老李……”等。)。 X amp。 X”語句的過程,程序就會(huì)報(bào)“沒有申明變量”的錯(cuò)誤。為了避免我們使用變量時(shí)出錯(cuò),我們可以在VBE編輯器菜單的工具——選項(xiàng)——編輯器選項(xiàng)卡上,選中“要求申明變量”(見下面圖2-2-4),這樣VBE會(huì)自動(dòng)在我們每一個(gè)工程的前面加上一句“Option Explicit”,這句代碼將檢查我們所要使用的變量是否申明,沒有申明的話就會(huì)中止程序的運(yùn)行。雖說我們不申明變量就可以使用它,但這絕對(duì)不是個(gè)好的習(xí)慣。“Dim X”這句代碼中的“Dim”就是申明變量的函數(shù),“Dim X”就是申明了一個(gè)名叫“X”的變量。怎么樣,是不是感覺不到區(qū)別?(如果程序報(bào)錯(cuò)說“沒有申明變量”的話,沒有關(guān)系,請(qǐng)接著看下面的內(nèi)容。這下,大家可能就知道“變量”的含意了吧?在程序運(yùn)行中,我們經(jīng)常會(huì)遇到值不能確定,或者是可能會(huì)發(fā)生改變的某個(gè)數(shù)據(jù),在這個(gè)時(shí)候,我們就用一個(gè)“符號(hào)”來“代替”這個(gè)可能會(huì)變化的值,這個(gè)用來代替不能確定的值的“符號(hào)”,就是“變量”。這句代碼事實(shí)上就是一個(gè)計(jì)算機(jī)提問,人回答的“對(duì)話”過程。運(yùn)行效果如圖21與圖22。所以,我們先稱本程序?yàn)椤斑€有待完善的程序”。 朋友!)”這行代碼時(shí),括號(hào)內(nèi)幾個(gè)字符串之間有空格,沒有輸入空格的話會(huì)出錯(cuò),出錯(cuò)時(shí),代碼將以紅色顯示。 朋友!) End Sub注意:1、在輸入“Msgbox( 歡迎您 amp。 Msgbox( 歡迎您 amp。所以,幾乎所有的編程語言都提供有直接與計(jì)算機(jī)進(jìn)行對(duì)話的函數(shù),在VBA中,這樣的最基本的函數(shù)是消息函數(shù)“MsgBox”與輸入框函數(shù)“InputBox”。想想我們平時(shí)與他人談話時(shí)的形式——你提問,他回答;或是他提問,你回答。 用“amp。 知識(shí)點(diǎn): 實(shí)例二:基本的對(duì)話框函數(shù) 好了,實(shí)例一到此結(jié)束,回顧一下課前的知識(shí)點(diǎn),都掌握了嗎?如果覺得沒有問題了,就準(zhǔn)備進(jìn)入我們的第二個(gè)實(shí)例吧。(如果我們要對(duì)自己所編寫的代碼進(jìn)行注釋,可在注釋語句的前面加上一個(gè)英文狀態(tài)下的撇號(hào),該注釋的語言是不會(huì)被程序運(yùn)行的。 同上操作順序,打開“宏名”對(duì)話框,在“宏名”中新輸入一個(gè)名字“B”(注意沒有引號(hào)),再點(diǎn)擊“創(chuàng)建”按鈕,這時(shí)就會(huì)打開VBE編輯器,并已為我們生成了一個(gè)名為“B”的空過程。選中“A”,點(diǎn)擊“運(yùn)行”按鈕,就能運(yùn)行該宏。 打開Word,指向工具——宏,再點(diǎn)擊“宏”按鈕,打開“宏名”對(duì)話框。該函數(shù)在我們的第二個(gè)實(shí)例中,將做詳細(xì)講解。整段程序結(jié)尾的end sub語句,表示過程“A”在此結(jié)束。 代碼解說:點(diǎn)擊工具欄上的黑色三角形的“播放鍵”,或按下F5鍵運(yùn)行這個(gè)程序,您將看到一個(gè)彈出的消息框。 請(qǐng)?jiān)凇按a編輯區(qū)”中輸入如下的代碼:sub A ()msgbox(“你好,世界!”)end sub 好,現(xiàn)在我們就在這個(gè)VBE環(huán)境下,利用VBA語言,來編寫我們的第一個(gè)工程(即程序)。如果“工程資源管理器”已有“模塊”,則雙擊模塊名,就能打開“代碼編輯區(qū)”。界面左面中間部份是“工程資源管理器”所在的“工程資源管理區(qū)”,每一篇Word文檔中所編寫的程序,Word都把它看成為一個(gè)“工程”,“工程資源管理器”就是對(duì)這些工程進(jìn)行管理的地方;界面左下方是“對(duì)像屬性設(shè)置區(qū)”,我們可以對(duì)自己要用到的對(duì)像的屬性進(jìn)行設(shè)置,第四個(gè)實(shí)例中,我們將對(duì)“屬性設(shè)置”進(jìn)行詳細(xì)解說,現(xiàn)在大家不必管它;界面右面大面積空白的區(qū)域是“代碼編輯區(qū)”,我們編寫的所有代碼都放在這兒。 “VB編輯器”就是VBE,VBE是Visual Basic Editing的縮寫。不要以為這些知識(shí)點(diǎn)有多難,讓我們一步一步地來。 知識(shí)點(diǎn):所以,把每個(gè)實(shí)例“做”一遍,細(xì)心體會(huì)每個(gè)實(shí)例的知識(shí)點(diǎn),將有助于您快速掌握VBA的編程技術(shù);單純地“看”,則無助于您的學(xué)習(xí)。 對(duì)于第一類朋友,我想說,不要被自己想象出來的“困難”嚇倒,如果您沒有親自嘗試過,怎么知道編程會(huì)很“高深”,又怎么知道自己學(xué)不會(huì)?而第二類朋友如果能靜下心來把基礎(chǔ)知識(shí)補(bǔ)一補(bǔ),相信您的問題也會(huì)迎刃而解。當(dāng)我問第二類朋友為什么不多看看VBA的幫助文件時(shí),“看不大懂,就像有語言障礙一樣。 工作中,經(jīng)??吹皆S多朋友在使用Office時(shí)已經(jīng)非常地熟練,但仍不敢去接觸Office 的VBA編程;在網(wǎng)上Office的VBA編程論壇中,同樣看到有朋友在其中流連了相當(dāng)長的時(shí)間,但仍然不得其門而入。從零開始,步入Word宏編程的世界(第一講)問一下這兩類朋友,前者覺得編程是一件很“高深”的事,自己恐怕學(xué)不會(huì);后者為了提高自己的工作效率,雖然很想學(xué),但自己一點(diǎn)編程的基礎(chǔ)也沒有,照著網(wǎng)上高手們的帖子做,反而越學(xué)越糊涂?!彼@樣回答我。 那么,就讓我們從最基礎(chǔ)的知識(shí)開始,步入Office宏編程的世界吧。文前的幾點(diǎn)說明: 雖說本文用到的程序在office2007與office2010中同樣可以正常運(yùn)行,但考慮到目前單位辦公用機(jī)的實(shí)際情況,本文所有的實(shí)例主要還是面向Office2003的用戶; 為了便于各位讀者理清思路,避免文章涉及面太廣,本文主要以office2003中最常用的Word為主進(jìn)行講述,有與其它Office套件相關(guān)聯(lián)的地方,將單獨(dú)說明; 為避免學(xué)習(xí)過程中的枯燥乏味,本文沒有像傳統(tǒng)編程教材那樣以理論知識(shí)為線索展開,而是將不同的知識(shí)點(diǎn)放到了幾個(gè)不同的實(shí)例之中進(jìn)行講述。 本文的宗旨是——完全面向初學(xué)者!或許您還能以此為契機(jī)叩開奔向VB6.,說不定您還能編出一、兩個(gè)病毒玩玩兒(當(dāng)然僅限于玩玩兒,千萬別做出什么傻事來!)! 好了,下面就開始我們Word的VBA編程之旅吧,愿您旅途愉快!實(shí)例一:“你好,世界!”熟悉VBE的編程界面; 什么是VB、VBE、VBA; 什么是過程、工程。啟動(dòng)Word,指向工具——宏——VB編輯器,打開VB編輯器的界面,如圖11。我們?cè)赩BE編程環(huán)境中所使用的編程語言就是“VBA”,即Visual Basic for Applications的縮寫,VBA語言是我們所熟知的VB編程語言的一個(gè)子集。 VBE編輯器界面的菜單欄與工具欄就不必說了。如果看不到這個(gè)空白區(qū)域,則打開“插入”菜單,插入一個(gè)“模塊”就行了。 注意,代碼“msgbox(你好,世界!!)”一句中的引號(hào)與括號(hào)為英文標(biāo)點(diǎn)。如圖12。sub是VB編程中申明一個(gè)過程的語句,sub A ( )申明了一個(gè)名叫A的過程,A后面跟了一個(gè)括號(hào),它的作用現(xiàn)在大家暫時(shí)不用管它。每一個(gè)程序都必需有開始與結(jié)束的標(biāo)志,所以,從Sub A ( )到End sub就構(gòu)成了一個(gè)完整的“過程”。 Msgbox是一個(gè)函數(shù),它的作用是彈出一個(gè)消息框來,它后面括號(hào)中的內(nèi)容就是要在彈出的消息框中顯示的內(nèi)容。 本實(shí)例的知識(shí)擴(kuò)展:這時(shí),我們就可以看到剛才我們編寫的名叫“A”的宏。該過程中的綠色文字,就是這個(gè)宏的注釋。)用這個(gè)方法創(chuàng)建過程,可以避免手工輸入時(shí)疏忽掉程序結(jié)尾的End sub。從零開始,步入Word宏編程的世界(第二講)認(rèn)識(shí)消息框函數(shù)MxgBox與輸入框函數(shù)InputBox;什么是常量、什么是變量、申明變量的方法是什么;”符號(hào)連接字符串。我們所編寫的程序,在與計(jì)算機(jī)進(jìn)行交互的過程中,其形式也是這樣的一問一答。 請(qǐng)輸入以下代碼并運(yùn)行: ’’’======還有待完善的程序一===== sub B() Dim X X = inputbox(您的姓名是:)。 X amp。 X amp。2、本程序運(yùn)行時(shí)如果點(diǎn)“取消”按鈕,其實(shí)會(huì)出現(xiàn)問題,關(guān)于對(duì)這個(gè)問題的解決方法,將在后面討論。(朋友們可以先試一下,看看會(huì)出現(xiàn)什么問題?)。看到了嗎?這就是最簡單的與計(jì)算機(jī)進(jìn)行對(duì)話的效果。 代碼解說:從Sub B()到End sub就是一個(gè)完整的過程——“B”?!癐nputBox(您的姓名是:)”這句代碼是顯示一個(gè)“輸入框”,請(qǐng)您輸入自己的姓名。其中,“InputBox”函數(shù)的作用就是彈出一個(gè)輸入框,等待我們回答計(jì)算機(jī)的提問。 當(dāng)然,我們?cè)诨卮鹩?jì)算機(jī)時(shí),可能填的是“老王”也可能填的是“老李”……,這個(gè)答案本身是不固定的,所以,我們將這個(gè)答案的值賦予“變量”——“X”?,F(xiàn)在,我們刪去本程序中的“Dim X”這句后,再運(yùn)行一下試試效果。)在VBA語言中允許我們不申明變量就直接運(yùn)用它,所以程序仍然能夠正常運(yùn)行。在“X=inputbox(您的姓名是:)”這句代碼中,我們利用等號(hào),將輸入框中取得的值賦予給了變量“X”。首先,在一些代碼較長的程序中,您能保證那些名字較長的變量在后面用到時(shí),您不會(huì)輸錯(cuò)嗎?其次,自己不申明變量,時(shí)間久了,那些較長的程序可能會(huì)連您自己也看不懂;另外,程序在訪問申明過的變量時(shí),速度會(huì)比訪問沒有申明過的變量要快一些。做了上述的操作后,我們?cè)龠\(yùn)行去掉“Dim 關(guān)于變量,還有一些其它的知識(shí),我們將在實(shí)例三中進(jìn)行更深一步的學(xué)習(xí),現(xiàn)在就到這吧。 “Msgbox( 歡迎您 amp。 朋友!)”這句中的“msgBox”函數(shù),大家已不陌生,它的作用就是彈出一個(gè)消息框來(在本程序中,這個(gè)消息框就是計(jì)算機(jī)對(duì)我們輸入姓名后的回答。在這個(gè)消息框所顯示的文字中包含了三個(gè)部分。在VBA語言中,我們使用“amp。VBA語言中,在使用“amp。由于MsgBox函數(shù)與InputBox函數(shù)是兩個(gè)非常常用的對(duì)話函數(shù),所以,我們?cè)賹?duì)它進(jìn)行更深一步的學(xué)習(xí)。 變量=MsgBox(”要顯示在這兒的語句”,按鈕的參數(shù),”消息框的題目”) X amp?!??!? Y = Msgbox( 歡迎您 amp。 朋友!,0,” 這里是歡迎對(duì)話框.”) End Sub 本段程序應(yīng)該很容易讀懂吧?運(yùn)行一下,看看與前面程序的區(qū)別在什么地方?再分別把MsgBox函數(shù)的參數(shù)0替換為0、5這幾個(gè)參數(shù)并運(yùn)行,看看又有什么不同?怎么樣,對(duì)話框中給出的提示是不是更豐富?下面的圖25與圖26是MsgBox函數(shù)的參數(shù)為“5”時(shí)的運(yùn)行效果。為了使用函數(shù)時(shí)更靈活一些,VBA將這些返回的值“固定”為以下的數(shù)值,這些在程序中被固定的值,就是“常數(shù)”。 “確定”按鈕被單擊時(shí),返回“1”;“取消”按鈕被單擊時(shí),返回“2”;“終止”按鈕被單擊時(shí),返回“3”;“重試”按鈕被單擊時(shí),返回“4”;“忽略”按鈕被單擊時(shí),返回“5”;“是”按鈕被單擊時(shí),返回“6”;“否”按鈕被單擊時(shí),返回“7”。 InputBox函數(shù)在使用過程中,當(dāng)人們輸入了值的時(shí)候,選擇“確定”或按下回車鍵,則返回輸入框中的內(nèi)容,輸入框中的內(nèi)容顯示不是“固定”的,也就是說它不是常數(shù);但是,如果人們?cè)谝筝斎胫畷r(shí)選擇的是“取消”按鈕,則會(huì)返回一個(gè)值,這個(gè)值是“空值”,注意“空值”并不是“零”。下面,我們用:如果(If)、那么(Then)、否則(else)