WORD VBA編程 從零開始學VBA_第1頁
WORD VBA編程 從零開始學VBA_第2頁
WORD VBA編程 從零開始學VBA_第3頁
WORD VBA編程 從零開始學VBA_第4頁
WORD VBA編程 從零開始學VBA_第5頁
已閱讀5頁,還剩48頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

本文格式為Word版,下載可任意編輯——WORDVBA編程從零開始學VBA從零開始,步入Word宏編程的世界(第一講)

工作中,經(jīng)??吹酱罅颗笥言谑褂肙ffice時已經(jīng)十分地熟練,但仍不敢去接觸Office的VBA編程;在網(wǎng)上Office的VBA編程論壇中,同樣看到有朋友在其中流連了相當長的時間,但依舊不得其門而入。問一下這兩類朋友,前者覺得編程是一件很“高深〞的事,自己生怕學不會;后者為了提高自己的工作效率,雖然很想學,但自己一點編程的基礎也沒有,照著網(wǎng)上高手們的帖子做,反而越學越糊涂。當我問其次類朋友為什么不多看看VBA的幫助文件時,“看不大懂,就像有語言障礙一樣。〞他這樣回復我。

對于第一類朋友,我想說,不要被自己想象出來的“困難〞嚇倒,假使您沒有親自嘗試過,怎么知道編程會很“高深〞,又怎么知道自己學不會?而其次類朋友假使能靜下心來把基礎知識補一補,相信您的問題也會迎刃而解。

那么,就讓我們從最基礎的知識開始,步入Office宏編程的世界吧。文前的幾點說明:

1、雖說本文用到的程序在office2023與office2023中同樣可以正常運行,但考慮到目前單位辦公用機的實際狀況,本文所有的實例主要還是面向Office2023的用戶;

2、為了便于各位讀者理清思路,避免文章涉及面太廣,本文主要以office2023中最常用的Word為主進行陳述,有與其它Office套件相關聯(lián)的地方,將單獨說明;

3、為避免學習過程中的枯燥乏味,本文沒有像傳統(tǒng)編程教材那樣以理論知識為線索展開,而是將不同的知識點放到了幾個不同的實例之中進行陳述。所以,把每個實例“做〞一遍,細心體會每個實例的知識點,將有助于您快速把握VBA的編程技術;單純地“看〞,則無助于您的學習。

本文的宗旨是——完全面向初學者!或許您還能以此為契機叩開奔向VB6.0或VB.NET的大門,說不定您還能編出一、兩個病毒玩玩兒(當然僅限于玩玩兒,千萬別做出什么傻事來!)!好了,下面就開始我們Word的VBA編程之旅吧,愿您旅途愉快!實例一:“你好,世界!〞

知識點:1、熟悉VBE的編程界面;2、什么是VB、VBE、VBA;3、什么是過程、工程。

不要以為這些知識點有多難,讓我們一步一步地來。

啟動Word,指向工具——宏——VB編輯器,開啟VB編輯器的界面,如圖1-1。

“VB編輯器〞就是VBE,VBE是VisualBasicEditing的縮寫。我們在VBE編程環(huán)境中所使用的編程語言就是“VBA〞,即VisualBasicforApplications的縮寫,VBA語言是我們所熟知的VB編程語言的一個子集。VBE編輯器界面的菜單欄與工具欄就不必說了。界面左面中間部份是“工程資源管理器〞所在的“工程資源管理區(qū)〞,每一篇Word文檔中所編寫的程序,Word都把它看成為一個“工程〞,“工程資源管理器〞就是對這些工程進行管理的地方;界面左下方是“對像屬性設置區(qū)〞,我們可以對自己要用到的對像的屬性進行設置,第四個實例中,我們將對“屬性設置〞進行詳細講解,現(xiàn)在大家不必管它;界面右面大面積空白的區(qū)域是“代碼編輯區(qū)〞,我們編寫的所有代碼都放在這兒。假使看不到這個空白區(qū)域,則開啟“插入〞菜單,插入一個“模塊〞就行了。假使“工程資源管理器〞已有“模塊〞,則雙擊模塊名,就能開啟“代碼編輯區(qū)〞。

好,現(xiàn)在我們就在這個VBE環(huán)境下,利用VBA語言,來編寫我們的第一個工程(即程序)。請在“代碼編輯區(qū)〞中輸入如下的代碼:

subA()

msgbox(“你好,世界!〞)endsub

注意,代碼“msgbox(\你好,世界!!\一句中的引號與括號為英文標點。點擊工具欄上的黑色三角形的“播放鍵〞,或按下F5鍵運行這個程序,您將看到一個彈出的消息框。如圖1-2。

代碼講解:

sub是VB編程中申明一個過程的語句,subA()申明白一個名叫A的過程,A后面跟了一個括號,它的作用現(xiàn)在大家暫時不用管它。整段程序結尾的endsub語句,表示過程“A〞在此終止。每一個程序都必需有開始與終止的標志,所以,從SubA()到Endsub就構成了一個完整的“過程〞。

Msgbox是一個函數(shù),它的作用是彈出一個消息框來,它后面括號中的內容就是要在彈出的消息框中顯示的內容。該函數(shù)在我們的其次個實例中,將做詳細講解。本實例的知識擴展:

1、開啟Word,指向工具——宏,再點擊“宏〞按鈕,開啟“宏名〞對話框。這時,我們就可以看到方才我們編寫的名叫“A〞的宏。選中“A〞,點擊“運行〞按鈕,就能運行該宏。

2、同上操作順序,開啟“宏名〞對話框,在“宏名〞中新輸入一個名字“B〞(注意沒有引號),再點擊“創(chuàng)立〞按鈕,這時就會開啟VBE編輯器,并已為我們生成了一個名為“B〞的空過程。該過程中的綠色文字,就是這個宏的解釋。(假使我們要對自己所編寫的代碼進行解釋,可在解釋語句的前面加上一個英文狀態(tài)下的撇號,該解釋的語言是不會被程序運行的。)用這個方法創(chuàng)立過程,可以避免手工輸入時疏忽掉程序結尾的Endsub。好了,實例一到此終止,回想一下課前的知識點,都把握了嗎?假使覺得沒有問題了,就準備進入我們的其次個實例吧。

從零開始,步入Word宏編程的世界(其次講)

實例二:基本的對話框函數(shù)

知識點:1、認識消息框函數(shù)MxgBox與輸入框函數(shù)InputBox;2、什么是常量、什么是變量、申明變量的方法是什么;3、用“&〞符號連接字符串。

想想我們平日與他人談話時的形式——你提問,他回復;或是他提問,你回復。我們所編寫的程序,在與計算機進行交互的過程中,其形式也是這樣的一問一答。所以,幾乎所有的編程語言都提供有直接與計算機進行對話的函數(shù),在VBA中,這樣的最基本的函數(shù)是消息函數(shù)“MsgBox〞與輸入框函數(shù)“InputBox〞。請輸入以下代碼并運行:

’’’======還有待完善的程序一=====subB()DimX

X=inputbox(\您的姓名是:\。Msgbox(\歡迎您\朋友!\EndSub

注意:1、在輸入“Msgbox(\\朋友!\有輸入空格的話會出錯,出錯時,代碼將以紅色顯示。2、本程序運行時假使點“取消〞按鈕,其實會出現(xiàn)問題,關于對這個問題的解決方法,將在后面探討。所以,我們先稱本程序為“還有待完善的程序〞。(朋友們可以先試一下,看看會出現(xiàn)什么問題?)。運行效果如圖2-1與圖2-2。

看到了嗎?這就是最簡單的與計算機進行對話的效果。

代碼講解:

從SubB()到Endsub就是一個完整的過程——“B〞。

“InputBox(\實上就是一個計算機提問,人回復的“對話〞過程。其中,“InputBox〞函數(shù)的作用就是彈出一個輸入框,等待我們回復計算機的提問。

當然,我們在回復計算機時,可能填的是“老王〞也可能填的是“老李〞……,這個答案本身是不固定的,所以,我們將這個答案的值賦予“變量〞——“X〞。這下,大家可能就知道“變量〞的含意了吧?在程序運行中,我們經(jīng)常會遇到值不能確定,或者是可能會發(fā)生改變的某個數(shù)據(jù),在這個時候,我們就用一個“符號〞來“代替〞這個可能會變化的值,這個用來代替不能確定的值的“符號〞,就是“變量〞?,F(xiàn)在,我們刪去本程序中的“DimX〞這句后,再運行一下試試效果。怎么樣,是不是感覺不到區(qū)別?(假使程序報錯說“沒有申明變量〞的話,沒有關系,請接著看下面的內容。)在VBA語言中允許我們不申明變量就直接運用它,所以程序依舊能夠正常運行?!癉imX〞這句代碼中的“Dim〞就是申明變量的函數(shù),“DimX〞就是申明白一個名叫“X〞的變量。在“X=inputbox(\框中取得的值賦予給了變量“X〞。

雖說我們不申明變量就可以使用它,但這絕對不是個好的習慣。首先,在一些代碼較長的程序中,您能保證那些名字較長的變量在后面用到時,您不會輸錯嗎?其次,自己不申明變量,時間久了,那些較長的程序可能會連您自己也看不懂;另外,程序在訪問申明過的變量時,速度會比訪問沒有申明過的變量要快

一些。

為了避免我們使用變量時出錯,我們可以在VBE編輯器菜單的工具——選項——編輯器選項卡上,選中“要求申明變量〞(見下面圖2-3、2-4),這樣VBE會自動在我們每一個工程的前面加上一句“Option

Explicit〞,這句代碼將檢查我們所要使用的變量是否申明,沒有申明的話就會中止程序的運行。做了上述的操作后,我們再運行去掉“DimX〞語句的過程,程序就會報“沒有申明變量〞的錯誤。

關于變量,還有一些其它的知識,我們將在實例三中進行更深一步的學習,現(xiàn)在就到這吧。

“Msgbox(\\朋友!\彈出一個消息框來(在本程序中,這個消息框就是計算機對我們輸入姓名后的回復。)。在這個消息框所顯示的文字中包含了三個部分。字符串“歡迎您〞、字符串“朋友!〞和變量“X〞所可能對應的字符串“老王、老李……〞等。在VBA語言中,我們使用“&〞符號來連接字符串,所以我們在程序運行最終,看到的是一個像圖2-2那樣完整的歡迎語句。VBA語言中,在使用“&〞連接符號時,請一定注意字符串與字符串之間有一個空格,否則程序一定會出錯。

由于MsgBox函數(shù)與InputBox函數(shù)是兩個十分常用的對話函數(shù),所以,我們再對它進行更深一步的學習。

使用MsgBox函數(shù)時的標準格式:

變量=MsgBox(〞要顯示在這兒的語句〞,按鈕的參數(shù),〞消息框的題目〞)

例子:Y=MsgBox(〞歡迎您〞&X&〞朋友!!〞,0,〞這里是歡迎對話框〞)請注意格式中英文狀態(tài)下的引號、逗號與空格的使用。

使用InputBox函數(shù)時的標準格式:

變量=InputBox(“要顯示的提醒文本〞,〞輸入框的題目〞,〞輸入框中默認顯示的語句〞)

例子:X=InputBox(“請輸入您的姓名〞,〞這里是輸入對話框〞,〞您的姓名請輸入到這兒。〞)。根據(jù)上面的格式,請修改本實例的程序代碼為:’’’======還有待完善的程序二=====SubB()DimXDimY

X=inputbox(\您的姓名是:\Y=Msgbox(\歡迎您\朋友!\EndSub

本段程序應當很簡單讀懂吧?運行一下,看看與前面程序的區(qū)別在什么地方?再分別把MsgBox函數(shù)的參數(shù)0替換為0、1、2、3、4、5這幾個參數(shù)并運行,看看又有什么不同?怎么樣,對話框中給出的提醒是不是更豐富?下面的圖2-5與圖2-6是MsgBox函數(shù)的參數(shù)為“5〞時的運行效果。(請與前面的圖2-1與圖2-2對比一下,看看終究哪些地方有了變化?)。

程序寫到這么詳細,您是否已經(jīng)覺得它已經(jīng)很完善了呢?那么,在當程序要求您輸入您的姓名時,假使您選擇了“取消〞,會有什么現(xiàn)象呢?對,“取消〞按鈕同樣會向程序返回一個值。為了使用函數(shù)時更靈活一些,VBA將這些返回的值“固定〞為以下的數(shù)值,這些在程序中被固定的值,就是“常數(shù)〞。MsgBox函數(shù)的常數(shù)如下:

“確定〞按鈕被單擊時,返回“1〞;“取消〞按鈕被單擊時,返回“2〞;“終止〞按鈕被單擊時,返回“3〞;“重試〞按鈕被單擊時,返回“4〞;“忽略〞按鈕被單擊時,返回“5〞;“是〞按鈕被單擊時,返回“6〞;“否〞按鈕被單擊時,返回“7〞。

InputBox函數(shù)在使用過程中,當人們輸入了值的時候,選擇“確定〞或按下回車鍵,則返回輸入框中的內容,輸入框中的內容顯示不是“固定〞的,也就是說它不是常數(shù);但是,假使人們在要求輸入之時選擇的是“取消〞按鈕,則會返回一個值,這個值是“空值〞,注意“空值〞并不是“零〞。所以,InputBox函數(shù)只有一個常數(shù)——“空〞。

下面,我們用:假使(If)、那么(Then)、否則(else)、終止(endif)判斷語句來完善我們今天的實例。關于“If〞判斷語句,不是本實例的學習重點,下節(jié)課我們將會詳細介紹它。代碼中必要的地方已添加了解釋(還記得為代碼添加解釋的方法嗎?)。’’=============完善后的B程序===============SubB()DimXDimY

X=InputBox(\您的姓名是:\姓名輸入框\您的姓名請輸入到這兒。\IfX\X的值不為“空”,那么

Y=MsgBox(\歡迎您\朋友!\這里是歡迎對話框.\Else’否則(即,X的值為“空”)EndIf’結束EndSub

代碼“IfX\

分別運行本程序與最前面的程序,并選擇“取消”,對比一下運行的效果,從完善后的程序中——想必您不難看出“常數(shù)”在程序中的作用了吧?

請再多體會體會這本實例中的這幾個例子,您對MsgBox與InputBox這兩個函數(shù)的熟悉程度,將直接影響您后面的學習。加點油吧。本實例的知識擴展:

1、請將本課中學到的MsgBox函數(shù)的參數(shù)分別運用到實例一中,看看效果如何。2、請思考:哪些情況下,會使用到MsgBox函數(shù)的不同返回的值?

好了,實例二到此結束,請再回顧一遍本實例的知識點,您都掌握了嗎?是不是覺得VBA并不像想象中那么困難?如果您確信已完全掌握了前面這兩課的內容,那么,準備接受實例三的挑戰(zhàn)吧!

從零開始,步入Word宏編程的世界(第三講)

實例三:“猜數(shù)游戲”

知識點:1、學習變量的類型與轉換;2、掌握程序的循環(huán)與判斷;3、學習隨機數(shù)的生成。

通過對前面兩個實例的學習,相信您對自己掌握VBA編程已充滿了信心。今天,我們將編寫一個小小的游戲程序。這個游戲程序中既包含了新的知識點,又要考驗您對前兩課知識運用的熟練程度,就讓我們靜下心來克服這個小難關吧。

游戲內容是這樣的:電腦生成一個0到99之間的整數(shù),請您來猜這個數(shù)是多少,每猜一次,電腦都給您一個提示,直到您猜中為止。程序思路:

1、電腦首先生成一個0到99之間的整數(shù);2、請您輸入您所猜的數(shù);

3、把您輸入的數(shù)與電腦所生成的數(shù)進行比較,并給出“您猜大了”或“您猜小了”的提示;

4、如果您猜對了,則退出程序;如果您沒有猜對,則循環(huán)回第二步重復運行,讓您再次輸入自己所猜的數(shù)。

請看代碼,必要的地方已添加了解釋。程序中退格與對齊是為了便于理解。請您先試著自己把代碼讀

讀,看看能不能讀懂。)

’’=========程序名“您猜”=========Sub您猜()

Dima,b,c,d’申明了四個變量,變量間用英文逗號分開,與前面實例二申明變量的寫法不同,結果相同。

a=0’這個變量用于計算您猜了多少次。

Randomize’準備生成一個隨機的數(shù)字,先初始化隨機數(shù)生成器。

b=Int(100*Rnd)’生成一個百以內的隨機數(shù),“Rnd”就是“隨機數(shù)生成函數(shù)”。Do’開始循環(huán)

a=a+1’您猜的次數(shù)增添一次。當再次循環(huán)到這兒時,次數(shù)會繼續(xù)往上加。

c=InputBox(\請輸入您所猜的數(shù)\d=CInt(c)’將變量“c”轉化為整數(shù),再將值賦給“d”。IfbdThen’進行比較,假使猜小了。MsgBox(\您猜的數(shù)小了\Else:b=d’進行比較,假使猜對了。

MsgBox(\哈哈,您猜對了!\ExitDo’既然已經(jīng)猜對了,就跳出循環(huán)。

EndIf’終止比較。

Loop’回到前面的Do,繼續(xù)循環(huán)。

MsgBox(\您猜了\次!\EndSub’終止程序。

運行本程序,看看效果。并根據(jù)解釋,體會循環(huán)與判斷在本程序中的作用。代碼講解:

a這個變量,用于計算您所猜的次數(shù)。每多猜一次,它就在自身的基礎上加1,其相應的代碼是:a=0與a=a+1兩句。程序結尾時,將在消息框中顯示“a〞的值。

b這個變量,用于記錄一個隨機生成的數(shù)字。其相應代碼為:Randomize與b=Int(100*Rnd)這兩句。其中,Randomize這個語句在本程序中十分重要,假使您去掉這個函數(shù),再多運行本程序幾次的話,您就會發(fā)現(xiàn)猜測的答案竟然是有規(guī)律的?。Q句話說,只要我知道了電腦所出數(shù)字的規(guī)律我就可以“百發(fā)百中〞地一次猜中這個數(shù)!所謂“隨機數(shù)〞顧名思義就應當是“隨機〞產(chǎn)生的數(shù),在沒有Randomize語句的狀況下,這些產(chǎn)生的數(shù)看似很“隨機〞,其實有規(guī)律,這種隨機數(shù)就是“偽〞隨機數(shù)。所以,Randomize語句的作用就是生成“真正〞的隨機數(shù)。

Rnd函數(shù)是生成一個介于0與1之間的小數(shù),乘以100是讓這個小數(shù)成為一個介于0到100之間的數(shù);Int函數(shù)的作用是將一個數(shù)的小數(shù)部分去掉,只保存它的整數(shù)部分,即“取整〞。通過這樣一個可能大家覺得有點繁雜的過程,我們得到了一個0到99之間的整數(shù)(大于99而小于100的小數(shù)在取整后即是99,所以前面我們說“乘以100是為了生成一個介于0到100之間的數(shù)〞,而真正取整之后最大的數(shù)只能是99。),并將它的值賦予了變量“b〞。生成隨機數(shù),是好多程序中要用到的功能(特別是游戲,譬如游戲中隨機生成不同的怪物或不同的寶物等。),上面的內容希望大家能悉心地體會。

c這個變量,是取得輸入框中我們所猜測的數(shù)字。其相應代碼是“c=InputBox(\\顯然,文字是沒有方法去與數(shù)字比較大小的,所以,我們要用到變量d。

d這個變量,是一個整數(shù)。它是利用了“轉換函數(shù)〞——“CInt〞,將我們所取得的字符串變量“c〞轉換成了一個整數(shù)。其相應代碼是“d=CInt(c)〞。也就是說,本程序中最終進行比較的,是兩個整數(shù)“b〞與“d〞。這里涉及到VBA數(shù)據(jù)類型的知識。

對于VBA的數(shù)據(jù)類型,這里主要為大家介紹兩種:

Integer——包含-32,768到32,767之間的整數(shù)。該類型的數(shù)值基本上可以滿足我們尋常使用整數(shù)時的需要;

String——包含變長字符串,最大長度可為20億個字符。該類型的值其實就是我們常用的字符串。我們在程序當中用的CInt函數(shù),就是將一個String類型(字符)的值,轉換成了一個Integer類型(整數(shù))的值。所以我們稱CInt函數(shù)為“轉換函數(shù)〞。

與CInt類似的常用轉換函數(shù)還有:Clin、CSng、CStr等??梢园裋BA幫助文件中的“轉換函數(shù)〞與“數(shù)據(jù)類型〞相互參照進行學習。(相信這個時候您看幫助文件中的這部分內容,將不會再是一件難事。)

感覺到困難了嗎?假使感覺到了困難,就請將上面的內容再體會體會。準備進入下一個知識點。

程序中的DO、ExitDo以及Loop為一個整體。其中,Do是開始進入循環(huán);Loop是指回到Do語句處,再次進行循環(huán);ExitDo是指當符合某一個條件時就直接退出循環(huán)。在本程序中,ExitDo是指當猜中了(即b=d)時,退出循環(huán);而無論是猜大了(b>d),還是猜小了(b

程序中數(shù)字的比較,是利用If語句來實現(xiàn)的。在實例二中,我們已接觸過If語句,If語句的基本格式是:If(條件)Then(結果)EndIf’(終止If判斷語句)

在If語句判斷的過程當中,還可以有子判斷語句:Elseifthen。

對于一個具有多重判斷的語句,我們大致可以這樣理解:假使(If),那么(Then),否則(Elseif),那么(Then),再否則(Elseif),那么(Then)……(ElseIf根據(jù)狀況可以套嵌好多層)最終(Else),終止判斷(EndIf)。

本實例的知識擴展:

1、試一試自己在程序結尾處再添幾句,判斷所猜的次數(shù):假使小于六次,給出一個評價“優(yōu)〞;等于六次,給出一個評價“良〞;大于六次,給出一個評價“您還需努力!〞。

2、試一試給程序補充部分內容,其功能為:在猜完一次后,詢問游戲人“您還愿意再玩一次嗎?〞,并根據(jù)游戲者的響應,再次運行程序或退出程序。

3、假使在剛開始游戲讓我們輸入數(shù)字時,我們選擇了“取消〞就會出錯,您現(xiàn)在能利用自己已有的知識來解決這個問題嗎?

好了,到這里,我們再回過頭來看一看這個程序,理解起來還有困難嗎?本實例可能比前兩個實例稍難一點。假使您能順利完成知識擴展中的問題題,那么慶賀您,您已過了入門的第一個小難關,可以進入下一步的實例四了,假使您還存在疑問,則再請多動手把前三個實例練一練?。「剑和晟频牟聰?shù)游戲——

Sub您猜()

Dima,b,c,d,e,f

e=6’該數(shù)字用于計算所猜次數(shù)是否為優(yōu)、良等Doa=0Randomize

b=Int(100*Rnd)Do

a=a+1

c=InputBox(\請輸入您所猜的數(shù)\d=CInt(c)IfbdThen

MsgBox(\您猜的數(shù)小了\Else:b=d

MsgBox(\哈哈,您猜對了!\ExitDoEndIfLoop

MsgBox(\您猜了\次!\Ifa>e

MsgBox(\您還需努力!\

ElseifaMsgBox(\您的猜數(shù)能力:優(yōu)!\Elsea=e

MsgBox(\您的猜數(shù)能力:良!\Endif

f=MsgBox(\您還愿意繼續(xù)玩嗎?\,4,〞繼續(xù)游戲〞)’’注意此處常數(shù)的使用iff=7then’’注意此處消息框返回值的使用exitdoelseendifloopEndSub

從零開始,步入Word宏編程的世界(第四講)

實例四:窗體與基本的控件

知識點:1、窗體與控件的使用;

2、什么是“設計時〞、什么是“運行時〞;3、了解什么是對像、屬性、方法和事件。

扎實的基礎知識是我們順利把握VBA編程語言的先決條件。說到基礎知識,我想告訴朋友們——我們必需建立起“面向對像〞的編程思想?!懊嫦驅ο瘿曔M行編程的思想實在是太重要了!我們所接觸的所有事物都是對像,都有屬性,也都有屬性值。假使您不相信?那么請看——

您怎樣來描述自己家里的電視機呢?它的身高?體重?住址?年齡?顏色?頻道個數(shù)?聲道個數(shù)?音量大小?屏幕大???分辯率?刷新率?……對,這些都是電視機的“屬性〞,在這里,“電視機〞就是一個“對像〞。

以下,假設我們生活在“VBA編程語言〞當中,生活中的事物就是VBA的對像——那么,我們怎樣來找出一個“對像〞的屬性,或是怎能樣來對“對像〞的屬性進行賦值呢?看下面的程序:‘========程序名“您想看幾頻道〞========Sub您想看幾頻道()DimX

X=InputBox(“請輸入您想看的頻道的值:〞)電視機.頻道=XEndSub

運行這代碼,輸入您想看的頻道的值,譬如“10〞或是“36〞,那么,您就會看到10頻道或是36頻道的節(jié)目。這里,“電視機〞是對像,“頻道〞是它的屬性,“10或36〞是它的屬性值。在“對像〞引用自己的某個“屬性〞時,我們在它們之間用一個小圓點(英文的句號)來表示,具體的格式如代碼“電視機.頻道=X〞中所示;設置值的時候,用等號來賦予它。說到賦值,您是不是想執(zhí)行“電視機.屏幕尺寸=100吋〞命令呢?呵呵,有些事物的屬性值是“只讀〞的,不能修改,譬如電視機的重量等。

現(xiàn)在,我正在看一個節(jié)目,但我不知道這個節(jié)目所在的是幾頻道,怎么辦呢?請看程序——‘========程序名“當前頻道是多少〞========Sub頻道是多少()Dim頻道的值

頻道的值=電視機.當前頻道MsgBox(“頻道的值〞)EndSub

程序不難懂吧?

前一個程序“您想看幾頻道〞中,我們是將“值〞賦予對像的屬性,后一個“頻道是多少〞程序中,我們是取得對像屬性的“值〞。這兩種類型的程序在使用時剛好相反,但,它們在VBA編程語言中的運用幾乎可以說是無處不在??!請一定要認真體會這兩個程序中關于“對像〞、“屬性〞與“值〞之間的關系??!那么,什么又是事件和方法呢?對于電視機來說,當它的電源接通時就發(fā)生了“電源接通事件〞,反之,它的電源斷掉時就發(fā)生了“電源斷掉事件〞。方法,則是指人對電視機進行的操作,譬如,現(xiàn)在顯示的是10頻道,我在電視機的頻道調理按鈕上,向前按了5次,則進入了15頻道。電視機支持使用“頻道按鈕〞進行“頻道調理〞的動作,就可以說成是它支持“用按鈕調整頻道〞的“方法〞,“5〞就是這個方法的參數(shù)(只要是您家里電視機所支持的值,當然都可以作為它的參數(shù)。)。那位朋友說了“喂,大哥,我們可是在學習Office的VBA編程語言啊!怎么扯到電視機上去了?!〞好吧,我們來談Office。Office是一個對像,Word是一個對像,窗口是一個對像,文檔是一個對像,段落、標題、一行文字、一個字符、一個標點、一個表格、一個單元格……無一不是對像!它們都有顏色、大小、

寬窄、數(shù)量、位置……等等屬性。我們利用VBA語言進行編程,不外乎就是為了控制某個對像的某個屬性值以便利我們的工作罷了!

對于對像、屬性、方法、事件,我們先了解這么多,在實例六我們將繼續(xù)對其進行學習。今天,我們先試試這些知識在窗體與控件上的運用吧!

一、界面制作

1、開啟VBE,指向“插入〞菜單,點擊“插入用戶窗體〞命令(也可以在工具欄中做同樣的動作。),窗體的名稱默認為“UserForm1〞,如圖4—1。

2、點擊控件工具箱按鈕,開啟控件工具箱,選中工具箱中的“按鈕〞控件,在窗體上“畫〞出一個按鈕控件(“按鈕控件〞就是控件工具箱中的那個方形的小塊。),按鈕的名稱默認為“CommandButton1〞。

二、屬性賦值方法之一:

注意,下面進入今天的關鍵知識點:

1、首先,雙擊做好的窗體或按鈕,就會開啟代碼窗口。保證光標在窗體或按鈕代碼的正中間,按下F5鍵運行它,或在“運行〞菜單中選擇“運行用戶窗體或子過程〞命令運行它,看看效果。如圖4-2左面。

這里需要注意兩點:

A、假使光標不在代碼中間,而您的模塊中又還存在其它的代碼的話,運行時,VBE會讓您選擇要運行的宏名稱;

B、假使工程被鎖定而不能運行的話,首先請在“工具——宏——安全性〞對話框中把安全性設為“低〞,然后刪除VBE中所有存在的代碼,并關閉Word,等一下再重新啟動,重新開始本步的操作。當然,假使您VBE中以前的代碼需要保存的話,最好把它剪切到其它文本中去,要用時再復制過來。最終,千萬記得在本實例完成之后,把“安全性〞改回為高,以避免宏病毒。

2、右擊按鈕CommandButton1,選“屬性〞,(假使“屬性〞對話框本來就的開啟的,則選中按鈕CommandButton1,然后直接修改屬性就行了。)在“屬性〞對話框中選“Caption〞,在右面的屬性值中輸入“開始運行〞。保存后,再次運行,看看與第1步運行時相比,效果有什么不同?對,按鈕上面的提醒文字已經(jīng)改變成“開始運行〞了。對比效果如圖4-2。以上這兩個步驟中,需要我們應當把握的知識就是“怎樣在屬性對話框中,對控件的屬性進行賦值〞。下面,我們還要為控件的屬性賦值,但賦值的方法有所不同,請注意體會以下賦值方法與上面的區(qū)別。

三、屬性賦值方法之二

請撤消前面添加“開始運行〞屬性的操作,回到按鈕表面提醒文字依舊是“CommandButton1〞時的狀態(tài),雙擊“CommandButton1〞將開啟“CommandButton1〞的代碼窗口,代碼窗口已為我們生成了控件被單擊時的空過程。現(xiàn)在,我們就在這個“CommandButton1〞的Click事件(即按鈕被單擊的事件)空過程中,添加如下的代碼:

’’’========用代碼修改屬性========PrivateSubCommandButton1_Click()CommandButton1.Caption=\開始運行\(zhòng)EndSub

本實例之初,我們學習了為對像的屬性賦值的格式,那么,您看到代碼“CommandButton1.Caption=\開始運行\(zhòng)應當不難理解吧?代碼中的CommandButton1是指窗體上的那個按鈕,假使有多個按鈕的話,就會分別被命名為CommandButton2、CommandButton3……等等。假使要解釋上面的程序,就應當是:當按鈕被“Click〞(單擊)時,按鈕的“Caption〞(提醒文字)就被改變?yōu)椤伴_始運行〞。

運行本程序并單擊按鈕看看出現(xiàn)了什么效果?在按鈕被單擊前,運行的效果與第1步一樣(與圖4-2左面一致。);當按鈕被單后,是不是與第2步運行時的狀況一樣?(與圖4-2右面一致。)

第2步中,我們是“先設計好了〞按鈕的提醒文字再運行;第3步中,我們根本沒有“設計〞按鈕的提醒文字,而是已經(jīng)“在窗體運行的時候〞利用了按鈕的單擊事件,改變了按鈕表面的提醒文字。對于第2步中的做法,我們稱之為“設計時〞修改控件,對于第三步中的做法,我們稱之為“運行時〞修改控件?!霸O計時〞修改控件的屬性雖然更便利、更容量把握,但它往往沒有“運行時〞修改控件屬性那么靈活。下面我們再做一個例子,動態(tài)改變按鈕與窗體的屬性值。再體會體會“運行時〞修改屬性值的靈活性。將前面的代碼修改如下:

‘==========利用單擊按鈕事件,動態(tài)改變按鈕名與窗體顏色===========PrivateSubCommandButton1_Click()

IfCommandButton1.Caption=\CommandButton1.Caption=\開始運行\(zhòng)

ElseIfCommandButton1.Caption=\開始運行\(zhòng)CommandButton1.Caption=\點我干嘛,別煩我!\

ElseIfCommandButton1.Caption=\點我干嘛,別煩我!\UserForm1.BackColor=RGB(255,128,128)

CommandButton1.Caption=\想讓我給你點顏色嗎?\

ElseIfCommandButton1.Caption=\想讓我給你點顏色嗎?\UserForm1.BackColor=RGB(0,128,64)

CommandButton1.Caption=\你真的不怕我變臉嗎?\

ElseIfCommandButton1.Caption=\你真的不怕我變臉嗎?\UserForm1.BackColor=RGB(128,0,255)

CommandButton1.Caption=\怕了你了,我逃!\

Else:CommandButton1.Caption=\怕了你了,我逃!\

UnloadUserForm1’“Unload〞是窗體的一個方法,其作用是卸載窗體。

EndIfEndSub

本程序中用到了窗體的顏色屬性(BackColor)及其屬性值(RGB)的知識,我們在利用VBA對Word中的文字進行修飾時,經(jīng)常會用到顏色屬性及其值的設置,這里正好學習一下。代碼最終的“Unload〞是窗體的一個方法,其作用是卸載窗體,與平日我們關閉窗體時按右上角最大、最小化按鈕那里的“X〞按鈕等價。有卸載就有加載,加載并顯示窗體的命令是“Show〞,該命令的使用格式是“窗體名.Show〞。本實例的知識擴展:

1、朋友們在“設計時〞屬性設置中,下點功夫摸索摸索,盡快熟悉窗體、按鈕的各種屬性;

2、本例只用到了“控件工具箱〞中的按鈕控件,其它的控件雖然在作用上各不一致,但在使用的方法上與按鈕控件沒有什么大的區(qū)別,朋友們就自己嘗試一下其它的控件吧;

3、請您制作一個窗體,上面加上兩個按鈕,一個按鈕運行實例三中的游戲,另一個按鈕退出游戲。

實例四到此終止,怎么樣,有收獲嗎?下一個實例“Word版的媒體播放器〞,將是我們前面知識的一個集中練習,也將是一個會讓您很有“成就感〞的練習。還等得及嗎?——

從零開始,步入Word宏編程的世界(第五講)

實例五:Word版的“媒體播放器〞

知識點:1、進一步熟悉VBE的操作界面;

2、學習使用窗體與控件進行編程;3、學習運用附加的控件進行編程。

通過以上四個實例的學習,今天,我們終究迎來了沖動人心的時刻——編寫一個“Word版的媒體播放器〞!“媒體播放器〞大家不會陌生吧?對,就是開始——程序——附件——消遣中的“Mediaplayer播放器〞!相信本實例會給您帶來成就感!也算是對我們前四個實例辛苦學習的一點點回報吧!當然,在高興之余,千萬不要忘了對本實例中知識點的學習。其實,本實例中,理論知識上的難度幾乎沒有,但操作上的步驟卻相當多,朋友們耐心一點。

步驟一:界面的制作

1、回憶實例四中的操作方法,在VBE中添加一個窗體,窗體上添加兩個按鈕。將窗體的“Caption〞屬性改為“Word版媒體播放器〞,再分別將兩個按鈕的“Caption〞屬性改為“開始運行〞與“終止程序〞。2、右擊控件工具箱,選“附加控件〞,將“附加控件〞面板的滾動條拖動到最底端,然后選中“WindowsMediaplayer〞控件?!按_定〞后,退出“附加控件〞面板(圖5-1)。這時控件工具箱最下面就多出了一個網(wǎng)格狀的“WindowsMediaplayer〞控件。

3、選中“WindowsMediaplayer〞控件,在窗體上按您的需要和喜好“畫〞出它將要顯示的范圍。4、現(xiàn)在,我們就可以利用“屬性對話框〞開始對整個窗體及窗體上所有的控件進行“美化〞?!懊阑暤膬热菥桶茨约旱南埠每粗k好了,反正是“設計時〞修改控件,不會影響最終程序的運行。我修改了窗體和按鈕的顏色,并修改了按鈕上的字體以及字號和字色。最終的效果如圖5-2。準備工作已就緒,開始編寫代碼了吧!

步驟二:編寫代碼

1、雙擊“開始運行〞按鈕,在VBE自動生成的空過程中輸入如下代碼:PrivateSubCommandButton1_Click()

MediaPlayer1.FileName=\龍珠2.mpg\EndSub

(注意:office2023及以上版本,上句代碼應當是:WindowsMediaPlayer1.URL=\龍珠2.mpg\,這是由于在這些版本上,MediaPlayer控件的屬性與方法已略有些變化了。)

代碼講解:

關于“過程〞,就不消多說了吧?“MediaPlayer1〞就是我們在“設計時〞所添加的“MediaPlayer控件〞。它尾巴上的“1〞,指它是在本窗體上的第一個“MediaPlayer控件〞?!癋ileName〞是“MediaPlayer1〞的一個屬性,這個屬性的值就是將要播放的媒體文件的名稱(還記得為屬性賦值的格式嗎?這整句代碼可是一個標準的賦值語句。)。等號后面大家就很明白了——是要播放的文件的路徑與文件名。當然,您的電腦上生怕不會有“D:\\MyMpg\\龍珠2.mpg〞文件的,您可要根據(jù)自己電腦上的實際狀況輸入這部分的內容。

2、雙擊“終止程序〞按鈕,在開啟空過程中輸入——PrivateSubCommandButton2_Click()UnloadUserForm1EndSub

代碼講解:

這段代碼假使還需要講解的話,就請再看看實例四的后半部分內容。

完成前兩步代碼輸入后,可以將光標定位于“開始運行〞按鈕的代碼區(qū)正中間,然后按下F5鍵!!看到了什么??怎么樣,有成就感吧??還沒完呢!趕快“終止程序〞編完最終的代碼吧!

3、回到Word,指向工具——宏,開啟“宏名〞對話框(不要告訴我,你找不到這個對話框),在“宏名〞中輸入“我的播放器〞(沒有引號),點擊“創(chuàng)立〞按鈕,在VBE所生成空過程中輸入——

Sub我的播放器()UserForm1.ShowEndSub

本段代碼與上段代碼一樣,也無需講解了吧?

4、回到Word,開啟工具——自定義,拖動“命令〞選項卡的滾動條到最底部,選中“類別〞窗格中的“宏〞,再找到右邊“命令〞窗格中的“我的播放器〞宏,左鍵按住它,不要讓它跑掉(?),拖動它到“任意〞的“菜單欄〞或“工具欄〞上,好,松左鍵,它跑不掉了(圖5-3)。保證它是被選中的,再回到“命令〞選項卡上,點擊正中間的“更改所選內容〞,把它的名字“美化〞一下,或者再給它添一個圖標,怎么樣,帥吧?!酷吧?!(圖5-4)

5、此后之后,王子和公主就在您的Word中……哦?錯了,應當是——此后以后,您的Word中,就多了一個可以播放Mpg、Mp3……等等媒體的小妞……啊,又錯了,是“小鈕〞。當然,要播放的內容還得您自己為它指定(寫進代碼中去)。

本實例的知識擴展:

1、修改代碼來確定媒體文件的路徑及文件名不麻煩嗎?莫非您不愿意使用“輸入框〞?2、有沒有方法指定一個文件夾后,播放器就自動將這個文件夾下的媒體文件一個一個地播放出來呢?或者,將要播放的文件名寫在一個文本文件中,讓播放器一個一個地讀出它的名字來播放呢?

3、假使要求您不用“設計時〞修改控件屬性,而讓您用“運行時〞修改控件屬性的方法,來制作步驟一中的界面,您不愿意試一試嗎?

4、都有哪些附加控件?各附加控件的作用又都是什么呢?

本實例至此終止!VBA好玩吧?對我們的實例六,您是否已有所期待了呢?

從零開始,步入Word宏編程的世界(第六講)

實例六:Word中的常用對像、屬性、方法和事件

知識點:把握Word中常用的對像并學習這些對像主要的屬性、方法和事件。

在實例四中,我們已接觸了對像、屬性、方法和事件的基本概念,今天,我們就來學習一下Word中的常見對像以及它們的屬性、方法和事件。本實例的內容稍微多了一些,為了便于朋友們的理解,以下將主要介紹Word中最重要的幾個對象、屬性、方法與事件。要想得到更詳細的內容,朋友們可以在完全把握本實例后,嘗試看看VBA的幫助,在幫助文件中探尋“MicrosoftWord對象〞即可。

本實例將重點介紹以下的對象,首先理清我們今天要學習的“對像〞的結構層次——

Application對像:即Office中您正在運行的程序本身,如Word或Excel等。Application對像是一個應用程序中的“總對像〞或者說是“頂級對像〞。在Word中,Application對像包含了程序中可能會存在的其它所有對象,譬如:所有的Word文檔(Documents)、程序本身的工具欄與菜單欄(CommandBars)、程序的窗口(Window)、程序的內置對話框(Dialogs)等等……

Documents對像:即所有Word文檔的集合。該對像中每一個單獨的文檔,即是文檔對像“Document〞。在Documents對像中,可以通過引用文檔名字的方法來操作一個Document對像。

Document對像:Document對像又具大量子對像。本實例主要介紹兩個——Range對象(字符串對像,可以是選定的一串字符或者是一個字符)與Selection對象(活動區(qū)域對像,可以是文檔中選中的內容或者僅僅是一個插入點);了解Paragraphs(段落集合對像)。

CommandBars對像:即“命令欄〞對像。它是Application中所有菜單欄與工具欄的集合。我們在編程時,對菜單欄與工具欄的修改,都是通過操作“ComandBars〞對像來實現(xiàn)的。(由于該對像在VBA編程中特別重要,我們將在實例七中單獨對其進行介紹。)

Application對像

1、Application對像的Quit方法

該方法用于退出應用程序(Application)。例如:’’=========關閉程序的代碼=========sub關閉程序()Application.quitEndsub

執(zhí)行本段代碼,就會退出正在運行的Office程序(相應的Application對像,可以是Word、Excel等)。

在實際工作中,Quit方法可以用于提醒用戶保存所有目前開啟的文檔。下面例子中,假使用戶單擊“是〞按鈕,在退出Word前,所有開啟的文檔都將以Word格式進行保存。

’’========退出時提醒的代碼=======Sub退出時提醒保存()DimTishi

Tishi=MsgBox(\您要保存目前所有的文檔嗎?\提醒您保存文檔\IfTishi=6Then

Application.QuitSaveChanges:=wdSaveChanges,OriginalFormat:=wdWordDocumentEndIfEndSub代碼解釋:

MsgBox的參數(shù)“4〞與返回值“6〞,現(xiàn)在大家不會不明白了吧?“4〞表示顯示“是、否〞兩個按鈕,“6〞則表示操選擇的是“是〞按鈕。代碼“SaveChanges:=wdSaveChanges〞是指進行“保存〞的操作;“OriginalFormat:=wdWordDocument〞則指定保存的格式為Word的文檔格式。關于“Save〞方法,后面我們將會進一步學習。

2、Application對像的ActiveDocument屬性

ActiveDocument屬性返回一個Document對像(即當前正在使用的“活動文檔〞),下例顯示當前活動文檔的名稱:

’’’’=========顯示活動文檔的名稱==========Sub顯示名稱()DimnameA

NameA=Application.ActiveDMsgbox(NameA)endsub

本段代碼中用到了Document對像的一個屬性Name,該屬性返回文檔的名稱。

Documents對像

(一)、Open方法——用于開啟Documents集合中的單個Document對象Open方法的基本語法格式:Documents對像.Open(可包含路徑的文件名)。譬如:開啟C盤MyFile文件夾下的MyDoc.doc文檔——’’’==========開啟文件==========Sub開啟文件()

Documents.Open(\EndSub

本代碼演示了Open方法的基本使用格式。其實,Open方法的可選參數(shù)有好多,有的能指定“開啟文檔的方式〞為“只讀〞,有的能指定“開啟文檔時所需的密碼〞等,參數(shù)的內容可在幫助文件中找到詳細介紹。

(二)Add方法

Documents對像的“Add〞方法,可以新建一篇空白文檔,譬如:’’’==========新建文檔==========Sub新建文檔()Documents.AddEndsub

Add方法中可以使用以下參數(shù):以何種樣本模版為母版新建文檔、是否將該新建的文檔保存為另一個模版、新建的文檔以何種類型保存(Web頁、電子郵件、帶框架的文檔等)、新建文檔是否顯示(即可以隱蔽)等等。參數(shù)的使用可以查找?guī)椭募?/p>

(三)Item方法

Item方法可以通過ID(集合中的序號)或名稱返回集合的單個成員,例如:’’’============顯示Documents集合中第一篇文檔的名字============Sub顯示名字()DimMing

IfDocuments.Count>=1Then’’假使集合中文檔的個數(shù)大于或等于1,那么——Ming=Documents.Item(1).Name’’獲得第一個文檔的名稱MsgBox(Ming)EndIfEndsub

本例用到了Documents對像的一個屬性“Count〞,該屬性的作用是“返回指定集合的中所有項目的個數(shù)〞,本實例是返回了“已開啟的所有文檔的個數(shù)〞。事實上,“Count〞屬性不單只是Documents對像的屬性,其它的對像如Document、CommandBars等對像都具有這個屬性。

Document對像(一)Close方法

本方法用于關閉指定的文檔。其基本格式為:“對像.Close〞(這里之所以寫的“對像〞而沒有寫“Document〞,是由于“Close方法〞其實是好多對像都有的方法,而且在使用時格式都一致)。

下例將關閉并保存活動文檔。

’’’’=======關閉并保存文檔========Sub關閉并保存文檔()

ActiveDocument.CloseSaveChanges:=wdSaveChangesEndSub

(二)Range方法

Range方法在Document對象中可以通過使用指定的開始和終止字符位置,返回一個Range對象(Range對象在下面再做介紹。)。語句格式如下:

對像.Range(Start,End)

關鍵字Start是為了指定Range開始的位置;關鍵字End是為了指定Range終止的位置。具體應用請看下面的實例。

本實例,將活動文檔中的前150個字符設置為青綠色?!?======更改顏色========sub更改顏色()

ActiveDocument.Range(Start:=0,End:=150).Font.Color=RGB(0,255,0)EndSub

代碼中將Font(字體)、Color(字色)屬性值指定為RGB顏色設置的參數(shù)。(三)Save方法

Save方法用于保存指定的文檔或模版。其基本格式為:對像.Save(參數(shù))。Save方法其實也不僅僅只是Document對像的方法,它同時也是Application與Documents對像的方法。本方法參數(shù)中最重要的是“指定保存方式〞的參數(shù)——“NoPrompt〞。假使“NoPrompt=True〞,Word將自動保存所有文檔并且不提醒用戶;假使“NoPrompt=False〞,則當一篇文檔在上次存盤后進行了修改時,Word就會提醒用戶將文檔保存為另一個。

下例保存Documents集合中的每一文檔(本例沒有舉“Document對像〞的例子),并且保存文檔時不提醒用戶。

Sub保存文檔集合()

Documents.SaveNoPrompt:=True,OriginalFormat:=wdOriginalDocumentFormatEndsub

(四)SaveAs方法

該方法主要的作用是“用新的文件名或新的格式(非*.doc格式)〞來保存指定文檔。本方法對應“文件〞菜單中的“另存為〞對話框。其語法及主要參數(shù)為:

Document對像.SaveAs(“文件名FileName〞,“準備保存的格式FileFormat〞,“開啟文檔時的密碼Password〞。參數(shù)FileFormat的常量可在幫助文檔中找到。

下面的代碼,將活動文檔存為RTF格式(即“寫字版〞文檔的格式),并將文件名改為“Text〞?!?=========另存文檔============Sub另存為格式()

ActiveDocument.SaveAsFileName:=\Endsub

Range對像

即字符串對像,Range對像的方法十分之多,以下主要介紹常用的Copy方法與Paste方法。

Copy方法的作用是將所選內容復制到系統(tǒng)剪貼板,Paste方法是將剪貼板中的內容粘貼到目標位置。本例復制活動文檔的第一段,并將該段落粘貼到文檔的末尾?!?===========復制與粘貼例============Sub復制與粘貼例()DimmyRange

ActiveDocument.Paragraphs(1).Range.Copy

運行本段程序,Word那一千多個內置命令使您驚嘆了吧?微軟說,普通辦公用不到這些命令的百分之十,您用到了這些按鈕中的百分之幾了呢?

本實例的知識擴展:能不能利用自定義的按鈕運行系統(tǒng)程序呢?譬如,自定義一個按鈕,運行系統(tǒng)的“記事本〞程序或“IE瀏覽器〞?自己試試吧。

“自定義命令欄〞,作為VBA編程學習中最重要的一環(huán),到此終止。是否囊中有沉甸甸的感覺?假使覺得對本實例的內容還不是很明白的話,就再多把實例體會體會吧。

從零開始,步入Word宏編程的世界(第八講)

實例八:Word與其它的Office組件的協(xié)作

知識點:1、把握Word與Excel的相互調用;

2、學習調用另外的Office組件;3、理解集成化辦公的理念。

Office辦公套件是一個完整的整體。假使您能夠熟練地使用套件進行協(xié)作辦公,那一定會使您的辦公效率事半功倍?;贠ffice環(huán)境下的集成化辦公,應當是這樣的:利用Word、Excel、Outlook、IE瀏覽器等輸入或獲取數(shù)據(jù),并將數(shù)據(jù)交于Access數(shù)據(jù)管理程序進行管理;同時也可以利用Word、Excel、Outlook、IE瀏覽器、PowerPoint或FrontPage等程序,獲得并發(fā)布Access數(shù)據(jù)庫中的數(shù)據(jù)。于此,我們不難看出,整個Office套件的核心組件應當是Access數(shù)據(jù)管理程序。當然,各套件自身各有優(yōu)點,譬如,數(shù)據(jù)處理方面Excel就強于Access,而Outlook則是能把所有套件協(xié)調起來進行工作的有力工具。

今天,我們側重研究如何在Word中運用VBA調用Office其它組件的方法。

一、調用其它組件時的標識符

要創(chuàng)立Access對像,使用標識符Access.Application;要創(chuàng)立Excel對像,使用標識符

Excel.Application;要創(chuàng)立Outlook對象,使用標識符Outlook.Application;要創(chuàng)立PowerPoint對象,使用標識符PowerPoint.Application;要在其它程序中創(chuàng)立Word對象,使用標識符Word.Application

這些標識符的具體運用,我們主要舉“Word與Excel的相互調用〞為例來說明。

二、Word與Excel相互調用

(一)在Word中調用Excel

首先,我們熟悉一下Excel的基本對像:工作簿對像與集合(Workbook、Workbooks)、工作表對像與集合(Worksheet、Worksheets)、單元格對像Range。這些對像在實際使用時,與我們前面介紹的“面向對像〞的思想完全一致。

下例將Word中活動文檔的第一段發(fā)送到Excel中,并將內容放到B3單元格中——’’’’==========Word聯(lián)系Excel例===========Sub聯(lián)系例一()DimArangeDimAexl

Arange=ActiveDocument.Paragraphs(1).Range’取得Word中第一段的文字SetAexl=CreateObject(\’利用標識符啟動ExcelAexl.Visible=True’將Excel顯示出來Aexl.workbooks.Add’新建一個工作簿

Aexl.Range(\’將文字寫入工作表中的B3單元格SetAexl=Nothing'終止兩個程序間的聯(lián)系EndSub代碼說明:

Set與CreateObject關鍵字,用于創(chuàng)立一個對其它Office組件對像的引用,無論您是在任意Office組件中,引用其它的任意Office組件,都必需使用這兩個關鍵字。

Nothing關鍵字用于終止兩個程序間的聯(lián)系,假使沒有這個關鍵字,程序的聯(lián)系始終存在,將消耗掉大量的系統(tǒng)資源,簡單造成死機。

“Aexl.Visible=True〞這段代碼用于將Excel對像顯示出來。假使沒有這一句,Excel將在后臺運行,您可以按下“Ctrl+Alt+Del〞三鍵,從系統(tǒng)進程中看到。

(二)在Excel中調用Word

本例在Excel中運行,假定在C盤Text文件夾下有一個MyDoc.doc文件,我們將在excel中啟動word,并將MyDoc.doc文件其次自然段的內容寫入到Excel第一個工作表的“b8〞單元格中。

啟動Excel開啟VBA,寫入如下代碼:Sub聯(lián)系的例子二()Dimwd

DimArange

Setwd=CreateObject(\’利用標識符啟動WOrdwd.Visible=True’顯示W(wǎng)ord

wd.documents.Open(\’開啟欲操作的對像

Arange=wd.documents(1).paragraphs(2).Range’取得要使用的文字

Workbooks(1).Worksheets(1).Range(\’將文字寫入相應單元格Setwd=Nothing'終止兩個程序間的聯(lián)系EndSub

與前例類似,就無需解釋了吧?

本實例的知識擴展:朋友們,多進行實際操作是必不可少的,大家試試其它組件間的相互調用吧。本實例到此終止。以上內容看似簡單,但真正想要能熟練地運用“集成化辦公〞的理念,則如何讓Office套件相互間進行通訊,就成了一個十分重要的課題。能夠熟練進行套件間的協(xié)作完全在于您的大量實踐。

SetmyRange=ActiveDocument.Range

(Start:=ActiveDocument.Content.End–1,End:=ActiveDocument.Content.End-1)

myRange.PasteEndsub

本例代碼較長,重點的地方解釋如下:

“Paragraphs〞是Document對像的一個子對像,即“段落〞對像,其后跟的參數(shù)“1〞,表示引用文檔的第一段。(“Paragraphs〞對像也是“Document對像〞中一個重要的子對像,本文本擬介紹,但考慮到內容的長短,故省略。本對像的內容請參考幫助文件。)

“Set〞語句是一個賦值語句,與我們前面學習的“Dim〞相關聯(lián),“Dim〞的作用是申明一個變量,而“Set〞語句是將“對一個對像的引用〞賦給一個變量。本例中其實是為了找出文章終止的“點〞,而將“能夠找出該點的語句〞賦給了變量myRange。

“Content〞是“Document對像〞的一個屬性,它返回Document對像的所有文字。本段代碼中運用“End〞關鍵字,來找出文字的結尾處,并用“End—1〞將結尾向后移動了一位。

代碼假使在一行中寫不下,可以用一個下劃線“_〞來連接前后的代碼,本例中“Set〞這句較長,可以使用這個連接符。

Selection對像

即活動區(qū)域對像,Selection對像的方法也十分多,以下介紹常用的“InsertFile〞方法,該方法能插入指定文檔的全部或部分內容。其語法為:對像.InsertFile(“要插入的文章名FileName〞)

FileName參數(shù)必需指定,假使沒有指定路徑,則Word將文檔路徑設為當前路徑。

實例:在活動文檔中插入另一個文檔,文檔插入到您當前光標所在的位置(即“Selection對像〞處)?!?=====插入文檔例======Sub插入文檔例()DimMyDoc

MyDoc=InputBox(“請輸入您要插入的文章路徑及文章名〞)’’’假使選“取消〞就需要錯誤調試。Selection.InsertFileFileName:=MyDocEndSub

在實際工作中,我們經(jīng)常需要將一個文件夾下的所有文檔合并到一篇文檔中來,假使使用Word“插入〞菜單中的“插入文件〞命令,一旦文檔數(shù)量太多,則會十分麻煩。其實,運用一個變量取得文件的名稱,并使用循環(huán)語句重復運行本段代碼,就會使這項工作變得簡單。

本實例的知識擴展:請盡量熟悉幫助文件中所有對像的屬性、方法與事件。

實例六到此終止,本實例內容較多,愿朋友們通過本實例,既能熟悉這幾個重要對像的使用方法,又能以此作為自己熟悉VBA幫助文件的一個臺階。終究,本文不可能涉及VBA的方方面面,更多的內容需要大家從“幫助〞中去獲得。假使大家能夠熟練把握本實例中的內容,那么,再看幫助文件,將不會再是一件難事。

從零開始,步入Word宏編程的世界(第七講)

實例七:自定義Word的命令欄

知識點:1、菜單欄與工具欄知識基礎;

2、“運行時〞修改菜單欄與工具欄。

Office組件中的每一個程序,都有菜單欄和工具欄,而且任何Office程序中的菜單欄與工具欄在VBA中的對像都是“ComandBar〞對像。所以,本實例可以用于所有Office程序。

好多朋友在學習VBA的過程中,感到“自定義命令欄〞這部份內容難以把握,原因就在于沒有弄清“ComandBar〞對像結構的層次性。好了,下面讓我們靜下心來,開始——

一、“ComandBars〞對像與“ComandBar〞對像

“ComandBar〞對像就是“命令欄〞對像,在Application(程序)中無論是菜單欄還是工具欄,都是一個“ComandBar〞對像。我們在編程時,對菜單欄與工具欄的修改,都是通過操作“ComandBar〞對像來實現(xiàn)的。舉一個實例,譬如從“文件〞菜單到“幫助〞菜單為止的那個命令欄,按住“文件〞菜單左邊有一個豎線的地方,就可以把這個命令欄拖離原位置。這個“命令欄〞就是一個“ComandBar〞對像?,F(xiàn)在我們已經(jīng)知道什么是命令欄“ComandBar〞對像了,那什么是“ComandBars〞對像呢?既然尾巴上有字母“s〞,“ComandBars〞對像確定就是所有命令欄的集合了!

(一)CommandBars對像的Add方法

Add方法,用于創(chuàng)立一個新的命令欄(這個命令欄既可以是菜單欄,也可以是工具欄。)。

本方法的格式為:對像.Add(“新命令欄的名稱Name〞,“新命令欄所在的位置Position〞,“新命令的作用時期Temporary〞)。

參數(shù)解釋:

Position參數(shù)有六個常數(shù):“msoBarLeft,msoBarTop,msoBarRight,msoBarBottom〞這四個常數(shù)指定新命令欄左右和上下的坐標;“msoBarFloating〞說明新命令欄是可移動的;“msoBarPopup〞說明新命令欄是一個快捷菜單。

Temporary:假使Temporary=True,則新命令欄會在程序關閉時,同時被刪除(也就是說,該命令欄只是暫時有效);假使Temporary=False,則不會被刪除(Office程序默認為False。)另外,Office組件中的Word與Outlook會忽略此參數(shù),因此在退出Word或Outlook應用程序之前,您必需手工刪除所有臨時添加到CommandBars集合中的ComandBar對像。

以下實例創(chuàng)立了一個名叫“新工具欄〞的命令欄?!?========創(chuàng)立一個命令欄===========Sub創(chuàng)立一個命令欄()

CommandBars.Add(Name:=\新工具欄\EndSub

代碼中的“Visible=True〞表示將創(chuàng)立的工具欄顯示出來,假使“Visible=False〞則會創(chuàng)立一個隱蔽的工具欄(“Visible〞是好多對像的屬性。)?!癙osition:=msoBarTop〞則表示新建的命令欄居于程序的頂部。如圖7-1。

(二)在CommandBars對像中引用CommandBar對像

在CommandBars對像中引用CommandBar對像常用的方法有兩種。

第一種:我們在針對某一個菜單項進行操作時,可以直接引用這個菜單項的名稱來調用它。如:

CommandBars(\對應“視圖〞菜單、CommandBars(“Text〞)對應右鍵彈出菜單等等。請看實例——

’’’’=======使視圖菜單失效========sub使視圖菜單失效()

CommandBars(\Endsub

Enabled屬性是好多對像的屬性,它的作用是決定對像在應用程序中的狀態(tài)。本實例中,假使屬性值為True,那么激活指定的命令欄或命令欄控件;假使屬性值為False,則該命令欄控件將失效。運行本代碼查看效果之后,可將Enabled的值改為True,再次運行,將視圖菜單恢復過來。使視圖菜單失效的效果如圖7-3。

其次種:我們在對大量菜單項進行操作時,假使像前例那樣一個一個寫有名稱的話會很麻煩,所以可以使用菜單所對應的ID號來調用它。請看實例——

本實例隱蔽程序中ID號在前80位的命令欄。

’’’’’’’’’’’’===========隱蔽命令欄==========Sub隱蔽命令欄()Dima,b

b=8

溫馨提示

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

最新文檔

評論

0/150

提交評論