Page 1 of 1
อยากให้ VBA lock cell ทุกครั้งที่มีการเปลี่ยนข้อความในเซล
Posted: Thu Feb 14, 2013 2:39 pm
by akekorn
สวัสดีครับคุณคนควนและเพื่อนสมาชิก
คือผมมีปัญหาอยากถาม คือต้องการ อยากให้ VBA lock cell ทุกครั้งที่มีการเปลี่ยนข้อความในเซลก่อนหน้าทุกครั้งที่ขึ้นคำที่ระบุ ผมได้โค๊ดไว้ ใน worksheet event activate แต่ไม่ทราบหากทุกครั้งที่เลื่อนลงไป excel จะรู้ได้ยังไงว่า หากเป็นคำว่า อื่นๆ ระบุเอง ไม่ต้องล๊อค แต่หากไม่ใช่คำนี้ ต้อง lock
อีกเรื่องในไฟด์เดียวกันครับคือจะหนด format validation ยังไง ผมได้ถามไว้ในไฟด์แล้วครับ
รบกวนคุณคนควน และ เพือนสมาชิกด้วยนะครับ
ขอบคุณครับ
Re: อยากให้ VBA lock cell ทุกครั้งที่มีการเปลี่ยนข้อความในเซ
Posted: Thu Feb 14, 2013 5:04 pm
by snasui

สำหรับ Code ศึกษาได้ที่กระทู้นี้ครับ
http://www.snasui.com/viewtopic.php?f=3&t=29
ส่วน Validation เปลี่ยนตรง Allow: เป็น
Custom > ตรง Formula: คีย์สูตร
=AND(ISNUMBER(K5+0),LEN(K5)=4)
Re: อยากให้ VBA lock cell ทุกครั้งที่มีการเปลี่ยนข้อความในเซ
Posted: Thu Feb 14, 2013 5:31 pm
by akekorn
ขอบคุณครับคุณควนแต่ที่ผมต้องการคือ หาก column I ตั้งแต่ I5 หากไม่ได้ key คำว่า อื่นๆ ให้ เซล J5 เท่านั้นที่ lock cell แต่หาก key คำว่า อื่นๆ ก็ให้คลาย lock cell สามารถระบุเหตุผลได้ครับ ควรจะปรับ code อย่างไรครับ แล้วลงบรรทัดต่อไป ก็คู่กันไปอย่างนี้ คือ
I6 คู่ J6 ,I7 คู่ J7 ลงไปเรื่อยๆครับผม
Re: อยากให้ VBA lock cell ทุกครั้งที่มีการเปลี่ยนข้อความในเซ
Posted: Thu Feb 14, 2013 7:33 pm
by snasui

Link ที่ผมส่งให้นั้นมี Code ลักษณะเดียวกันนี้ ลองปรับใช้ดูครับ
การ Lock อาจจะทำได้ด้วยการ Protect หรืออีกแบบหนึ่ง เก็บค่าเดิมไว้ในตัวแปรใด ๆ หากเข้าเงื่อนไขให้ทำการ Lock ก็จะนำค่าตัวแปรที่เก็บไว้มาวางเหมือนเดิม คือไม่สามารถเปลี่ยนค่าในเซลล์ที่ต้องการ Lock ได้ เพราะเปลี่ยนไปมันก็จะเปลี่ยนกลับมาเหมือนเดิม
ยกตัวอย่างเช่น จากเงื่อนไขนี้
akekorn wrote:ตั้งแต่ I5 หากไม่ได้ key คำว่า อื่นๆ ให้ เซล J5 เท่านั้นที่ lock cell แต่หาก key คำว่า อื่นๆ ก็ให้คลาย lock cell
เราสามารถใช้ Event ในการตรวจสอบค่า
J5 โดยเมื่อเปลี่ยนค่าใน
J5 แล้วให้ตรวจสอบว่า I5 เป็นคำว่า
อื่น ๆ หรือไม่ ถ้าไม่ใช่ให้นำค่าตัวแปรที่เก็บไว้กลับมาวางใน
J5 เช่นนี้เป็นต้น
Re: อยากให้ VBA lock cell ทุกครั้งที่มีการเปลี่ยนข้อความในเซ
Posted: Fri Feb 15, 2013 11:16 am
by akekorn
คุณคนควนครับ
ผมได้ปรับcode ตามความเหมาะสมของงานผมแล้วแต่สงสัยครับว่าบางทีก็ทำงานเหมือนจะได้แต่บางทีก็รวน
ยกตัวอย่างบางครั้งเลือกที่ไม่ใช่ อื่นๆ แล้วเซลถัดไป ตาม code ก็ lock แต่บางทีเลือกอื่นๆ ก็ lock ซะงั้นมันไม่ตรงกับความต้องการซะทีเดียวควรทำอย่างไรดีครับให้ มัน เสถียรกว่านี้ผมได้แนบไฟด์ที่ผมทำมาให้ดูด้วยครับ
ขอบคุณครับ
Re: อยากให้ VBA lock cell ทุกครั้งที่มีการเปลี่ยนข้อความในเซ
Posted: Fri Feb 15, 2013 12:59 pm
by snasui

ลองปรับ Code เป็นตามด้านล่างครับ
Code: Select all
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 9 And Target.Row > 4 Then
Call protectsheet
End If
End Sub
Sub protectsheet()
ActiveSheet.Unprotect Password:="Akekorn"
If ActiveCell.Value <> "อื่นๆ (ระบุเหตุผล)" Then
ActiveCell.Offset(0, 1).Locked = True
'Sheets(1).Cells.Locked = True
Else
ActiveCell.Offset(0, 1).Locked = False
End If
ActiveSheet.Protect Password:="Akekorn"
End Sub
Re: อยากให้ VBA lock cell ทุกครั้งที่มีการเปลี่ยนข้อความในเซ
Posted: Fri Feb 15, 2013 1:09 pm
by akekorn
ขอบคุณครับคุณคนควน
แต่ผมสงสัย If Target.Column = 9 And Target.Row > 4 ใช่หมายถึง หากมีการเลือกข้อมูลในคอลัมภ์ที่9 คือ คอลัมภ์ I และ แถวที่มีการเปลี่ยนแปลงข้อมูลคือ I5 เป็นต้นไปถึงค่อยเข้าไปทำงานใน module protectsheet ใช่ไหมครับ
Re: อยากให้ VBA lock cell ทุกครั้งที่มีการเปลี่ยนข้อความในเซ
Posted: Fri Feb 15, 2013 1:11 pm
by snasui

เข้าใจถูกต้องแล้วครับ
Re: อยากให้ VBA lock cell ทุกครั้งที่มีการเปลี่ยนข้อความในเซ
Posted: Fri Feb 15, 2013 1:19 pm
by akekorn
ขอบคุณมากครับผมได้อะไรมากเลยครับ