VBA定位內(nèi)置函數(shù)

2021-12-08 10:51 更新

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的語法和它返回的值。


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函數(shù)

你目前使用的MsgBox函數(shù)局限于給用戶用一個簡單的,一個按鈕的對話框顯示信息。你點擊確定按鈕或者回車來關(guān)閉該信息框。要創(chuàng)建一個簡單的信息框,只要在MsgBox函數(shù)名稱后面帶上一個用引號包括起來的文本就可以了。換句話說,要顯示信息“過程已完成”,你應(yīng)該準備下列語句:


MsgBox "過程已完成"   ‘(注意,英文狀態(tài)的引號)
你可以將它輸入立即窗口,快速地測試上面的指令,當(dāng)你輸入完這條指令并且回車后,VB就顯示如圖4-5的信息框。


MsgBox
圖4-5 將文本作為MsgBox函數(shù)的參數(shù),來給用戶顯示信息

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


VB信息框

圖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)生的信息框。


MyMessage2信息框

圖4-8 你可以通過在文本行之間添加空行增加信息的可讀性


既然你已經(jīng)掌握了文本的格式技術(shù),那么我們就來仔細地看看MsgBox函數(shù)的下一個參數(shù)吧。盡管按鈕參數(shù)時可選的,但是它的使用還是很頻繁的。這個按鈕參數(shù)明確多少個按鈕,并且是什么樣的按鈕你想要出現(xiàn)了信息框上,這個參數(shù)可以是個常量(參見表4-1),也可以是個數(shù)字。如果你忽略這個參數(shù),結(jié)果辛苦只會有一個“確定”按鈕,正如你在前面的例子里看到的那樣。表4-1 MsgBox按鈕參數(shù)的設(shè)置


MsgBox按鈕參數(shù)

MsgBox按鈕


你什么時候應(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é)果。


可選的按鈕參數(shù)

圖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語句,使用連接符打斷為好幾行。



以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號