:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser

อยากให้ VBA lock cell ทุกครั้งที่มีการเปลี่ยนข้อความในเซล

ฟอรัมถาม-ตอบปัญหาการใช้งาน Macro และ VBA
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
akekorn
Bronze
Bronze
Posts: 416
Joined: Wed Mar 09, 2011 5:19 pm

อยากให้ VBA lock cell ทุกครั้งที่มีการเปลี่ยนข้อความในเซล

#1

Post by akekorn »

สวัสดีครับคุณคนควนและเพื่อนสมาชิก
คือผมมีปัญหาอยากถาม คือต้องการ อยากให้ VBA lock cell ทุกครั้งที่มีการเปลี่ยนข้อความในเซลก่อนหน้าทุกครั้งที่ขึ้นคำที่ระบุ ผมได้โค๊ดไว้ ใน worksheet event activate แต่ไม่ทราบหากทุกครั้งที่เลื่อนลงไป excel จะรู้ได้ยังไงว่า หากเป็นคำว่า อื่นๆ ระบุเอง ไม่ต้องล๊อค แต่หากไม่ใช่คำนี้ ต้อง lock

อีกเรื่องในไฟด์เดียวกันครับคือจะหนด format validation ยังไง ผมได้ถามไว้ในไฟด์แล้วครับ
รบกวนคุณคนควน และ เพือนสมาชิกด้วยนะครับ

ขอบคุณครับ
Attachments
ตารางMortgage&SSME.xls
(55.5 KiB) Downloaded 16 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: อยากให้ VBA lock cell ทุกครั้งที่มีการเปลี่ยนข้อความในเซ

#2

Post by snasui »

:D สำหรับ Code ศึกษาได้ที่กระทู้นี้ครับ http://www.snasui.com/viewtopic.php?f=3&t=29

ส่วน Validation เปลี่ยนตรง Allow: เป็น Custom > ตรง Formula: คีย์สูตร =AND(ISNUMBER(K5+0),LEN(K5)=4)
akekorn
Bronze
Bronze
Posts: 416
Joined: Wed Mar 09, 2011 5:19 pm

Re: อยากให้ VBA lock cell ทุกครั้งที่มีการเปลี่ยนข้อความในเซ

#3

Post by akekorn »

ขอบคุณครับคุณควนแต่ที่ผมต้องการคือ หาก column I ตั้งแต่ I5 หากไม่ได้ key คำว่า อื่นๆ ให้ เซล J5 เท่านั้นที่ lock cell แต่หาก key คำว่า อื่นๆ ก็ให้คลาย lock cell สามารถระบุเหตุผลได้ครับ ควรจะปรับ code อย่างไรครับ แล้วลงบรรทัดต่อไป ก็คู่กันไปอย่างนี้ คือ
I6 คู่ J6 ,I7 คู่ J7 ลงไปเรื่อยๆครับผม
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: อยากให้ VBA lock cell ทุกครั้งที่มีการเปลี่ยนข้อความในเซ

#4

Post by snasui »

:D Link ที่ผมส่งให้นั้นมี Code ลักษณะเดียวกันนี้ ลองปรับใช้ดูครับ

การ Lock อาจจะทำได้ด้วยการ Protect หรืออีกแบบหนึ่ง เก็บค่าเดิมไว้ในตัวแปรใด ๆ หากเข้าเงื่อนไขให้ทำการ Lock ก็จะนำค่าตัวแปรที่เก็บไว้มาวางเหมือนเดิม คือไม่สามารถเปลี่ยนค่าในเซลล์ที่ต้องการ Lock ได้ เพราะเปลี่ยนไปมันก็จะเปลี่ยนกลับมาเหมือนเดิม

ยกตัวอย่างเช่น จากเงื่อนไขนี้
akekorn wrote:ตั้งแต่ I5 หากไม่ได้ key คำว่า อื่นๆ ให้ เซล J5 เท่านั้นที่ lock cell แต่หาก key คำว่า อื่นๆ ก็ให้คลาย lock cell
เราสามารถใช้ Event ในการตรวจสอบค่า J5 โดยเมื่อเปลี่ยนค่าใน J5 แล้วให้ตรวจสอบว่า I5 เป็นคำว่า อื่น ๆ หรือไม่ ถ้าไม่ใช่ให้นำค่าตัวแปรที่เก็บไว้กลับมาวางใน J5 เช่นนี้เป็นต้น
akekorn
Bronze
Bronze
Posts: 416
Joined: Wed Mar 09, 2011 5:19 pm

Re: อยากให้ VBA lock cell ทุกครั้งที่มีการเปลี่ยนข้อความในเซ

#5

Post by akekorn »

คุณคนควนครับ
ผมได้ปรับcode ตามความเหมาะสมของงานผมแล้วแต่สงสัยครับว่าบางทีก็ทำงานเหมือนจะได้แต่บางทีก็รวน
ยกตัวอย่างบางครั้งเลือกที่ไม่ใช่ อื่นๆ แล้วเซลถัดไป ตาม code ก็ lock แต่บางทีเลือกอื่นๆ ก็ lock ซะงั้นมันไม่ตรงกับความต้องการซะทีเดียวควรทำอย่างไรดีครับให้ มัน เสถียรกว่านี้ผมได้แนบไฟด์ที่ผมทำมาให้ดูด้วยครับ

ขอบคุณครับ
Attachments
ตารางMortgage&SSME.xls
(84 KiB) Downloaded 27 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: อยากให้ VBA lock cell ทุกครั้งที่มีการเปลี่ยนข้อความในเซ

#6

Post by snasui »

:D ลองปรับ 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
akekorn
Bronze
Bronze
Posts: 416
Joined: Wed Mar 09, 2011 5:19 pm

Re: อยากให้ VBA lock cell ทุกครั้งที่มีการเปลี่ยนข้อความในเซ

#7

Post by akekorn »

ขอบคุณครับคุณคนควน
แต่ผมสงสัย If Target.Column = 9 And Target.Row > 4 ใช่หมายถึง หากมีการเลือกข้อมูลในคอลัมภ์ที่9 คือ คอลัมภ์ I และ แถวที่มีการเปลี่ยนแปลงข้อมูลคือ I5 เป็นต้นไปถึงค่อยเข้าไปทำงานใน module protectsheet ใช่ไหมครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: อยากให้ VBA lock cell ทุกครั้งที่มีการเปลี่ยนข้อความในเซ

#8

Post by snasui »

:D เข้าใจถูกต้องแล้วครับ
akekorn
Bronze
Bronze
Posts: 416
Joined: Wed Mar 09, 2011 5:19 pm

Re: อยากให้ VBA lock cell ทุกครั้งที่มีการเปลี่ยนข้อความในเซ

#9

Post by akekorn »

ขอบคุณมากครับผมได้อะไรมากเลยครับ
Post Reply