Page 1 of 2
บันทึกเวลาโดยการเขียน VBA
Posted: Thu Mar 14, 2013 10:05 pm
by Ueng999
ต้องการเขียนเมโครเพื่อทำ Check Box เชลล์ E และ G เมื่อใส่เครื่องหมายถูก เวลาและวันที่ปัจจุบันจะขี้นที่เชลล์ D และ F และป้องกันการเปลี่ยนแปลงในเชลล์ D และ F เนื่องจากจะเป็นการลงเวลาของพนักงาน ตาม File ที่แนบมาค่ะ ถ้าสูตรที่ใช้ไม่เหมาะหรือมีสูตรที่สมควรกว่ากรุณาแนะนำด้วยค่ะ
Re: บันทึกเวลาโดยการเขียน VBA
Posted: Thu Mar 14, 2013 11:42 pm
by tupthai
ช่วยแนบแฟ้มนามสกุล .xlsm หรือ .xls ครับ
จะได้ดู code ได้ครับ
Re: บันทึกเวลาโดยการเขียน VBA
Posted: Sat Mar 16, 2013 9:35 pm
by Ueng999
เปลี่ยนนามสกุลให้แล้วคะ เพิ่มอีกหัวข้อคะ ต้องการให้ช่อง D และ F ไม่สามารถเปลี่ยนข้อมูลได้คะ
Re: บันทึกเวลาโดยการเขียน VBA
Posted: Sat Mar 16, 2013 9:46 pm
by snasui

ไม่สามารถเปิดไฟล์ที่แนบมาได้ครับ ไม่ทราบว่าเปลี่ยนนามสกุลไฟล์ด้วยวิธีใดครับ
กรณีใช้ VBA จำเป็นต้องเขียนมาก่อนตามกฎข้อ 5 ด้านบนครับ

Re: บันทึกเวลาโดยการเขียน VBA
Posted: Sat Mar 16, 2013 10:13 pm
by Ueng999
ลองเปิดอีกทีคะ
Re: บันทึกเวลาโดยการเขียน VBA
Posted: Sat Mar 16, 2013 10:35 pm
by snasui
Ueng999 wrote:ต้องการเขียนเมโครเพื่อทำ Check Box เชลล์ E และ G เมื่อใส่เครื่องหมายถูก เวลาและวันที่ปัจจุบันจะขี้นที่เชลล์ D และ F และป้องกันการเปลี่ยนแปลงในเชลล์ D และ F เนื่องจากจะเป็นการลงเวลาของพนักงาน ตาม File ที่แนบมาค่ะ ถ้าสูตรที่ใช้ไม่เหมาะหรือมีสูตรที่สมควรกว่ากรุณาแนะนำด้วยค่ะ

การไม่ให้แก้ไขได้ให้ใช้การ Protect ครับ
จากที่อธิบายมายังไม่ชัดเจน ช่วยอธิบายใหม่ว่าต้องการจะทำอะไร
คลิกที CheckBox ใดแล้วให้เวลาขึ้นที่เซลล์ไหน วันที่ปัจจุบันขึ้นที่เซลล์ไหน
D และ F ที่พูดถึงเหมือนจะต้องการให้แสดง
เฉพาะเวลาเท่านั้น อ้างถึงที่เขียนมาด้านบน ไม่พบว่ามี CheckBox ที่คอลัมน์ G
Re: บันทึกเวลาโดยการเขียน VBA
Posted: Mon Mar 18, 2013 11:10 pm
by Ueng999
แนบ Files มาให้ใหม่ค่ะ ความต้องการคือ เมื่อติกถูกที่ Check Box ที่เซลล์ E3 วันที่และเวลาปัจจุบันจะขึ้นที่เซลล์ D3 ค่ะ
Re: บันทึกเวลาโดยการเขียน VBA
Posted: Tue Mar 19, 2013 6:44 am
by snasui

ลองปรับ Code เป็นตามด้านล่างครับ
Code: Select all
Public Sub CheckBox1_Click()
If CheckBox1.Value = True Then
Range("D" & Selection.Row) = Now()
Else
Range("D" & Selection.Row) = ""
End If
End Sub
Re: บันทึกเวลาโดยการเขียน VBA
Posted: Tue Mar 19, 2013 10:56 pm
by Ueng999
ขอบคุณสำหรับ Code ค่ะ ลองทำแล้ว ขอเพิ่มอีกนิดค่ะ เมื่อ ติก Check Box ที่เชลล์ E3 วันที่และเวลาปัจจุบันขึ้นที่เชลล์ D3 โดยอัตโนมัติ แบบไม่ต้องคลิกที่เชลล์ D3 ก่อน และใช้การ Protect sheet แต่เมื่อติก Check Box ขึ้น Run-Time Error แทน ( ต้องการให้เซลล์ D3 ไม่สามารถพิมพ์หรือแก้ไขไดๆ ได้ แต่เมื่อติก Check Box ที่เชลล์ E3 ให้วันที่และเวลาปัจจุบันสามารถขึ้นได้) แนบ file ไม่ได้ค่ะ
Re: บันทึกเวลาโดยการเขียน VBA
Posted: Tue Mar 19, 2013 11:00 pm
by snasui

แนบไฟล์ไม่ได้เนื่องจากสาเหตุใดครับ

Re: บันทึกเวลาโดยการเขียน VBA
Posted: Wed Mar 20, 2013 9:19 am
by Ueng999
ไฟล์มีขนาดใหญ่เกินไป เกิน 300 kib.ค่ะ
Re: บันทึกเวลาโดยการเขียน VBA
Posted: Wed Mar 20, 2013 10:31 am
by joo

ให้แนบไฟล์ที่เป็นตัวแทนของข้อมูลจริงมาครับ พร้อมระบุเงื่อนไขและคำตอบที่ต้องการให้ใช้เจน
Re: บันทึกเวลาโดยการเขียน VBA
Posted: Wed Mar 20, 2013 12:38 pm
by Ueng999
ลองแนบไฟล์มาให้ใหม่ค่ะ เปลี่ยน Code เล็กน้อยดังนี้ค่ะ
Public Sub CheckBox1_Click()
If CheckBox1.Value = True Then
Range("D" & Selection.Row) = Now()
Else
Range("E" & Selection.Row) = Now()
End If
End Sub
ก่อนอื่นขอพูดถึงลำดับการทำงานก่อน
คลิกเชลล์ A3ติกเครื่องหมายถูกที่ CheckBox วันที่และเวลาปัจจุบันจะขึ้นที่ เชลล์ A3
คลิกเซลล์ B3ติกเอาหมายถูกออกจาก CheckBox วันที่และเวลาปัจจุบันจะขึ้นที่ เชลล์ B3
ต้องการให้ วันที่และเวลาปัจจุบันที่ปรากฎขึ้นที่เซลล์ A3 และ B3 ไม่สามารถแก้ไขได้
Re: บันทึกเวลาโดยการเขียน VBA
Posted: Wed Mar 20, 2013 5:13 pm
by Ueng999
เขียนชื่อเชลล์ผิด เขียนมาใหม่ค่ะ
Public Sub CheckBox1_Click()
If CheckBox1.Value = True Then
Range("A" & Selection.Row) = Now()
Else
Range("B" & Selection.Row) = Now()
End If
End Sub
ก่อนอื่นขอพูดถึงลำดับการทำงานก่อน
คลิกเชลล์ A3ติกเครื่องหมายถูกที่ CheckBox วันที่และเวลาปัจจุบันจะขึ้นที่ เชลล์ A3
คลิกเซลล์ B3ติกเอาหมายถูกออกจาก CheckBox วันที่และเวลาปัจจุบันจะขึ้นที่ เชลล์ B3
ต้องการให้ วันที่และเวลาปัจจุบันที่ปรากฎขึ้นที่เซลล์ A3 และ B3 ไม่สามารถแก้ไขได้
Re: บันทึกเวลาโดยการเขียน VBA
Posted: Wed Mar 20, 2013 7:00 pm
by snasui

ลองตามนี้ครับ
Code: Select all
Public Sub CheckBox1_Click()
ActiveSheet.Unprotect
If CheckBox1.Value = True Then
Range("A" & Selection.Row) = Now()
Else
Range("B" & Selection.Row) = Now()
End If
ActiveSheet.Protect
End Sub
ดูเพิ่มเติมที่นี่ครับ
Protect
สำหรับการโพสต์ Code ให้แสดงเป็น Code ดูที่นี่ครับ
http://www.snasui.com/viewtopic.php?f=6&t=1187
Re: บันทึกเวลาโดยการเขียน VBA
Posted: Wed Mar 20, 2013 9:05 pm
by Ueng999
Code: Select all
Public Sub CheckBox1_Click()
ActiveSheet.Unprotect Password:="1"
If CheckBox1.Value = True Then
Range("A" & Selection.Row) = Now()
Else
Range("B" & Selection.Row) = Now()
End If
ActiveSheet.Protect
End Sub
Re: บันทึกเวลาโดยการเขียน VBA
Posted: Wed Mar 20, 2013 9:10 pm
by snasui

คำถามคืออะไรครับ

Re: บันทึกเวลาโดยการเขียน VBA
Posted: Wed Mar 20, 2013 9:28 pm
by Ueng999
ตามที่แนบไฟล์และ Code มาข้างต้น เมื่อคลิกเซลล์ A คลิก Check box วันที่และเวลาขึ้นที่เซลล์ A และไม่สามารถแก้ไขได้ตรงตามความต้องการค่ะ แต่การ Protect ก็ยกเลิกได้โดยที่ไม่ต้องใช้ Password จะแก้ยังไงค่ะ
Re: บันทึกเวลาโดยการเขียน VBA
Posted: Wed Mar 20, 2013 9:48 pm
by snasui

Code ที่ยกมา
ตอน Protect ไม่ได้ใส่ Password ไว้ เมื่อ Unprotect ก็ไม่จำเป็นต้องกรอก Password ซึ่งก็เป็นปกติครับ
Link ที่ผมแนบไปด้วยในโพสต์ก่อนหน้าน่าจะมีตัวอย่างให้ดูเกี่ยวกับการ Protect แล้วใส่ Password ลองศึกษาดูครับ
Re: บันทึกเวลาโดยการเขียน VBA
Posted: Fri Mar 22, 2013 5:16 pm
by Ueng999
ใช้การ Protect ได้แล้ว

ขอบคุณมากค่ะ