VBA InputBox函數(shù)

2021-12-08 14:27 更新

InputBox函數(shù)顯示一個信息提示用戶輸入數(shù)據(jù),這個對話框有兩個按鈕——“確定”和“取消”,當(dāng)你點(diǎn)擊確定時,InputBox函數(shù)返回用戶輸入在信息框里的信息;當(dāng)你點(diǎn)擊取消時,函數(shù)則返回空字符串(” ”)。InputBox函數(shù)的語法顯示如下:


InputBox(prompt [, title] [, default] [, xpos] [, ypos] _ [, helpfile, context])


第一個參數(shù),prompt,是你想要顯示在對話框上的信息,你可以使用函數(shù)Chr(13)或Chr(10)將長文本打斷為幾行(參見本章中使用MsgBox函數(shù)的例子)。剩下所有的參數(shù)都是可選的。


第二個參數(shù),title,讓你改變對話框的默認(rèn)標(biāo)題,默認(rèn)的標(biāo)題是Mictosoft Excel。InputBox函數(shù)的第三個參數(shù),default,讓你在文本框里顯示一個默認(rèn)值,如果你忽略這個參數(shù)的話,顯示的將是空白編輯框。


接下來的兩個參數(shù),xpos和ypos,允許你設(shè)置該對話框在屏幕上出現(xiàn)的位置,如果你忽略這兩個參數(shù),對話框就會出現(xiàn)了當(dāng)前窗口的中央,xpos參數(shù)決定對話框在屏幕上從左起的水平位置,忽略它時,對話框顯示在水平中央,而ypos參數(shù)決定對話框在屏幕從上而下的豎直位置,忽略它,對話框就在豎直大約三分之一的位置。xpos和ypos都使用一個叫twips的專門單位衡量,1twip大約等于0.0007英寸。最后兩個參數(shù),helpfile和context,和在本章前期討論的MsgBox函數(shù)相應(yīng)的參數(shù)使用方法一樣。


現(xiàn)在你知道了InputBox參數(shù)的意義了,我們來看看這個函數(shù)的使用示例:


1.  在MyFunctions (Chap04.xls)工程里添加一個新模塊,重命名為Sample8


2.  激活Sample8模塊,并且輸入下列子程序:


Sub Informant()
             InputBox prompt:="Enter your place of birth:" & Chr(13) _
                           & " (e.g., Boston, Great Falls, etc.) "

End Sub


上面的過程顯示一個帶兩個按鈕的對話框,輸入提示顯示在兩行里。象MsgBox函數(shù)一樣,如果你想要使用用戶輸入的數(shù)據(jù),那么你應(yīng)該使用一個變量來儲存該對話框結(jié)果。下面顯示的子程序Informant2將InputBox函數(shù)的結(jié)果賦值給變量town:

Informant子程序

圖4-10 Informant子程序產(chǎn)生的對話框


Sub Informant2()
             Dim myPrompt As String
             Dim town As String
             Const myTitle = "Enter data"
             myPrompt = "Enter your place of birth:" & Chr(13) _
                          & "(e.g., Boston, Great Falls, etc.)"
             town = InputBox(myPrompt, myTitle)
             MsgBox "You were born in " & town & ".", , "Your response"
End Sub


注意,這次,InputBox函數(shù)的參數(shù)列在了括號中間。如果你需要在稍后的程序中需要使用InputBox函數(shù)的結(jié)果,那么括號是必須的。Informant2子程序使用常數(shù)來確定顯示在對話框標(biāo)題上的文本。因?yàn)?,這個值在過程執(zhí)行過程中從始至終都是保持不變的,所以,可以將對話框的標(biāo)題聲明為一個常量,然而,如果你愿意,你也可以使用一變量。

當(dāng)你運(yùn)行使用了InputBox的過程時,使用該函數(shù)的對話框總是出現(xiàn)在屏幕的同一位置,你可以按前面解釋的那樣,提供xpos和ypos參數(shù)來改變對話框的位置。


3.  修改過程Informant2中的InputBox函數(shù),讓對話框顯示在屏幕的左上角,例如:

town = InputBox(myPrompt, myTitle, , 1, 200)


注意,參數(shù)myTitle后面緊跟兩個逗號,第二個逗號是忽略掉的默認(rèn)值參數(shù)。下面兩個參數(shù)決定對話框的水平和豎直位置。如果你忽略了參數(shù)myTitle后面的第二個逗號,VB將會使用數(shù)字1作為默認(rèn)值。如果你使用了參數(shù)名稱的話,(例如,prompt:=myPrompt,      title:=myTitle, xpos:=1,ypos:=200),你就不必記住在每個忽略了參數(shù)的地方加逗號了。


如果你輸入了一個數(shù)字,而不是一個城鎮(zhèn)的名稱,后果會怎樣?因?yàn)椋脩艚?jīng)常會在對話框里輸入錯誤的數(shù)據(jù),所以,你的程序必須驗(yàn)證用戶輸入的數(shù)據(jù)是否可以在將來的數(shù)據(jù)操作里使用。InputBox函數(shù)本身并沒有提供驗(yàn)證數(shù)據(jù)的工具,要驗(yàn)證用戶的輸入,你必須使用其它的VBA指令,這將在接下來的章節(jié)里講述。


數(shù)據(jù)類型轉(zhuǎn)變

InputBox函數(shù)的結(jié)果總是字符串,如果用戶輸入的是個數(shù)字,用戶輸入的字符串值必須轉(zhuǎn)換成為數(shù)字值之后,才能用于你程序里的數(shù)學(xué)計算。VB轉(zhuǎn)換數(shù)據(jù)類型輕而易舉,不過,在早期的Excel版本里,這是不可能的。

1.  激活模塊Sample8,并輸入以下過程AddTwoNums:
Sub AddTwoNums()
             Dim myPrompt As String
             Dim value1 As String
             Const myTitle = "Enter data"
             Dim mySum As Single
             myPrompt = "Enter a number:"
             value1 = InputBox(myPrompt, myTitle, 0)
             mySum = value1 + 2
             MsgBox mySum & " (" & value1 & " + 2)"
End Sub

默認(rèn)值
圖4-11 要給用戶提示數(shù)據(jù)的確切類型,你可以在編輯框里提供一個默認(rèn)值

上面的程序顯示如圖4-11所示的對話框。注意,這個對話框使用了兩個專門的功能,InputBox函數(shù)的可選參數(shù)標(biāo)題和默認(rèn)值。該對話框顯示了有常量myTitle確定的文本字符串作為標(biāo)題,而不是默認(rèn)的“Microsoft Excel”。在編輯框里面的0提示用戶輸入數(shù)字,而不能輸入文本。一旦用戶輸入了數(shù)據(jù)并點(diǎn)擊確定時,用戶的輸入就被賦值給了變量value1

value1 = InputBox(myPrompt, myTitle, 0)

變量value1的數(shù)據(jù)類型是字符串,你可以在上面指令的下面加上如下語句,快速地查看它的數(shù)據(jù)類型:

MsgBox varType(value1)

當(dāng)VB運(yùn)行上面的代碼時,將顯示信息-數(shù)字8,你可以在本章的圖4-4里查看該數(shù)字代表字符串類型。

技巧:定義常量
你可以將標(biāo)題文本賦值到一個常量上,以確保某個VBA程序里所有的標(biāo)題欄都顯示相同的 文本。依照這個技巧,你可以在多次輸入某標(biāo)題文本時節(jié)省時間。

技巧:避免類型不匹配錯誤
如果你試圖在Excel的早期版本里(2000以前版本)運(yùn)行AddTwoNums過程,當(dāng)VB試圖執(zhí)行下列代碼行時,你將得到類型不匹配的錯誤:

mysum = value1 + 2

使用內(nèi)置函數(shù)CSng將儲存于value1的字符串轉(zhuǎn)換為一個單精度浮點(diǎn)類型的數(shù)字,可以避免類型不匹配錯誤,代碼寫成:

mysum = CSng(value1) + 2

下一行,mySum = value1 + 2,在用戶輸入的數(shù)據(jù)上加上2,并且將計算結(jié)果賦值給變量mySum。因?yàn)樽兞縱alue1的數(shù)據(jù)類型時字符串,在使用它計算之前,VB在后臺進(jìn)行數(shù)據(jù)類型的轉(zhuǎn)換,VB知道轉(zhuǎn)換的需要。沒有它,兩種不兼容的數(shù)據(jù)類型(文本和數(shù)字)將會產(chǎn)生類型不匹配錯誤。程序最后是一個MsgBox函數(shù),顯示計算的結(jié)果已經(jīng)給用戶顯示總數(shù)是如何組成的。


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號