Page 1 of 3
คีย์ตัวเลข 2 หลัก โดยไม่ต้องกด Enter ใน VBA
Posted: Thu Dec 01, 2011 11:38 pm
by wisit
อาจารย์ครับ รบกวนอาจารย์ ช่วยแนะนำวิธีในการคีย์ตัวเลข 0-9 2 หลัก โดยไม่ต้องกด Enter มันจะเลื่อนลงมาข้างล่างโดยอัตโนมัติ สมมุติ ผมคีย์ตัวเลข 12 ใน A1 มันจะเด้งลงมา A2 ให้เราคีย์ค่าตัวเลขต่อไป เมื่อคีย์ตัวเลข 47 ใน A2 มันจะเด้งลงมา A3 เป็นอย่างนี้เรื่อยไปครับอาจารย์
ผมไ้ด้ทดลองเขียนเองบ้าง และให้เพื่อนช่วยเขียน VBA ให้ (เพราะผมเพิ่งเริ่มหัดเขียนครับ) ผมได้ทดลองกับเพื่อนแต่ทำยังไงก็ไม่สามารถทำให้มันเด้งลงข้างล่างได้ ต้องกด Enter รบกวนอาจารย์ช่วยชี้แนะด้วยครับ
Code: Select all
Private Sub Worksheet_Change(ByVal Target As Range)
'MsgBox Len(Target.Text)
'MsgBox Asc(Target.Text)
If Len(Target.Text) > 0 Then
If Asc(Target.Text) < 48 Then
MsgBox "Character invalid"
Cells(Target.Row, 1).Select
Cells(Target.Row, 1).Clear
ElseIf Asc(Target.Text) > 57 Then
MsgBox "Character invalid"
Cells(Target.Row, 1).Select
Cells(Target.Row, 1).Clear
ElseIf Len(Target.Text) = 1 Then
MsgBox "Len Lesthen"
Cells(Target.Row, 1).Select
Cells(Target.Row, 1).Clear
ElseIf Len(Target.Text) > 2 Then
MsgBox "Len More"
Cells(Target.Row, 1).Select
Cells(Target.Row, 1).Clear
ElseIf Target.Column > 1 Then
Cells(Target.Row + 1, 1).Select
End If
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Range("A1").Select
'ActiveCell.FormulaR1C1 = "MyJan"
End Sub
Re: คีย์ตัวเลข 2 หลัก โดยไม่ต้องกด Enter ใน VBA
Posted: Fri Dec 02, 2011 5:49 pm
by snasui

ลองส่งไฟล์ตัวอย่างมาด้วยครับ
Re: คีย์ตัวเลข 2 หลัก โดยไม่ต้องกด Enter ใน VBA
Posted: Sat Dec 03, 2011 5:53 pm
by wisit
อาจารย์ครับ ไฟล์ที่ผมแนบมาคือ คอลัมน์ A จะเป็นรหัสสินค้า ที่เราจะต้องคีย์ โดยคีย์เพียง 2 หลัก โปรแกรมก็จะเด้งลงมาข้างล่าง (โดยไม่ต้องกดเอ็นเตอร์) แต่ปัญหาของผมยังมีอีกปัญหาหนึ่งครับ คือ เมื่อเราจะให้ VBA รัน เราจะต้องก๊อปปี้โค้ิด ในคอลัมน์ C ลงใน VBA โปรแกรมถึงจะทำงาน ซึ่งผมก็ไม่ทราบว่าเป็นเพราะเหตุใด หรือผมทำขั้นตอนอะไรผิดหรือเปล่าไม่ รบกวนอาจารย์ช่วยชี้แนะด้วยครับ
Re: คีย์ตัวเลข 2 หลัก โดยไม่ต้องกด Enter ใน VBA
Posted: Sat Dec 03, 2011 6:52 pm
by snasui

ลองตามนี้ครับ
ในชีท MyJan ให้ยกเลิก Code ไปก่อน จากนั้นนำ Code ด้านล่างไปวางใน Module ปกติ
Code: Select all
Option Explicit
Dim i As Long
Sub KeyEventOn()
For i = 48 To 57
Application.OnKey "{" & i & "}", "'EnterToNextCell """ & i & """'"
Next
End Sub
Sub KeyEventOff()
For i = 47 To 57
Application.OnKey "{" & i & "}"
Next
End Sub
Sub EnterToNextCell(ByVal KeyCode As Long)
Dim strText As String
If Not TypeOf Selection Is Range Then Exit Sub
strText = Selection.Value & Chr(KeyCode)
Selection.Value = strText
If Len(Selection) >= 2 Then
Application.SendKeys "{ENTER}"
End If
End Sub
ก่อนการคีย์ข้อมูลให้เรียกใช้ KeyEventOn ขึ้นมาก่อน โดยเรียกเพียงครั้งเดียว จากนั้นทำการคีย์ข้อมูลตามปกติ ก่อนปิดไฟล์ให้เลือก KeyEventOff ด้วยครับ
Re: คีย์ตัวเลข 2 หลัก โดยไม่ต้องกด Enter ใน VBA
Posted: Sat Dec 03, 2011 8:03 pm
by wisit

ขอบคุณครับอาจารย์ ที่ตอบคำถามข้อสงสัยผมได้รวดเร็วทันใจ เดี๋ยวผมจะลองทำดู ติดขัดยังไงจะรบกวนอาจารย์อีกครับ

Re: คีย์ตัวเลข 2 หลัก โดยไม่ต้องกด Enter ใน VBA
Posted: Sat Dec 03, 2011 8:32 pm
by wisit

อาจารย์ครับ ผมลองทำดูตามขั้นตอนที่อาจารย์บอก แต่คีย์ตัวเลข 2 หลัก เช่น 48 แล้วโปรแกรมมันไม่ยอดเด้งลงข้างล่าง หรือผมทำผิดขั้นตอนหรือเปล่า (เพิ่งเริ่มหัดทำ VBA) รบกวนอาจารย์ช่วยชี้เแนะด้วยครับ ผมได้แนบไฟล์ที่ทำตามที่อาจารย์แนะนำมาด้วยครับ
Re: คีย์ตัวเลข 2 หลัก โดยไม่ต้องกด Enter ใน VBA
Posted: Sat Dec 03, 2011 8:50 pm
by snasui

วาง Code ผิดที่ครับ ลองอ่านทบทวนที่ผมแนะนำอย่างช้า ๆ ครับ
Re: คีย์ตัวเลข 2 หลัก โดยไม่ต้องกด Enter ใน VBA
Posted: Sat Dec 03, 2011 9:49 pm
by bank9597

น่าสนใจมากครับ
Re: คีย์ตัวเลข 2 หลัก โดยไม่ต้องกด Enter ใน VBA
Posted: Sat Dec 03, 2011 9:57 pm
by wisit

ขอบคุณครับอาจารย์ เดี๋ยวผมจะลองอ่านคำแนะนำอีกครั้งครับ

Re: คีย์ตัวเลข 2 หลัก โดยไม่ต้องกด Enter ใน VBA
Posted: Sat Dec 03, 2011 11:35 pm
by wisit

อาจารย์ครับผมลองทำใหม่ โดยเปิดโปรแกรม Excel ใหม่ แล้วก๊อปปี้ โค้ดของอาจารย์ลงใน Module ก่อนการคีย์ข้อมูลผมได้เรียกใช้ KeyEventOn แล้ว แต่เวลาคีย์มันก็ยังไม่เด้งอีกครับ ผมลองทำยังไงก็ไม่ได้ รบกวนอาจารย์ช่วยอธิบายขั้นตอนหน่อยครับ เพราะผมเพิ่งเริ่มหัดเขียน VBA

(ผมได้แนบไฟล์มาให้อาจารย์ช่วยดูอีกครั้งว่าผมวางผิดที่หรือเปล่าครับอาจารย์)
Re: คีย์ตัวเลข 2 หลัก โดยไม่ต้องกด Enter ใน VBA
Posted: Sun Dec 04, 2011 7:18 am
by snasui

ผมทดสอบแล้วไม่มีปัญหาใดครับ
จากไฟล์ที่แนบมา ลองตามนี้ครับ
- เข้าเมนู Tools > Macro > Macro > เลือก KeyEventOn > Run
- ที่ A2 เป็นต้นไปทดสอบคีย์ตัวเลขตามต้องการ (จะคีย์ที่เซลล์ใด ๆ ก็ได้)
Re: คีย์ตัวเลข 2 หลัก โดยไม่ต้องกด Enter ใน VBA
Posted: Sun Dec 04, 2011 11:59 am
by wisit

อาจารย์ครับ ผมลองทำตามดูแต่ก็ไม่ได้ผล หรือว่าโปรแกรม Excel ผมเป็น 2003 จึงอาจทำให้รันแล้วไม่ได้ผล (อันนี้คิดเอาเองครับ) รบกวนอาจารย์อีกรอบครับ

Re: คีย์ตัวเลข 2 หลัก โดยไม่ต้องกด Enter ใน VBA
Posted: Sun Dec 04, 2011 12:14 pm
by snasui

ตามความเห็นล่าสุดที่ผมตอบไปนั้น ผมได้ทดสอบด้วย Excel 2003 สังเกตการอธิบายเมนู Version หลัง ๆ จะมีเมนูไม่เหมือนกับที่อธิบายไป ลองทดสอบกับเครื่องอื่น ส่งให้เพื่อนทดสอบ ฯลฯ ครับ
Re: คีย์ตัวเลข 2 หลัก โดยไม่ต้องกด Enter ใน VBA
Posted: Sun Dec 04, 2011 12:42 pm
by wisit

ขอบคุณครับอาจารย์ ผมจะลองส่งให้เพื่อนทดสอบ หรือไม่ก็จะลองกับเครื่องอื่นแทน (ลืมบอกอาจารย์ว่า เครื่องผมบางครั้งก็มีปัญหา อาจเป็นเพราะสาเหตุนี้ก็เป็นได้) ต้องขอบพระคุณอาจารย์ที่ให้คำชี้แนะ ตอบข้อสงสัย และให้ความรู้แก่ผมเป็นอย่างมาก
Re: คีย์ตัวเลข 2 หลัก โดยไม่ต้องกด Enter ใน VBA
Posted: Sat Dec 17, 2011 10:21 pm
by wisit
อาจารย์ครับถ้าหากเราต้องการจะให้คอล์ลัมน์ C คีย์ตัวเลข 2 หลัก ส่วนคอล์ลัมน์ F ให้คีย์ตัวเลข 3 หลัก ส่วนคอล์ลัมน์อื่น ๆ คีย์ตัวเลขกี่หลักก็ได้ (คิด และปรึกษาเพื่อนแต่ไม่มีใครรู้เลย เพื่อนก็เพิ่งศึกษา VBA เหมือนผมเช่นกัน)
Re: คีย์ตัวเลข 2 หลัก โดยไม่ต้องกด Enter ใน VBA
Posted: Sat Dec 17, 2011 11:39 pm
by snasui

ที่ถามมานั้นใช้ Validation ทำได้ ไม่ต้องใช้ VBA ครับ
Re: คีย์ตัวเลข 2 หลัก โดยไม่ต้องกด Enter ใน VBA
Posted: Sun Dec 18, 2011 7:45 pm
by wisit
อาจารย์ครับต้องขอโทษอาจารย์ด้วยครับ ที่ผมลืมกล่าวนำ เนื่องจากการเขียน VBA ที่อาจารย์แนะนำมานั้น มันจะคลอบคลุมทุกคอล์ลัมน์ ผมต้องการให้คอล์ลัมน์ C คีย์ตัวเลข 2 หลัก ส่วนคอล์ลัมน์ F ให้คีย์ตัวเลข 3 หลัก ส่วนคอล์ลัมน์อื่น ๆ คีย์ตัวเลขกี่หลักก็ได้ ซึ่งโค้ดที่อาจารย์เขียนให้ดังนี้ครับ
Code: Select all
Option Explicit
Dim i As Long
Sub KeyEventOn()
For i = 48 To 57
Application.OnKey "{" & i & "}", "'EnterToNextCell """ & i & """'"
Next
End Sub
Sub KeyEventOff()
For i = 47 To 57
Application.OnKey "{" & i & "}"
Next
End Sub
Sub EnterToNextCell(ByVal KeyCode As Long)
Dim strText As String
If Not TypeOf Selection Is Range Then Exit Sub
strText = Selection.Value & Chr(KeyCode)
Selection.Value = strText
If Len(Selection) >= 2 Then
Application.SendKeys "{ENTER}"
End If
End Sub
Re: คีย์ตัวเลข 2 หลัก โดยไม่ต้องกด Enter ใน VBA
Posted: Sun Dec 18, 2011 10:30 pm
by snasui

ลองปรับ Code มาก่อนครับ ติดตรงไหนค่อยมาดูกันต่อ สำหรับ Code ที่ส่งมาเป็น Code เดิมที่เคยเขียนให้ไป ยังไม่มีการปรับใด ๆ ครับ
Re: คีย์ตัวเลข 2 หลัก โดยไม่ต้องกด Enter ใน VBA
Posted: Thu Dec 22, 2011 10:38 pm
by wisit
อาจารย์ครับผมได้ทำการกำหนดโค้ดคอลัมน์แล้วครับ ลองเทสท์ดูก็ใช้ได้ครับ แต่ดูวันยาว ๆ ยังไงไม่รู้ครับ ให้เพื่อนช่วยปรับให้สั้นกว่านี้ แต่เพื่อนบอกว่าทำไม่ได้เช่นกัน และรบกวนอาจารย์ในปัญหาเดิม ๆ ครับ เรื่องการคีย์โดยใช้แป้นพิมพ์ตัวเลข (ใช้แป้นพิมพ์นี้ คำสั่งใน VBA จะไม่ทำงาน) แต่ถ้าใช้แป้นพิมพ์ตัวเลขที่ใกล้ฟังก์ชั่น (คำสั่งใน VBA จะทำงาน) ซึ่งผมอยากใช้แป้นพิมพ์ตัวเลขมากกว่าและพอดีปรึกษากับเพื่อน เขาบอกว่าที่คีย์ในแป้นพิมพ์ตัวเลขไม่ได้เพราะคำสั่ง Chr(KeyCode) แต่เพื่อนบอกถ้าไม่ใช้คำสั่งนี้ก็ไม่รู้จะใช้คำสั่งไหนแล้ว และที่อาจารย์แนะนำให้สร้างฟอร์ม เพื่อนบอกว่าจะต้องเขียนโค้ดเพิ่ม ซึ่งผมก็ไม่ค่อยจะมีความรู้ในเรื่องนี้ซักเท่าไหร่ครับ รบกวนอาจารย์ช่วยแนะนำด้วยครับ

(ผมได้แนบไฟล์ตัวอย่างมาด้วยครับ) ส่วนโค้ดที่ทำดังนี้ครับ
Code: Select all
Option Explicit
Dim i As Long
Sub KeyEventOn()
For i = 48 To 57
Application.OnKey "{" & i & "}", "'EnterToNextCell """ & i & """'"
Next
End Sub
Sub KeyEventOff()
For i = 47 To 57
Application.OnKey "{" & i & "}"
Next
End Sub
Sub EnterToNextCell(ByVal KeyCode As Long)
Dim strText As String
If Not TypeOf Selection Is Range Then Exit Sub
strText = Selection.Value & Chr(KeyCode)
Selection.Value = strText
'MsgBox Chr(KeyCode) & Selection.Value
Select Case (Selection.Column)
Case 1
'MsgBox "1"
If Len(Selection) >= 2 Then
Application.SendKeys "{ENTER}"
End If
Case 2, 6
'MsgBox "2"
If Len(Selection) >= 3 Then
Application.SendKeys "{ENTER}"
End If
Case 3
'MsgBox "3"
If Len(Selection) >= 2 Then
Application.SendKeys "{ENTER}"
End If
Case 4
'MsgBox "4"
If Len(Selection) >= 3 Then
Application.SendKeys "{ENTER}"
End If
Case 5
'MsgBox "5"
If Len(Selection) >= 4 Then
Application.SendKeys "{ENTER}"
End If
Case Else
If Len(Selection) >= 2 Then
Application.SendKeys "{ENTER}"
End If
End Select
'If Len(Selection) >= 2 Then
' Application.SendKeys "{ENTER}"
'End If
End Sub
Re: คีย์ตัวเลข 2 หลัก โดยไม่ต้องกด Enter ใน VBA
Posted: Fri Dec 23, 2011 6:49 pm
by snasui
wisit wrote:อาจารย์ครับถ้าหากเราต้องการจะให้คอล์ลัมน์ C คีย์ตัวเลข 2 หลัก ส่วนคอล์ลัมน์ F ให้คีย์ตัวเลข 3 หลัก ส่วนคอล์ลัมน์อื่น ๆ คีย์ตัวเลขกี่หลักก็ได้ (คิด และปรึกษาเพื่อนแต่ไม่มีใครรู้เลย เพื่อนก็เพิ่งศึกษา VBA เหมือนผมเช่นกัน)
จากด้านบน สามารถปรับ Code เป็นตามด้านล่างครับ
Code: Select all
Option Explicit
Dim i As Long
Sub KeyEventOn()
For i = 48 To 57
Application.OnKey "{" & i & "}", "'EnterToNextCell """ & i & """'"
Next
End Sub
Sub KeyEventOff()
For i = 47 To 57
Application.OnKey "{" & i & "}"
Next
End Sub
Sub EnterToNextCell(ByVal KeyCode As Long)
Dim strText As String
If Not TypeOf Selection Is Range Then Exit Sub
strText = Selection.Value & Chr(KeyCode)
Selection.Value = strText
Select Case Selection.Column
Case 3
'MsgBox "2"
If Len(Selection) >= 2 Then
Application.SendKeys "{ENTER}"
End If
Case 6
'MsgBox "5"
If Len(Selection) >= 3 Then
Application.SendKeys "{ENTER}"
End If
End Select
End Sub
สำหรับการคีย์ตัวเลขด้วย Keypad ให้ช่วยเก็บ Character code โดยคลิกปุ่ม Button1 แล้วใช้แป้น Keypad คีย์ตัวเลขแต่ละตัว และดู Message Box ว่าแสดงค่า Character code เป็นเลขใด แจ้งมาในฟอรัมอีกรอบครับ
สำหรับการวาง Code VBA ให้เป็น Code จะได้ดูง่าย ๆ ลองดูจากกระทู้นี้ครับ
viewtopic.php?f=6&t=1187 และ
viewtopic.php?f=3&t=1354