snasui.com ยินดีต้อนรับ
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ ระบุ Version ของ Excel
คำแสดงเจตนา
ขอผลแห่งการให้ความรู้นี้ จงกลับไปยังผู้ที่เป็นเจ้าของเดิม แม้ข้าพเจ้าจะไม่รู้จักท่านก็ตาม ขอให้แสงแห่งปัญญาที่ท่านเคยจุดไว้ ได้กลับไปเติมเต็มชีวิตของท่านอีกครั้ง และขอให้เจตนาของข้าพเจ้าเป็นการคืนความดีอย่างสงบ
ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and VBA
Forum rules
ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
donut123
Member
Posts: 11 Joined: Tue Jun 07, 2022 7:54 am
Excel Ver: 2016
#1
Post
by donut123 » Sat Nov 05, 2022 10:58 am
สอบถามผู้รู้ครับ ผมทำการสร้าง VBA มาเพื่อปลดล็อคเซลล์ โดยใช้เงื่อนไข เมื่อกรอกข้อมูล ช่อง A:J ใน Row ครบแล้ว ถึงจะสามารกรอกข้อมูลใน Row ถัดไปได้ครับ ผมลองทำดูแล้วมันขึ้นว่า " Duplicate declaration in current scope " ครับ หากต้องการให้เป็นไปตามที่ผมกล่าวมาต้องวางเงื่อนไขอย่างไรครับ ถึงจะได้ตรงตามที่ต้องการ
ปล.รหัสผ่าน fo-mr-063
VBA ที่ใช้
Code: Select all
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Target As Range
Set Target = Range("I4:J4")
If Target = "" Then
Me.Protect Password:="fo-mr-063"
Range("A5:H5").Locked = True
ElseIf Target <> "" Then
Me.Protect Password:="fo-mr-063"
Range("A5:H5").Locked = False
End If
End Sub
You do not have the required permissions to view the files attached to this post.
snasui
Site Admin
Posts: 31176 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#2
Post
by snasui » Sat Nov 05, 2022 11:37 am
จาก
Code: Select all
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Target As Range
ลบบรรทัดล่างทิ้งไป ถือว่าเป็นประกาศตัวแปรซ้ำตามที่โปรแกรมฟ้องครับ
donut123
Member
Posts: 11 Joined: Tue Jun 07, 2022 7:54 am
Excel Ver: 2016
#3
Post
by donut123 » Sat Nov 05, 2022 12:07 pm
ลบแล้วครับ ที่นี้ขึ้น " Type mismatch " ถ้าเกิดค่าใน Cell เป็น อักษรและตัวนี้ต้องใส่เงื่อนไขอื่นไปไหมครับ อาจารย์
snasui
Site Admin
Posts: 31176 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#4
Post
by snasui » Sat Nov 05, 2022 12:11 pm
อ่านแล้วไม่เข้าใจครับ
กรุณาจับภาพการฟ้อง แจ้งบรรทัดที่ติดปัญหา จะได้เข้าถึงปัญหาได้โดยไวครับ
donut123
Member
Posts: 11 Joined: Tue Jun 07, 2022 7:54 am
Excel Ver: 2016
#5
Post
by donut123 » Sat Nov 05, 2022 12:26 pm
บรรทัดที่ 3 ครับ
Code: Select all
Private Sub Worksheet_Change(ByVal Target As Range)
Set Target = Range("I4:J4")
If Target = "" Then
snasui
Site Admin
Posts: 31176 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#6
Post
by snasui » Sat Nov 05, 2022 12:41 pm
Target ควรเป็นเซลล์ใดเซลล์เดียวไม่ใช่เป็นช่วงเซลล์ ถึงจะสามารถนำไปตรวจสอบว่าเป็นเซลล์ว่างหรือไม่
ตามที่ถามมานั้นเรากำหนด Target ให้เป็น Range("I4:J4") ซึ่งเป็นช่วงเซลล์ จะนำไปเช็คว่าเป็นเซลล์ว่างด้วยวิธีเทียบกับค่าว่างไม่ได้ครับ
อาจจะกำหนดเป็น
if application.countifs(target,"") = 2 then เป็นการนับว่าช่วงเซลล์ดังกล่าวมีค่าว่างหรือไม่ถึงจะทำงานได้ เช่นนี้เป็นต้นครับ
donut123
Member
Posts: 11 Joined: Tue Jun 07, 2022 7:54 am
Excel Ver: 2016
#7
Post
by donut123 » Sat Nov 05, 2022 1:12 pm
เดี๋ยวจะลองปรับปรุงดูครับอาจาร์ยหาก ติดขัดส่วนไหนจะนำมาสอบถามอีกครั้งครับ ขอบคุณครับ
donut123
Member
Posts: 11 Joined: Tue Jun 07, 2022 7:54 am
Excel Ver: 2016
#8
Post
by donut123 » Tue Nov 08, 2022 3:50 pm
ขอสอบถามอีกครั้งครับอาจารย์ ถ้าหากว่าผมอยากให้ปลดล็อค เฉพาะคอลัม ต้องเขียนเงื่อนไขว่าอย่างไรครับ
snasui
Site Admin
Posts: 31176 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#9
Post
by snasui » Tue Nov 08, 2022 6:45 pm
การ Lock หรือไม่มีวิธีการกำหนด 2 ประการสำคัญดังนี้ครับ
พื้นที่ใดที่ต้องการให้แก้ไขได้ต้องกำหนดรูปแบบเซลล์ให้เป็น Unlock โดย
คลิกขวาในพื้นที่นั้น
เลือก Format Cells
ที่แถบ Protection ปลดเครื่องหมายที่ Locked
ทำการ Protect
พื้นที่ใดไม่มีการ Unlock จะถูก Lock ทั้งหมด การจะกำหนด Format ดังกล่าวจะทำโดยใช้ Code ก็ย่อมได้ครับ
donut123
Member
Posts: 11 Joined: Tue Jun 07, 2022 7:54 am
Excel Ver: 2016
#10
Post
by donut123 » Thu Nov 10, 2022 8:01 am
เรื่องของการ การจะกำหนด Format จะทำได้โดยการกำหนดอย่างไรครับพอมีตัวอย่างไหมครับ อาจารย์
snasui
Site Admin
Posts: 31176 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#11
Post
by snasui » Thu Nov 10, 2022 8:07 am
อ่านข้อ 1 ที่ผมโพสต์ไปด้านบน
ครับ "รูปแบบเซลล์" กับ "Format Cell" คือสิ่งเดียวกันครับ