สมัครสมาชิก
 

มีคำสั่งไหนแทน Sendkey {Enter} ได้บ้าง



0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

26 ก.ย. 62 , 18:46:44
อ่าน 157 ครั้ง

Un

มีคำสั่งไหนแทน Sendkey {Enter} ได้บ้างครับ

 
โพสต์นี้ได้รับคำขอบคุณจาก: TIM_cb

26 ก.ย. 62 , 21:48:18
ตอบกลับ #1

สันติสุข

: มีคำสั่งไหนแทน Sendkey {Enter} ได้บ้าง
« ตอบกลับ #1 เมื่อ: 26 ก.ย. 62 , 21:48:18 »
จะทำอะไรเหรอครับ   แล้ว Sendkeys ไม่ตอบโจทย์ยังไง
ช่วยพกถุงผ้า/ถุงพลาสติกไปซื้อของเพื่อลดการใช้พลาสติก ขยะ รักษาสิ่งแวดล้อม และไม่ให้ภาวะโลกร้อนวิกฤติเร็วขึ้นกว่านี้
ช่วยคลิกโฆษณาข้างล่างนี้ เพื่อสนับสนุนเวปบอร์ดด้วยครับ
:nice day:
 
โพสต์นี้ได้รับคำขอบคุณจาก: Un

27 ก.ย. 62 , 09:06:41
ตอบกลับ #2

Un

: มีคำสั่งไหนแทน Sendkey {Enter} ได้บ้าง
« ตอบกลับ #2 เมื่อ: 27 ก.ย. 62 , 09:06:41 »
จะทำอะไรเหรอครับ   แล้ว Sendkeys ไม่ตอบโจทย์ยังไง
ปัญหาเดิมครับอาจารย์ มันกด Numlock เอง

ผมไป Copy ฟอร์มของกระทู้
https://www.thai-access.com/index.php?topic=935.msg4116#new
(พิกัด ละติจูด-ลองติจูดผูกกับฐานข้อมูล ms access กับ google map ใครพอมีตัวอย่าง)

แล้วเอามาแก้ไข ให้พอเลือกบ้านที่ผมมีพิกัดอยู่แล้วให้มันขึ้นแผนที่เลย
ไม่ต้องมากดปุ่มค้นหาอีก ตอนแรกผมก็ลองใช้คำสัง Call ไปที่ On Click ของปุ่มนี้
มันก็ขึ้น Error ลอง Copy คำสังมาต่อใน Code มันก็ขึ้น Error อีก เลยใช้คำสั่ง
ให้ไป Setfocus ที่ปุ่ม แล้ว Sendkey {Enter} มันใช้ได้ดีเลยครับ ติดที่มันสั่ง
 Numlock


 

27 ก.ย. 62 , 11:23:10
ตอบกลับ #3

chai

: มีคำสั่งไหนแทน Sendkey {Enter} ได้บ้าง
« ตอบกลับ #3 เมื่อ: 27 ก.ย. 62 , 11:23:10 »
ลองแบบนี้ดูนะครับ
1.สร้าง Subprocedure ให้ทำงานตามต้องการ
2.สร้าง Function() เรียกการทำงาน Call Subprocedure
3.สร้าง Macro เรียกการทำงานของ Function (ก่อนเรียก Function ให้ GotoControl เพื่อไป Focus)
4.ที่ Event On_Focus ของ Control เรียกการทำงานของ Macro (Docmd.RunMacro)
คือพยายามเลี่ยง SendKeys ผมเคยลองใช้วิธีนี้ได้ผลครับ มันไม่กด Numlock
หรือถ้ามีวิธีอื่น รอท่านอื่นๆมาตอบครับ

 
โพสต์นี้ได้รับคำขอบคุณจาก: Un

27 ก.ย. 62 , 11:54:51
ตอบกลับ #4

สันติสุข

: มีคำสั่งไหนแทน Sendkey {Enter} ได้บ้าง
« ตอบกลับ #4 เมื่อ: 27 ก.ย. 62 , 11:54:51 »
หาว่า error เพราะอะไรและแก้ไขที่จุดนั้น จะเป็นสิ่งที่ถูกกว่าเลี่ยงมาใช้ Sendkeys ครับ  ส่วนอาการ NumLock เท่าที่เคยได้ยิน เป็นบักของ VBA ครับ แก้ไขไม่ได้ แต่สั่ง Sendkeys "{NUMLOCK}", True ไปอีกทีเพื่อให้กลับสถานะเดิมพอจะกล้อมแกล้มไปได้ แต่ได้ผล 100% ไหม อันนี้ไม่ทราบครับ
ช่วยพกถุงผ้า/ถุงพลาสติกไปซื้อของเพื่อลดการใช้พลาสติก ขยะ รักษาสิ่งแวดล้อม และไม่ให้ภาวะโลกร้อนวิกฤติเร็วขึ้นกว่านี้
ช่วยคลิกโฆษณาข้างล่างนี้ เพื่อสนับสนุนเวปบอร์ดด้วยครับ
:nice day:
 
โพสต์นี้ได้รับคำขอบคุณจาก: Un

27 ก.ย. 62 , 13:19:41
ตอบกลับ #5

PNR

: มีคำสั่งไหนแทน Sendkey {Enter} ได้บ้าง
« ตอบกลับ #5 เมื่อ: 27 ก.ย. 62 , 13:19:41 »
อ้างถึง
เลยใช้คำสั่ง
ให้ไป Setfocus ที่ปุ่ม แล้ว Sendkey {Enter} มันใช้ได้ดีเลยครับ ติดที่มันสั่ง
 Numlock

ใช้ Event  Enter ของปุ่มช่วยก็ได้ครับเช่น
สมมุติปุ่มชื่อ ShowMap
Private Sub ShowMap_Enter()
คำสั่งแสดงแผนที หรือคำสั่งที่ต้องการ
End Sub

ที่ปุ่มที่ต้องการกดก็สั่ง

Private Sub Command1_Click()
Call ShowMap_Enter
End Sub

ถ้าจะทำเงื่อนไขต่อไปเลยแบบไม่ต้องกดปุ่มอื่นๆ ก็ใช้
Call ShowMap_Enter
ได้เลยซึ่งเป็นการประยุกต์ใช้คำสั่งแทนการกด Enter เองได้เลย แบบนี้ทำให้ SendKey ไม่ต้องใช้อีก และไม่ต้องสั่ง setfocus ด้วย
หรือถ้าท่านสั่ง Setfocus ปุ่มShowMap      Event Enter ก็จะทำงานทันทีเช่นกันคับ โดยไม่ต้อง Call อีก
« แก้ไขครั้งสุดท้าย: 27 ก.ย. 62 , 13:34:28 โดย PNR »
:meaw: :grin: :shout:
 
โพสต์นี้ได้รับคำขอบคุณจาก: Un, prajak

27 ก.ย. 62 , 13:45:56
ตอบกลับ #6

Un

: มีคำสั่งไหนแทน Sendkey {Enter} ได้บ้าง
« ตอบกลับ #6 เมื่อ: 27 ก.ย. 62 , 13:45:56 »
ลองแบบนี้ดูนะครับ
1.สร้าง Subprocedure ให้ทำงานตามต้องการ
2.สร้าง Function() เรียกการทำงาน Call Subprocedure
3.สร้าง Macro เรียกการทำงานของ Function (ก่อนเรียก Function ให้ GotoControl เพื่อไป Focus)
4.ที่ Event On_Focus ของ Control เรียกการทำงานของ Macro (Docmd.RunMacro)
คือพยายามเลี่ยง SendKeys ผมเคยลองใช้วิธีนี้ได้ผลครับ มันไม่กด Numlock
หรือถ้ามีวิธีอื่น รอท่านอื่นๆมาตอบครับ
คือผม Copy Forms เค้ามาอะครับ แล้ววิธีการก็ อ่านแล้วไม่เข้าใจ
จะเอามาปรับแบบที่ อาจารย์ แนะนำ เลยทำไม่ได้ครับ
ขอบพระคุณครับ ที่มาช่วยตอบ


ใช้ Event  Enter ของปุ่มช่วยก็ได้ครับเช่น
สมมุติปุ่มชื่อ ShowMap
Private Sub ShowMap_Enter()
คำสั่งแสดงแผนที หรือคำสั่งที่ต้องการ
End Sub

ที่ปุ่มที่ต้องการกดก็สั่ง

Private Sub Command1_Click()
Call ShowMap_Enter
End Sub

ถ้าจะทำเงื่อนไขต่อไปเลยแบบไม่ต้องกดปุ่มอื่นๆ ก็ใช้
Call ShowMap_Enter
ได้เลยซึ่งเป็นการประยุกต์ใช้คำสั่งแทนการกด Enter เองได้เลย แบบนี้ทำให้ SendKey ไม่ต้องใช้อีก และไม่ต้องสั่ง setfocus ด้วย
หรือถ้าท่านสั่ง Setfocus ปุ่มShowMap      Event Enter ก็จะทำงานทันทีเช่นกันคับ โดยไม่ต้อง Call อีก
ลองแล้ว ผลออกมาเช่น เดียวกับ การ Call ไปที่ On Click ครับ
ขอบพระคุณครับ ที่มาช่วยตอบ

หาว่า error เพราะอะไรและแก้ไขที่จุดนั้น จะเป็นสิ่งที่ถูกกว่าเลี่ยงมาใช้ Sendkeys ครับ  ส่วนอาการ NumLock เท่าที่เคยได้ยิน เป็นบักของ VBA ครับ แก้ไขไม่ได้ แต่สั่ง Sendkeys "{NUMLOCK}", True ไปอีกทีเพื่อให้กลับสถานะเดิมพอจะกล้อมแกล้มไปได้ แต่ได้ผล 100% ไหม อันนี้ไม่ทราบครับ

วิธีการที่เค้าใช้ผมไม่มีความรู้เลยครับ เลยไม่สามารถ แก้ Error ตามที่อาจารย์แนะนำ
สุดท้าย ผมเอา Sendkeys "{NUMLOCK}", True  ไปต่อท้าย ง่ายสุดแล้วครับ
ขอบพระคุณครับอาจารย์

 

27 ก.ย. 62 , 19:21:58
ตอบกลับ #7

TTT

: มีคำสั่งไหนแทน Sendkey {Enter} ได้บ้าง
« ตอบกลับ #7 เมื่อ: 27 ก.ย. 62 , 19:21:58 »
ลองคำสั่งแบบ API ดูไม๊ครับ เผื่อช่วยได้

Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

การใช้งานแทน Sendkey

    keybd_event &HD, 0, 0, 0
    keybd_event &HD, 0, &H2, 0

จะเป็นการส่งคีย์ ENTER
ฐานข้อมูลเป็นเรื่องใกล้ตัว ใครๆก็ทำฐานข้อมูลเองได้นะครับhttp://www.youtube.com/c/AccessCreator link
 
โพสต์นี้ได้รับคำขอบคุณจาก: Un

28 ก.ย. 62 , 08:41:05
ตอบกลับ #8

Un

: มีคำสั่งไหนแทน Sendkey {Enter} ได้บ้าง
« ตอบกลับ #8 เมื่อ: 28 ก.ย. 62 , 08:41:05 »
ลองคำสั่งแบบ API ดูไม๊ครับ เผื่อช่วยได้

Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

การใช้งานแทน Sendkey

    keybd_event &HD, 0, 0, 0
    keybd_event &HD, 0, &H2, 0

จะเป็นการส่งคีย์ ENTER
ขอบคุณครับอาจารย์ เดี๋ยวขะลองทำดูครับ
นี่ยังไม่ว่าทำ แจ้งเตือนในไลน์ กับลูกศรวิ่งได้
ของอาจารย์เลยครับ ><

 


บอร์ดเรียนรู้ Access สำหรับคนไทย