大家好,我們今日繼續講解VBA代碼解決方案的第91講內容:限制文本框的輸入.應該說,VBA的內容非常的廣泛,但大多數情況下我們利用到的只是很少的一部分。比較VBA和VB,VBA不用再單獨建立系統的環境,何樂而不爲?那麼從今日開始陸續講解一些窗體的代碼經驗,和大家分享。

今日就從最爲基本的文本框開始,如何限制文本框的輸入內容。用戶在使用文本框輸入數據時,往往希望能限制輸入數據的類型,比如只能輸入數字。但是沒有內置的屬性能限制在文本框中只能輸入數字,只能在文本框的事件過程中使用代碼來測試輸入的是哪類字符,然後只允許輸入數字字符和一個"-"號、一個"."號,如下面的代碼所示。

這裏會用到KeyPress事件,它的語法如下:

Private Sub object_KeyPress( ByVal KeyANSI As MSForms.ReturnInteger)

其中參數Object是必須的,是一個有效的對象;參數KeyANSI是可選的,整數值,代表標準的數字ANSI 鍵代碼。ANSI是一種字符代碼,爲使計算機支持更多語言,通常使用 0x80~0xFF 範圍的 2 個字節來表示 1 個字符。ANSI編碼表示英文字符時用一個字節,表示中文用兩個或四個字節

下面我們看看代碼實測:

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

Select Case KeyAscii

Case Asc("0") To Asc("9")

Case Asc("-")

If InStr(1, Me.TextBox1.Text, "-") > 0 Or _

Me.TextBox1.SelStart > 0 Then

KeyAscii = 0

End If

Case Asc(".")

If InStr(1, Me.TextBox1.Text, ".") > 0 Then

KeyAscii = 0

End If

Case Else

KeyAscii = 0

End Select

End Sub

代碼解析:文本框的KeyPress事件過程,測試鍵盤輸入的是哪類字符,只允許輸入數字字符和一個"-"號、一個"."號。

第2行代碼使用Case Else語句測試文本框KeyPress事件的KeyAscii參數值。

第3行代碼,如果鍵盤輸入的是0到9之間的數字字符,則允許輸入。如果想在文本框中允許其它類型的字符輸入,在此句代碼中列出允許輸入的字符即可。

第4行到第8行代碼,如果鍵盤輸入的是"-"號,先使用InStr函數測試文本框中是否已有"-"號,如果InStr函數返回值大於0,說明文本框中已有"-"號。接下來使用文本框的SelStart 屬性來測試插入點,如果文本框的SelStart 屬性值大於0,說明"-"號的插入點不是第一個。如果以上兩個條件中有任何一個成立,將KeyAscii參數值設置爲0,使文本框只能在第一位輸入一個"-"號。

第9行到第12行代碼,如果鍵盤輸入的是"."號的話,使用InStr函數測試文本框中是否已有"."號,如果已有"."號,將KeyAscii參數值設置爲0,使文本框只能輸入一個"."號。

第13、14行代碼,如果鍵盤輸入的是其他字符則將KeyAscii參數值設置爲0,使文本框不能輸入其他字符。

代碼窗口:

VBA代碼在實現人機對話過程中,如何做到文本框的智能響應

代碼運行窗口:

VBA代碼在實現人機對話過程中,如何做到文本框的智能響應

此時只可以輸入數字了:

VBA代碼在實現人機對話過程中,如何做到文本框的智能響應

今日內容迴向:

1 如何做到文本框只能輸入數字?

2 本例子中你認爲還可以有哪些擴展?

相關文章