Page 1 of 1

การเปลี่ยนสีของ Textbox ทุก ๆอันเมื่อมีการ Input ข้อมูล

Posted: Tue Sep 24, 2013 2:48 pm
by phatpiti.s
สวัสดีครับผมมีความต้องการที่จะเปลี่ยนสีของ TextBox ทุก ๆ TextBox ใน UserForm เมื่อมีการ Input ข้อมูลลงไป
TextBox มีอยู่ทั้งหมด 80 TextBox ชื่อ TextBox1,TextBox2,.....,TextBox80

ปกติผมใช้คำสั่งให้เปลี่ยนสีเมื่อมี KeyPress Event โดยกำหนดให้ทุก ๆ TextBox ดัง Code ด้านล่างครับ
แต่ปัญหาคือถ้ามี TextBox มาก ๆ จะต้องมาใส่คำสั่งแบบนี้ทุก TextBox ก็ดูจะยุ่งยากและมากเกินไป
ไม่ทราบว่ามีวิธีใดบ้างจะทำให้ทุก ๆ TextBox รับคำสั่งนี้ตั้งแต่ TextBox1 ถึง TextBox80 เหมือนกันครับ ?

Code: Select all

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Me.TextBox1.BackColor = &HFF00& 
Me.TextBox1.ForeColor = &HFF0000 
Me.TextBox1.MaxLength = 4
Select Case KeyAscii
Case 48 To 57 
Case Else        
KeyAscii = 0 
End Select
End Sub
ขอบคุณมากครับ

Re: การเปลี่ยนสีของ Textbox ทุก ๆอันเมื่อมีการ Input ข้อมูล

Posted: Tue Sep 24, 2013 3:53 pm
by snasui
:D ลองตามตัวอย่างด้านล่างครับ

ที่ UserForm

Code: Select all

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Call ChangeTextBox(Me.TextBox1)
End Sub
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Call ChangeTextBox(Me.TextBox2)
End Sub
'Other code
ที่ Module ปกติ

Code: Select all

Sub ChangeTextBox(s As Object)
    s.BackColor = &HFF00&
    s.ForeColor = &HFF0000
    s.MaxLength = 4
    Select Case KeyAscii
        Case 48 To 57
    Case Else
        KeyAscii = 0
    End Select
End Sub

Re: การเปลี่ยนสีของ Textbox ทุก ๆอันเมื่อมีการ Input ข้อมูล

Posted: Tue Sep 24, 2013 4:09 pm
by phatpiti.s
ขอบคุณครับ

แต่มีปัญหาทำไมเวลาใช้คำสั่ง Call ChangeTextBox
แล้วมันขึ้น Compile Error ตรง KeyAscii ว่า Variable not difined ครับ
งงๆ ว่ามันเกิดอะไรขึ้นครับ ?

Re: การเปลี่ยนสีของ Textbox ทุก ๆอันเมื่อมีการ Input ข้อมูล

Posted: Tue Sep 24, 2013 4:31 pm
by snasui
:D เดาว่ามีการกำหนดเป็น Option Explicit เอาไว้ซึ่งระบบจะบังคับให้ประกาศตัวแปร

ลองปรับ Code เป็นตามด้านล่างครับ

ที่ UserForm

Code: Select all

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Call ChangeTextBox(Me.TextBox1, KeyAscii)
End Sub
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Call ChangeTextBox(Me.TextBox2, KeyAscii)
End Sub
'Other code
ที่ Module ปกติ

Code: Select all

Option Explicit

Sub ChangeTextBox(s As Object, k As Variant)
    s.BackColor = &HFF00&
    s.ForeColor = &HFF0000
    s.MaxLength = 4
    Select Case k
        Case 48 To 57
        Case Else
            k = 0
    End Select
End Sub