返回列表 上一主題 發帖

[發問] 如何在multipage表單內將文字方塊類別進行輸入限制

[發問] 如何在multipage表單內將文字方塊類別進行輸入限制

各位大大好:

   小弟對物件類別模組,
一直無法體會其含意。

   現小弟想引用一範例並
稍做修改為multipage模式在其
page1及page2內各有五個
textbox文字方塊。

   現利用類別模組來將文字方塊類別化
以進行輸入限制。

小弟發現在page1可達成其輸入限制,
但在page2的文字方塊卻不能逹其效果。
不知其原因為何呢?
以下語法如下:

表單→userform1
Private Sub UserForm_Initialize()

Select Case UserForm1.MultiPage1.Value
   
Case 0
    Dim i As Long
    ReDim myTb(1 To 5)
    For i = 1 To 5
        Set myTb(i) = New myTbClass
        Set myTb(i).Tb = Me.Controls("TextBox" & CStr(i))
    Next
    myTb(1).ck = 1
    myTb(2).ck = 2
    myTb(3).ck = 3
    myTb(4).ck = 2
    myTb(5).ck = 1


Case 1
    Dim j As Long
    ReDim myTb(6 To 10)
    For j = 6 To 10
        Set myTb(j) = New myTbClass
        Set myTb(j).Tb = Me.Controls("TextBox" & CStr(j))
    Next
    myTb(6).ck = 1
    myTb(7).ck = 2
    myTb(8).ck = 3
    myTb(9).ck = 2
    myTb(10).ck = 1
   
End Select
End Sub

module1

Sub ufshow()
    UserForm1.Show vbModeless   
End Sub

物件類別模組→myTbClass
Option Explicit

'類別模組myTbClass
Private WithEvents myTb As MSForms.TextBox
Private myCkType As Long
Public Property Set Tb(setTb As MSForms.TextBox)
    Set myTb = setTb
End Property

Public Property Get Tb() As MSForms.TextBox
End Property

Public Property Let ck(setCk As Long)
    myCkType = setCk
End Property

Public Property Get ck() As Long
End Property

Private Sub myTb_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Select Case myCkType
        Case 1
            '拒絕數字以外的輸入
            If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then
                KeyAscii = 0: Beep
            End If
        Case 2
            '拒絕數字,"-"以外的輸入
            If (KeyAscii >= Asc("0") And _
                KeyAscii <= Asc("9")) Or KeyAscii = Asc("-") Then
            Else
                KeyAscii = 0: Beep
            End If
        Case 3
            '拒絕數字,"英文大寫"以外的輸入
            If (KeyAscii >= Asc("0") And KeyAscii <= Asc("9")) Or _
                (KeyAscii >= Asc("A") And KeyAscii <= Asc("Z")) Then
            Else
                KeyAscii = 0: Beep
            End If
    End Select
End Sub

謝謝各位大大。

txtBox.rar (13.24 KB)

謝謝版主大大。

小弟試著改至Private Sub MultiPage1_Change()
已達成運作。
但整個語法小弟至今還是霧裡看花,無法全然理解。
不知能否請版主大大稍作說明,也讓小弟能有所理解。
下列語法如下:
'類別模組myTbClass
Private WithEvents myTb As MSForms.TextBox
Private myCkType As Long
Public Property Set Tb(setTb As MSForms.TextBox)
    Set myTb = setTb
End Property
Public Property Get Tb() As MSForms.TextBox
End Property

Public Property Let ck(setCk As Long)
    myCkType = setCk
End Property

Public Property Get ck() As Long
End Property

感恩大大!

TOP

本帖最後由 dechiuan999 於 2010-10-11 05:49 編輯

感謝版主大大。

小弟因資歷尚淺,還無權限下載
範例檔。
可否請版主大大能直接E-MAIL
給小弟,讓小弟先有磨練的機會。
E-MAIL :[email protected]

感恩大大!

TOP

謝謝版主大大。

小弟已收到檔案。
小弟第一次接觸到物件類別模組,
目前還再研究版主大大提供之範例檔。
只感覺其為何能如此神奇呢?


感恩大大:

TOP

        靜思自在 : 受人點水之恩,須當湧泉以報。
返回列表 上一主題