技巧區‎ > ‎高級程度‎ > ‎

模擬Access的輸入遮罩 [2003年3月]

張貼者:2010年5月29日 上午6:30Carson Cheng   [ 已更新 2010年5月29日 上午6:30 ]
Excel 的TextBox不如Access的那樣,可以設定輸入遮罩(Input Mask),以控制用戶輸入的文字。這個技巧就可以模擬輸入遮罩。

在這個例子當中,輸入文字的格式為"EXCEL999A",也就是說,前方要有EXCEL字樣,其後的三個字符需為數字,最後有一個字母。

要注意的是,除了TextBox,我們還要一個Label,用作存放上一次輸入的正確文字,且要把它的Visible值設為False。


程式如下:

' 起始時,把預設的字串(這裡就是"EXCEL")放進TextBox1和Label1。
Private Sub Userform_Initialize()
   TextBox1.Text = "EXCEL"
   Label1.Caption = TextBox1.Text
End Sub



' 當用戶更改文字方塊時,就要確定新輸入的文字符合規格。
Private Sub TextBox1_Change()
   ' 把輸入的文字轉到大寫(可有可無)
   TextBox1.Text = UCase(TextBox1.Text)
   
   ' 如果輸入的文字正確的話,則把它記錄在隱藏的label裡;
   ' 否則,把記錄在label的值(也就是上一次輸入正確的文字)放回到輸入欄
   If ValidString(TextBox1.Text) Then
       Label1.Caption = TextBox1.Text
   Else
       TextBox1.Text = Label1.Caption
   End If
End Sub

' 判別文字S是否正確
' 這裡的程式碼要按你的需要而修改。
' 這裡的技巧是,就算文字不夠長,也可以使用MID(),不會出現錯誤,這可以把程式碼寫得很簡單。
' 例如來源文字只有"ABC",MID("ABC",5,1)不會發生錯誤,只會返回空字串 ""。
Private Function ValidString(S As String)
   ValidString = False
   
   If Len(S) >= 5 And Len(S) <= 9 Then
       If Left(S, 5) = "EXCEL" Then
           ValidString = IsDigit(Mid(S, 6, 1)) And IsDigit(Mid(S, 7, 1)) And _
                   IsDigit(Mid(S, 8, 1)) And IsLetter(Mid(S, 9, 1))
       End If
   End If
End Function

' 判別S字串是否一個數字,空字串也可以
Private Function IsDigit(S As String)
   IsDigit = (S >= "0" And S <= "9") Or S = ""
End Function

' 判別S字串是否一個字母,空字串也可以
Private Function IsLetter(S As String)
   IsLetter = (S >= "a" And S <= "z") Or (S >= "A" And S <= "Z") Or S = ""
End Function

執行的時候就像用了輸入遮罩:
ċ
3_12.zip
(20k)
Carson Cheng,
2010年5月29日 上午6:30
Comments