Page 1 of 1

การใช้คำสั่ง Worksheet_Change

Posted: Thu Jun 22, 2023 10:05 am
by nettory
ผมต้องการเซลล์ที่ใช้คำสั่ง "Worksheet_Change" ระบุไว้ เมื่อรับค่าจากเซลล์อื่นมาแล้วให้เรียกมาโครขึ้นมาทำงานครับ..
ถ้าเป็นการใส่ข้อมูลไปที่เซลล์ตรงๆ สามารถทำงานได้ปกติครับ..
แต่ถ้ารับค่าจากเซลล์อื่นมาจะไม่ได้ เช่น เซลล์ "B6" ใช้สูตร "=$B$3" เพื่อรับค่าจาก "B3" แบบนั้นจะไม่ได้เหมือนเราใส่ค่าตรงๆ ที่เซลล์ครับ..
มีวิธีทำแบบนั้้้นไหมครับให้มีผลแอคชั่นเหมือนเราใส่ข้อมมูลหรือคลิ๊กหรือเอ็นตอร์..

รบกวนและขอบคุณครับ

Re: การใช้คำสั่ง Worksheet_Change

Posted: Thu Jun 22, 2023 10:25 am
by snasui
:D เปลี่ยนจาก B6 เป็น B3 แทนครับ

จะได้เป็น If Target.Address = "$B$3" Then

Re: การใช้คำสั่ง Worksheet_Change

Posted: Thu Jun 22, 2023 10:31 am
by nettory
snasui wrote: Thu Jun 22, 2023 10:25 am :D เปลี่ยนจาก B6 เป็น B3 แทนครับ

จะได้เป็น If Target.Address = "$B$3" Then
ยังไม่ได้ครับอาจารย์..
ผมเปลี่ยนแล้วจาก B6 เป็น B3 แล้วครับ..

Re: การใช้คำสั่ง Worksheet_Change

Posted: Thu Jun 22, 2023 3:10 pm
by snasui
:D ทุกครั้งที่มีการคีย์ค่าใน B3 โปรแกรมจะต้องทำงานที่ Change Event ถ้าเปลี่ยนแล้วไม่ได้แสดงว่าต้องไป EnableEvent ใหม่ครับ

วิธีการคือ เข้า VBE (Visual Basic Editor) โดยกดแป้น Alt+F11 > กดแป้น Ctrl+G เพื่อเปิดหน้าต่าง Immediate Windows > คีย์ Statement application.EnableEvents = true > Enter

จากนั้นทดสอบเปลี่ยนค่าใน B3 ใหม่ หากยังไม่ได้อีกแสดงว่าโปรแกรม Excel มีปัญหาไม่สามารถดักจัด Event ได้ครับ

Re: การใช้คำสั่ง Worksheet_Change

Posted: Fri Jun 23, 2023 8:56 am
by nettory
snasui wrote: Thu Jun 22, 2023 3:10 pm :D ทุกครั้งที่มีการคีย์ค่าใน B3 โปรแกรมจะต้องทำงานที่ Change Event ถ้าเปลี่ยนแล้วไม่ได้แสดงว่าต้องไป EnableEvent ใหม่ครับ

วิธีการคือ เข้า VBE (Visual Basic Editor) โดยกดแป้น Alt+F11 > กดแป้น Ctrl+G เพื่อเปิดหน้าต่าง Immediate Windows > คีย์ Statement application.EnableEvents = true > Enter

จากนั้นทดสอบเปลี่ยนค่าใน B3 ใหม่ หากยังไม่ได้อีกแสดงว่าโปรแกรม Excel มีปัญหาไม่สามารถดักจัด Event ได้ครับ
ถ้าเราคีย์ลงไปตรงๆ B3 สามารถเรียกมาโครได้ปกติครับ..
แต่ถ้าไม่ต้องการคัย์ลงไปตรงๆ ที่ B3 แล้วใส่สูตที่ B3 เป็น =A3 แล้วเราคีย์ข้อมูล A3 ตัว B3 จะมีค่าเเหมือน A3 แต่แบบนี้ไม่สามารถเรียกมาโครได้ครับ เหมือนการทำงานมันต้องแอดชั่นที่เซลล์ตรงๆ แบบกดเอนเตอร์หรือกดคลิ๊กที่เซลล์นั้นๆ ถึงค่าจะเปลี่ยนใน B3 แต่ไม่ได้มีแอคชั่นกับเเซลล์มันจะไม่ทำงานน่ะครับ..

Re: การใช้คำสั่ง Worksheet_Change

Posted: Fri Jun 23, 2023 11:50 am
by snasui
:D เราจะใช้การดักจับที่ A3 แทนครับ

คีย์ที่เซลล์ไหนก็ต้องดักจับที่เซลล์นั้นถึงจะเรียกว่า Change Event เราไม่มีการดักจับค่าที่ Link มาจากเซลล์อื่น ใช้การดักที่ต้นทางเท่านั้น ไม่เช่นนั้นต้องใช้วิธีอื่นแทนครับ

Re: การใช้คำสั่ง Worksheet_Change

Posted: Fri Jun 23, 2023 12:55 pm
by nettory
snasui wrote: Fri Jun 23, 2023 11:50 am :D เราจะใช้การดักจับที่ A3 แทนครับ

คีย์ที่เซลล์ไหนก็ต้องดักจับที่เซลล์นั้นถึงจะเรียกว่า Change Event เราไม่มีการดักจับค่าที่ Link มาจากเซลล์อื่น ใช้การดักที่ต้นทางเท่านั้น ไม่เช่นนั้นต้องใช้วิธีอื่นแทนครับ
อาจารย์พอจะแนะนำแนวทางอื่นได้ไหมครับ เพราะผมจะให้ส่งไลน์แจ้งเวลาที่ api อัพเดตครับ ช่องที่กำหนดผมใช้การรับค่าจาก api มันเปลี่ยนแปลงเสมอแต่ไม่ได้คีย์ข้อมูลลงไปตรงๆ ไม่มีแอคชั่นครับ

Re: การใช้คำสั่ง Worksheet_Change

Posted: Fri Jun 23, 2023 1:01 pm
by snasui
:D ลองใช้ Calculate Event ดูครับ ==> https://learn.microsoft.com/en-us/offic ... %28even%29

Re: การใช้คำสั่ง Worksheet_Change

Posted: Fri Jun 23, 2023 1:55 pm
by nettory
snasui wrote: Fri Jun 23, 2023 1:01 pm :D ลองใช้ Calculate Event ดูครับ ==> https://learn.microsoft.com/en-us/offic ... %28even%29
อันนี้ลองแล้วมันเรียกการทำงานทุกอย่างเลยครับ มันดีนะ แต่มันระบุเจาะจงเซลล์ไม่ได้ครับ

Re: การใช้คำสั่ง Worksheet_Change

Posted: Fri Jun 23, 2023 3:22 pm
by snasui
:D ต้องใช้การประยุกต์เข้าไปช่วย โดยเก็บค่าคงที่ของเซลล์ปลายทาง (เซลล์ที่ Link มาจากต้นทางอีกทอด) สมมุติว่าเป็นเซลล์ B3 เอาไว้ที่เซลล์ใดเซลล์หนึ่ง เช่น D1 โดยภายใน Calculate Event ให้ตรวจสอบว่า ค่าหลังจาก Calculate แล้วค่าใน B3 เท่ากับค่าคงที่ใน D1 หรือไม่ ถ้าไม่เท่าต้องทำ 2 อย่าง คือ
  1. รันคำสั่งที่่ต้องการ
  2. เก็บค่าเซลล์ปลายทางไปวางไว้ที่เซลล์ D1
ถ้าเท่าก็ไม่ต้องรันคำสั่ง เช่นนี้เป็นต้นครับ