VBA自帶了很多內(nèi)置函數(shù),可以在在線幫助里很容易地找到這些函數(shù)。在VB編輯器窗口選擇“幫助”-“Microsoft Visual Basic幫助”可以訪問所有VBA函數(shù)按字母順序排序的清單,然后點擊“函數(shù)”,例如,以MsgBox或InputBox函數(shù)為例。一個程序好的功能之一就是要與用戶互動,當(dāng)你使用Excel時,你通過多種對話框與該應(yīng)用程序交流,當(dāng)你犯錯的時候,對話框會彈出來,并且告訴你有錯誤。
當(dāng)你編寫你自己的程序時,你也可以將出乎意料的錯誤或某個計算的結(jié)果通知用戶,你可以使用函數(shù)MsgBox幫助你做這些。到目前為止,你只是看到了這個函數(shù)的一些簡單應(yīng)用,在下面的部分,你將了解如何控制你信息的外觀;你也將學(xué)習(xí)如何使用函數(shù)InputBox從用戶獲得信息。在我們詳細討論這些函數(shù)之前,我們來看一個VBA函數(shù),在你已經(jīng)很熟悉變量和它們的類型的時候,它對你特別有用處。
VB有個VarType函數(shù),它返回一個值變量類型的整數(shù)。圖4-4例顯示了函數(shù)VarType的語法和它返回的值。
圖4-4 使用內(nèi)置函數(shù)VarType,你可以判別變量的類型(本截圖與2002版本有區(qū)別)
現(xiàn)在,看看如何在立即窗口里使用這個函數(shù):
1.打開立即窗口
2. 輸入下列給變量賦值的語句
age = 18
birthdate = #1/1/1981#
firstName = "John"
3. 現(xiàn)在詢問VB每個變量的數(shù)據(jù)類型是什么:
?varType(age)
你按下回車時,VB返回2,如圖4-4所示,數(shù)字2代表整數(shù)類型。
?varType(birthdate)
VB返回7代表日期。如果你在變量名稱上犯了個小錯誤(比如說,你輸入了birthday而不是birthdate),VB將返回0。
?varType(firstName)
VB告訴你變量firstName的數(shù)據(jù)是字符串(8)。
MsgBox "過程已完成" ‘(注意,英文狀態(tài)的引號)
你可以將它輸入立即窗口,快速地測試上面的指令,當(dāng)你輸入完這條指令并且回車后,VB就顯示如圖4-5的信息框。
MsgBox函數(shù)允許你使用其它參數(shù),使你可能決定可用的按鈕數(shù)目,或者將默認的信息框的標題(Microsoft Excel)改為你自己的標題。也可以設(shè)置你自己的幫助主題。MsgBox的語法如下:
MsgBox (prompt [, buttons] [, title], [, helpfile, context])
注意,MsgBox函數(shù)有五個參數(shù),只有第一個,Prompt(提示),是必須的;這些列在方括號里面的參數(shù)都是可選的。當(dāng)你在提示參數(shù)輸入一個非常長的文本時,VB決定如何斷句,使文本適合信息框大小。我們在立即窗口里來做些練習(xí),看不同的文本格式技巧:
1. 在立即窗口輸入以下指令,確保在一行里輸入整個文本,回車
MsgBox "All done. Now open ""Chap04.xls"" and place an empty disk in the diskette drive.
The following procedure will copy this file to the disk."
一旦回車,VB顯示信息框,如圖4-6
圖4-6 如果你設(shè)置一下文本格式,長信息看上去將會更吸引人
如果你遇到編譯錯誤,可以點擊確定,然后確定文件名用雙引號括起來——““Chap04.xls””。當(dāng)你的信息文本特別長時,你可以使用VBA函數(shù)Chr將它分割為好幾行。Chr函數(shù)需要你跟參數(shù),這個參數(shù)是0到255之間的數(shù)字,它返回這個數(shù)字代表的字符。例如Chr(13)返回的是回車(這和按下回車鍵相同),以及Chr(10)返回換行字符(這在文本行之間添加空行很有用)。
2. 將上面的指令修改為下述方式:
MsgBox "All done." & Chr(13)_ & "Now open ""Chap04.xls"" and place" & Chr(13)_ & "an empty
disk in the diskette drive." & Chr(13)_ & "The following procedure will copy this file to
the disk."
圖4-7 通過使用Chr(13)可以將長文本分割成幾行
你必須將每段文本片斷用引號括起來,內(nèi)嵌在括號里面的文本(顯示狀態(tài))需要再用一對括號來括起來,例如““Chap04.xls””。Chr(13)函數(shù)指明你希望開始新的一行的地方。字符串的連接字符(&)用來返回連接字符串的字符。
在一行輸入及其長的文本的時候,很容易失誤?;叵胍幌拢琕B有一個專門的線連續(xù)字符(下劃線_)
幫你將長VBA語句分割為幾行,不幸的是,這個線連續(xù)符不能在立即窗口使用。
3. 在工程MyFunctions (Chap04.xls)里添加一個新模塊并命名為Sample6
4. 激活模塊Sample6并且輸入如下所示的子程序MyMessage,確保在每個線連續(xù)符前面加個空格:
Sub MyMessage()
MsgBox "All done." & Chr(13)_
& "Now open ""Chap04.xls"" and place" & Chr(13) _
& "an empty disk in the diskette drive." & Chr(13) _
& "The following procedure will copy this file to the disk."
End Sub
你運行過程MyMessage時,VB顯示如圖4-7一樣的信息。正如你看到的,在幾行輸入的文本更具可讀性,而且代碼更容易維護。你可以在文本行之間添加一下空白行,來增加信息的可讀性。使用Chr(13)或two Chr(10)函數(shù)就可以做到,如下列步驟所述。
5. 輸入下面的MyMessage2過程:
Sub MyMessage2()
MsgBox "All done." & Chr(10) & Chr(10) _
& "Now open ""Chap04.xls"" and place" & Chr(13) _
& "an empty disk in the diskette drive." & Chr(13)& Chr(13) _
& "The following procedure will copy this file to the disk."
End Sub
圖4-8顯示了MyMessage2過程產(chǎn)生的信息框。
圖4-8 你可以通過在文本行之間添加空行增加信息的可讀性
既然你已經(jīng)掌握了文本的格式技術(shù),那么我們就來仔細地看看MsgBox函數(shù)的下一個參數(shù)吧。盡管按鈕參數(shù)時可選的,但是它的使用還是很頻繁的。這個按鈕參數(shù)明確多少個按鈕,并且是什么樣的按鈕你想要出現(xiàn)了信息框上,這個參數(shù)可以是個常量(參見表4-1),也可以是個數(shù)字。如果你忽略這個參數(shù),結(jié)果辛苦只會有一個“確定”按鈕,正如你在前面的例子里看到的那樣。表4-1 MsgBox按鈕參數(shù)的設(shè)置
你什么時候應(yīng)該使用按鈕參數(shù)呢?假設(shè)你要用戶對一個問題回到“是”或“否”,你的信息框就需要兩個按鈕,當(dāng)信息框有一個以上的按鈕時,就需要將其中一個設(shè)置為缺省值,當(dāng)用戶回車的時候,這個默認的按鈕就會自動地被選上。
因為,你可以顯示各種各樣的信息(重要,警告,信息),所以,你需要通過按鈕參數(shù)設(shè)置圖形代
表(圖標)來指明信息的重要性。
除了信息類型之外,按鈕參數(shù)還可以設(shè)置是否用戶必須先關(guān)閉該信息框才能切換到另外的應(yīng)用程序。很多情況下,用戶需要在對信息框的問題做出反應(yīng)之前,切換到另外的程序或者進行另外的操作。如果這個信息框是應(yīng)用程序模式(vbApplication Modal)的話,用戶必須先關(guān)閉該信息框后才能繼續(xù)使用你的應(yīng)用程序。另一方面,如果你想要在用戶對信息框響應(yīng)之前,將所有應(yīng)用程序掛起,那么你必須在按鈕參數(shù)里加上系統(tǒng)強制返回設(shè)置(vbSystemModal)。按鈕參數(shù)的設(shè)置分為五組:
按鈕設(shè)置,圖標設(shè)置,默認按鈕設(shè)置,信息框形式和其它的MsgBox顯示設(shè)置(參見圖4-1)。
每組設(shè)置里面只能選一個加入按鈕參數(shù)里面。你可以將每種需要的設(shè)置加和起來,來設(shè)置按鈕參數(shù),例
如,要顯示一個帶兩個按鈕(“是”和“否”),問號圖標以及將“否”按鈕設(shè)置為缺省值的信息框,你可以在表4-1里查找相應(yīng)的值并且加和起來,你應(yīng)該得到292(4+32+256)。你可以在立即窗口里面輸入下列代碼,快速查看使用該計算的按鈕參數(shù)的信息框:
MsgBox "Do you want to proceed?", 292
下面顯示的就是信息框結(jié)果。當(dāng)你直接使用加和起來的值作為參數(shù)時,你的程序可讀性就不高了,因為沒有參考索引表格供你檢查292背后的意思。要改善你信息框函數(shù)的可讀性,最好使用常量,而不要使用它們的值,例如,在立即窗口輸入下列修改后的語句:
MsgBox "Do you want to proceed?", vbYesNo + vbQuestion + vbDefaultButton2
上面的語句得到如圖4-9所示的相同結(jié)果。
圖4-9 你可以使用可選的按鈕參數(shù)來確定信息框上的按鈕個數(shù)
下面的例子示范如何在VB過程里使用按鈕參數(shù):
1. 在工程MyFunctions (Chap04.xls)里添加一新模塊,并命名為Sample7
2. 激活Sample7模塊,并且輸入如下子程序MsgYesNo:
Sub MsgYesNo()
Dim question As String
Dim myButtons As Integer
question = "是否要打開一個新工作簿?"
myButtons = vbYesNo + vbQuestion + vbDefaultButton2
MsgBox question, myButtons
End Sub
在上面的子程序里,變量question儲存了你的信息文本,而按鈕參數(shù)的設(shè)置則儲存于變量myButtons。除了使用常量名稱之外,你還可以使用它們的值,例如下面的:
myButtons = 4 + 32 + 256
但是,明確了按鈕常數(shù)的常量名稱的話,你可以使你的程序?qū)δ阕约阂约皩砜赡芤褂迷摮绦虻娜藖碚f更容易理解。變量question和myButtons用作MsgBox函數(shù)的參數(shù)。運行該程序后,你將看到如圖4-9所示的結(jié)果。注意,現(xiàn)在按鈕“否”是被選中的,它是該對話框的默認按鈕,如果你按下回車,Excel將該信息框從屏幕上移除,因為MsgBox函數(shù)后面沒有任何指令,所以,不會發(fā)生其它操作。將默認按鈕換成vbDefaultButton1設(shè)置,可以更改默認按鈕。
MsgBox函數(shù)的第三個參數(shù)是標題,雖然這也是個可選參數(shù),但是它很方便,因為當(dāng)你忽略它們(默認為Microsoft Excel)時,就不能給程序提供可視提示。你可以使用這個參數(shù),將標題欄設(shè)置為你想要的任何文字。假設(shè)你要過程MsgYesNo顯示標題為“新工作簿”,下面的過程MsgYesNo2示范如何使用標題參數(shù):
Sub MsgYesNo2()
Dim question As String
Dim myButtons As Integer
Dim myTitle As String
question = "Do you want to open a new workbook?"
myButtons = vbYesNo + vbQuestion + vbDefaultButton2
myTitle = "New workbook"
MsgBox question, myButtons, myTitle
End Sub
標題參數(shù)文本儲存于變量myTitle。如果你沒有明確標題參數(shù)的內(nèi)容,VB將默認顯示為“Microsoft Excel”。注意,參數(shù)是基于MsgBox函數(shù)決定的順序列出的,如果你要按你自己的順序列出這些參數(shù)的話,你就必須將參數(shù)名稱一起寫出,例如:
MsgBox title:=myTitle, prompt:=question, buttons:=myButtons
后面兩個參數(shù)——幫助文件(helpfile)和上下文(context)——經(jīng)常為那些對Windows環(huán)境下的幫助文件很熟悉的程序員使用。參數(shù)helpfile指明某個包含你要顯示給用戶的附加信息的具體幫助文件的名稱,當(dāng)你明確了這個參數(shù)后,Help按鈕就會在信息框上顯示出來。當(dāng)你使用helpfile參數(shù)時,你同時也使用context參數(shù)。這個參數(shù)表明在幫助文件里你要顯示的那個幫助主題。假設(shè)Help.hlp是你創(chuàng)建的幫助文件,55是你要使用的幫助主題,你可以按照如下指令來顯示這些信息于信息框上:
MsgBox title:=mytitle, _
prompt:=question _
buttons:=mybuttons _
helpFile:= "HelpX.hlp", _
context:=55
上面只是一條VBA語句,使用連接符打斷為好幾行。
更多建議: