Page 1 of 1

เราสามารถกำหนด Textbox1 ให้เปลี่ยนภาษาเองได้หรือไม่ครับ

Posted: Fri Nov 04, 2016 3:09 pm
by akranan
สวัสดีครับ

เราสามารถกำหนดภาษาให้ช่อง Textbox ที่อยู่ใน Form ได้หรือไม่ครับ

เช่น Textbox1 ให้เป็นภาษาไทย พอกด Enter มาที่ Textbox2 ให้เปลี่ยนเป็นภาษาอังกฤษโดยอัตโนมัติครับ

ขอบคุณมากครับ

Re: เราสามารถกำหนด Textbox1 ให้เปลี่ยนภาษาเองได้หรือไม่ครับ

Posted: Fri Nov 04, 2016 7:41 pm
by kio2002
คุณ akranan อ่านกฏข้อ5ด้วยนะครับ

5. สำหรับคำถามเกี่ยวกับ VBA ให้ลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน ควรโพสต์ Code ให้แสดงเป็น Code เพื่อสะดวกในการอ่านและทดสอบ

Re: เราสามารถกำหนด Textbox1 ให้เปลี่ยนภาษาเองได้หรือไม่ครับ

Posted: Mon Nov 07, 2016 5:11 pm
by akranan
ตัวอย่างตามไฟล์แนบครับ

ใน Textbox2 เลือกไปที่ ช่อง A1 เพื่อให้เปลี่ยนเป็นภาษาไทยแล้วแต่ใน Form กรอกข้อมูลไม่ยอมเปลี่ยนภาษา Thai ให้
ใน Textbox3 เลือกไปที่ ช่อง ฺB1 เพื่อให้เปลี่ยนเป็นภาษา Eng แล้วแต่ใน Form กรอกข้อมูลไม่ยอมเปลี่ยนภาษา Eng ให้

ไม่ทราบว่าใส่ตรงไหนผิดครับ

Re: เราสามารถกำหนด Textbox1 ให้เปลี่ยนภาษาเองได้หรือไม่ครับ

Posted: Mon Nov 07, 2016 7:12 pm
by snasui
:D ตัวอย่าง Code ตามด้านล่างครับ

Code: Select all

#If VBA7 Then
Private Declare Function ActivateKeyboardLayout Lib _
    "user32.dll" (ByVal myLanguage As Long, Flag As Boolean) As Long
#Else
Private Declare PtrSafe Function ActivateKeyboardLayout Lib _
    "user32.dll" (ByVal myLanguage As Long, Flag As Boolean) As Long
#End If

'define your desired keyboardlanguage
'find your desired language at https://technet.microsoft.com/en-us/library/dd744319(v=ws.10).aspx

Private Const THA = 1054 'thai keyboard language layout
Private Const ENG = 1033 'english(united states)keyboard language layout

Sub Set_Keyb_Thai()
    Call ActivateKeyboardLayout(THA, 0)
End Sub

Sub Set_Keyb_Eng()
    Call ActivateKeyboardLayout(ENG, 0)
End Sub

Re: เราสามารถกำหนด Textbox1 ให้เปลี่ยนภาษาเองได้หรือไม่ครับ

Posted: Mon Nov 07, 2016 8:47 pm
by akranan
code ด้านล่าง ตรง TextBox2.text << ใส่แบบนี้หรือไม่ครับ

ต้องการให้ TextBox2 กำหนดเป็นภาษาไทย

Code: Select all

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Not Application.Intersect(TextBox2.text, Target) Is Nothing Then Set_Keyb_Thai
If Not Application.Intersect(TextBox3.text, Target) Is Nothing Then Set_Keyb_Eng
End Sub

Re: เราสามารถกำหนด Textbox1 ให้เปลี่ยนภาษาเองได้หรือไม่ครับ

Posted: Mon Nov 07, 2016 8:53 pm
by snasui
:D สำหรับที่เขียนมานั้นเป็นการกำหนดเมื่อเปลี่ยนการเลือกเซลล์ตามค่าใน TextBox หากเป็นเช่นนั้นแสดงว่าค่าใน TextBox ต้องเปลี่ยนก่อนจึงจะเปลี่ยนภาษา ไม่ทราบว่าตรงกับความต้องการหรือไม่ อย่างไร และที่เขียนไว้เช่นนั้นเกิดปัญหาใดครับ

หากไม่ตรงกับความต้องการ ให้แจ้งมาด้วยว่าตั้งใจจะกำหนดให้เปลี่ยนภาษาเมื่อเกิดเหตุการณ์ใดครับ

Re: เราสามารถกำหนด Textbox1 ให้เปลี่ยนภาษาเองได้หรือไม่ครับ

Posted: Mon Nov 07, 2016 9:31 pm
by akranan
ที่เขียนไว้นั้น ครั้งแรกขึ้น error หลังจากนั้นก็ไม่เกิดอะไรขึ้นครับและไม่สามารถเปลี่ยนภาษาได้ตามต้องการ

อยากจะกำหนดเหตุการณ์ดังนี้ครับ
1. เปลี่ยนภาษาไทยเมื่อคอเซอร์กระพริบ ที่ TextBox2 (ชื่อผู้รับสินค้า)
2. เปลี่ยนภาษาอังกฤษเมื่อคอเซอร์กระพริบ ที่ TextBox3 (ชื่อพนักงานจัดสินค้า) เนื่องจากต้องการยิง Barcode ลงในช่องนี้ครับ ถ้าเป็นภาษาไทย Code จะไม่เข้าครับ

ขอบคุณมากครับ

Re: เราสามารถกำหนด Textbox1 ให้เปลี่ยนภาษาเองได้หรือไม่ครับ

Posted: Mon Nov 07, 2016 9:45 pm
by snasui
:D ตัวอย่างตามด้านล่างจะเปลียนภาษาเมื่อคลิกลงในช่อง TextBox ครับ

Code: Select all

Private Sub TextBox2_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    Call Set_Keyb_Thai
End Sub

Private Sub TextBox3_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    Call Set_Keyb_Eng
End Sub

Re: เราสามารถกำหนด Textbox1 ให้เปลี่ยนภาษาเองได้หรือไม่ครับ

Posted: Tue Nov 08, 2016 1:46 pm
by akranan
ขอบคุณมากครับ ตอนแรกติดปัญหาไม่ได้ใช้ mouse คลิกใช้ปุ่ม Enter แทนเลยเปลี่ยนมาใช้ Keydown ครับ

แต่ติดปัญหาตรงที่เมื่อเปิด Form ขึ้นมาจะต้องกดลูกษรลงและขึ้นไปช่องเดิมเพื่อให้ code นี้ทำงาน ถ้าจะตั้งให้ code นี้ทำงานเลยเมื่อคลิกมาที่ form นี้ ต้องเพิ่มคำสั่งอย่างไรครับ

ตอนนี้ได้ครบทุกความต้องการแล้วครับโดยใช้ code ด้านล่างนี้ครับ

Code: Select all

Private Sub UserForm_Initialize()
    TextBox2.SetFocus
    Call Set_Keyb_Thai
End Sub

Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    Call Set_Keyb_Thai
End Sub

Private Sub TextBox3_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    Call Set_Keyb_Eng
End Sub

Private Sub TextBox2_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    Call Set_Keyb_Thai
End Sub

Private Sub TextBox3_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    Call Set_Keyb_Eng
End Sub
ขอบคุณมากครับๆ