บันทึกเวลาแก้ไขอัตโนมัติ เมื่อมีการแก้ไขเซลล์ใดเซลล์หนึ่ง ให้มีวันและเวลาบอกว่า เป็นการแก้ไขล่าสุด ณ วัน เวลาใด
วันนี้ได้รับโจทย์มาว่า มีการเสนอราคาของสินค้าประเภทหนึ่ง อยากได้วิธีการพิมพ์ข้อมูลราคา แล้วขึ้นวันเวลาโดยอัตโนมัติ
ความจริงในตอนแรก เข้าใจผิด จึงได้แนะนำไปว่าให้ใช้ฟังก์ชัน =NOW() แต่ปรากฏว่าไม่ตอบโจทย์ในแง่ที่ว่า ฟังก์ชัน NOW จะเปลี่ยนค่าทุกครั้งที่มีการเปิดเวิร์กบุ๊กใหม่ เพราะผู้สอบถามระบุว่า หมายถึง วันเวลา ณ เวลาที่พิมพ์ข้อมูลอย่างใดอย่างหนึ่งเข้าไป ไม่ได้อยากรู้เวลาปัจจุบัน
หากสนใจฟังก์ชัน NOW โปรดอ่านที่เว็บไซต์ไมโครซอฟต์ หรือ ที่นี่
ก็เลยคิดว่า คงใช้ VBA ในการจัดการเรื่องนี้
บันทึกเวลาแก้ไขอัตโนมัติ ด้วย VBA
จากตัวอย่าง จะมีคอลัมน์ทั้งหมด 5 คอลัมน์ คือ ลูกค้า ประเภท จำนวน เอเยนต์ และ วันที่ปรับปรุง เราอยากจะกำหนดว่า ถ้ามีการปรับข้อมูลในคอลัมน์ จำนวน ให้เปลี่ยนวันที่และเวลาเป็นวันเวลาที่มีการปรับปรุงข้อมูลนี้
เราจะไปที่แท็บ Developer
(กรณีที่ท่านไม่เห็นแท็บนี้ โปรดเปิดก่อน ไปที่ Option > Customize Ribbon ติ๊กเครื่องหมายถูกตรงหน้า Developer ในหน้าต่างด้านขวา)
เลือก Visual Basic
เมื่อหน้าต่าง Visual Basic ขึ้นมาให้เลือก insert > Module
วางโค้ดนี้ลงไป
Private Sub Worksheet_Change(ByVal Target As Range)
Dim xCellColumn As Integer
Dim xTimeColumn As Integer
Dim xRow, xCol As Integer
Dim xDPRg, xRg As Range
xCellColumn = 3
xTimeColumn = 5
xRow = Target.Row
xCol = Target.Column
If Target.Text <> "" Then
If xCol = xCellColumn Then
Cells(xRow, xTimeColumn) = Now()
Else
On Error Resume Next
Set xDPRg = Target.Dependents
For Each xRg In xDPRg
If xRg.Column = xCellColumn Then
Cells(xRg.Row, xTimeColumn) = Now()
End If
Next
End If
End If
End Sub
กด Save
ตรงนี้อย่าลืม เวลาท่าน Save จะต้องเลือกเป็นนามสกุล .xlsm เท่านั้นเพราะเราจะเก็บโค้ดไว้ใช้งานต่อไป
เรียบร้อย
ตัวแปรที่ต้องเปลี่ยนค่า
ตัวแปร ที่ต้องสนใจก็คือ xCellColumn จะเป็นคอลัมน์ที่รับค่าที่ต้องการบันทึกความเปลี่ยนแปลง และ xTimeColumn จะเป็นคอลัมน์ที่แสดงผลวันและเวลา
ในที่นี้ เขียนไว้ว่า
xCellColumn = 3
xTimeColumn = 5
3 ก็คือ คอลัมน์ที่ 3 (คือคอลัมน์ C) และ 5 คือ คอลัมน์ที่ 5 (คือคอลัมน์ E) (โปรดอ่านการอ้างอิงแบบ R1C1)
ข้อสังเกต- สำหรับ VBA ตัวนี้ อาจจะเห็นว่าในโค้ดนี้มีการใช้คำสั่ง =NOW() แต่เป็นการใช้ฟังก์ชันเพื่อดึงค่า วัน เวลา แต่เมื่อดึงค่ามาแล้วเก็บเป็น วัน – เวลา ไม่ได้เก็บเป็นฟังก์ชัน จึงไม่เปลี่ยนแปลงเมื่อเปิดเวิร์กบุ๊กใหม่ แต่จะเปลี่ยนเมื่อเงื่อนไขเปลี่ยน นั่นคือ คอลัมน์ที่ตั้งไว้มีการเปลี่ยนแปลงเกิดขึ้น
หวังว่าจะเป็นประโยชน์กับท่านบ้าง
Discover more from Data Revol
Subscribe to get the latest posts sent to your email.