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
:D ไม่สามารถเปิดไฟล์ที่แนบมาได้ครับ ไม่ทราบว่าเปลี่ยนนามสกุลไฟล์ด้วยวิธีใดครับ

กรณีใช้ VBA จำเป็นต้องเขียนมาก่อนตามกฎข้อ 5 ด้านบนครับ :roll:

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 ที่แนบมาค่ะ ถ้าสูตรที่ใช้ไม่เหมาะหรือมีสูตรที่สมควรกว่ากรุณาแนะนำด้วยค่ะ


:D การไม่ให้แก้ไขได้ให้ใช้การ 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
:D ลองปรับ 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
:shock: แนบไฟล์ไม่ได้เนื่องจากสาเหตุใดครับ :?:

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
:D ให้แนบไฟล์ที่เป็นตัวแทนของข้อมูลจริงมาครับ พร้อมระบุเงื่อนไขและคำตอบที่ต้องการให้ใช้เจน

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
:D ลองตามนี้ครับ

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
:roll: คำถามคืออะไรครับ :?:

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
:shock: Code ที่ยกมา ตอน Protect ไม่ได้ใส่ Password ไว้ เมื่อ Unprotect ก็ไม่จำเป็นต้องกรอก Password ซึ่งก็เป็นปกติครับ

Link ที่ผมแนบไปด้วยในโพสต์ก่อนหน้าน่าจะมีตัวอย่างให้ดูเกี่ยวกับการ Protect แล้วใส่ Password ลองศึกษาดูครับ

Re: บันทึกเวลาโดยการเขียน VBA

Posted: Fri Mar 22, 2013 5:16 pm
by Ueng999
ใช้การ Protect ได้แล้ว :cp: ขอบคุณมากค่ะ