Board logo

標題: TextBox如何設定只能是整數? [打印本頁]

作者: acdx    時間: 2012-12-5 01:09     標題: TextBox如何設定只能是整數?

我設計一個表單 其中TextBox作為輸入介面 由於該參數必須為正整數該如何限制TextBox之格式
我希望寫成當輸入為正整數以外字元則顯示"必須為正整數"
謝謝
作者: GBKEE    時間: 2012-12-5 07:40

回復 1# acdx
Enter、Exit 事件
Enter 主要發生在一個控制項,從同一表單上的另一個控制項取得駐點之前;Exit 會在一個控制項失去駐點時發生。
  1. Option Explicit
  2. Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  3.     If IsNumeric(TextBox1) Then
  4.         TextBox1 = Abs(Int(TextBox1))
  5.     Else
  6.         TextBox1 = ""
  7.     End If
  8. End Sub
複製代碼

作者: acdx    時間: 2012-12-5 19:32

該寫法雖然可以解決非整數的問題 但如果遇到使用者輸入數字以外字元例如"h","好"
該如何讓程式自動判別這些非數字字元及自動跳出而不致發生程式錯誤?
作者: c_c_lai    時間: 2012-12-5 20:06

回復 3# acdx
TextBox1 = ""    已經給你答案了!
作者: acdx    時間: 2012-12-6 18:09

回復 4# c_c_lai
不好意思 我上面可能沒表達清楚
現在遇到的問題是TextBox所輸入的值被認定為文字
假設我輸入5 則TextBox="5"(由監看式裡看到的值) 而TextBox在程式中必須是正整數才可正常執行 我希望我的程式能夠判別/提醒使用者,當TextBox輸入為負數或小數時則會出現警告視窗因此我寫成這樣: (當TextBox1輸入8,TextBox2輸入12)
If IsNumeric(TextBox1) = False Or IsNumeric(TextBox2) = False Then
    MsgBox "請輸入數字"
    Exit Sub
        ElseIf TextBox1 <> Abs(Int(TextBox1)) Or TextBox2 <> Abs(Int(TextBox2)) Then
            MsgBox "請輸入整數"
            Exit Sub
End If
藍色為其執行結果
由監看式裡: TextBox1="8", Abs(Int(TextBox1)) =8, TextBox2 ="12", Abs(Int(TextBox2)) =12
故:TextBox1 不等於Abs(Int(TextBox1)) 所以程式跳開-->這該如何解決?
另外程式中必須TextBox1<TextBox2所以我還寫了條件式確保這關係成立但卻被判斷為 "8">"12"-->所以程式又跳開  這些問題困擾我好幾天了
作者: Hsieh    時間: 2012-12-6 19:10

回復 5# acdx
  1. Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  2. If CStr(Val(TextBox1)) <> TextBox1 Or Val(TextBox1) < 0 Then MsgBox "必須為正整數": Exit Sub
  3. MsgBox TextBox1
  4. End Sub
複製代碼

作者: c_c_lai    時間: 2012-12-7 08:08

回復 5# acdx
  1. Sub Test()
  2.     '  假設 [B1] 欄位屬性為文字;輸入值: 10、或是 10ABC
  3.     '  則此時 [B1] 為 Not IsNumeric([B1])
  4.     If IsNumeric([B1]) Then
  5.         [B3] = Abs(Int([B1]))
  6.     Else
  7.         If Val([A1]) > 0 Then
  8.             [B3] = Abs(Int(Val([B1])))     ' 取得數值 10
  9.         Else
  10.             [B3] = ""         ' 該欄位值為非數值之文字串
  11.             MsgBox "請輸入數字"
  12.         End If
  13.     End If
  14. End Sub
複製代碼
如此舉例,了解否?
作者: GBKEE    時間: 2012-12-7 09:32

回復 5# acdx
  1. Option Explicit
  2. Dim Msg As Boolean          '預設值: False
  3. Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
  4.     Msg = True      '表單關閉:變數設定
  5. End Sub
  6. Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) '表單關閉後還會執行此程式
  7.      If Msg = False Then If Text檢查(TextBox1) Then Cancel = True
  8.      'Cancel: False 表示控制項不處理事件(預設);True 表示應用程式須處理此事件,且駐點仍保留在目前控制項。
  9. End Sub
  10. Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  11.     If Msg = False Then If Text檢查(TextBox2) Then Cancel = True
  12. End Sub
  13. '如還有TextBox 依樣畫葫蘆
  14. 'Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  15. '   If Msg = False Then If Text檢查(TextBox3) Then Cancel = True
  16. 'End Sub
  17. Private Function Text檢查(Box As MSForms.TextBox) As Boolean
  18.     Dim S As Integer
  19.     If Abs((Int(Val(Box))) <> Box Or Box < 0) Then
  20.         S = InStr(Box, ".")
  21.         Box.SelStart = IIf(Mid(Box, 1, 1) = "-", 0, S - IIf(S > 0, 1, 0))
  22.         Box.SelLength = IIf(Mid(Box, 1, 1) = "-", 1, Len(Box) - S + 1)
  23.         MsgBox "需輸入正整數"
  24.         Text檢查 = True
  25.     End If
  26. End Function
複製代碼

作者: acdx    時間: 2012-12-7 14:53

解決了
謝謝大家的幫忙




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)