Page 1 of 2

ใช้ table คู่กับ Protect ทำงานบางอย่างไมได้ครับ

Posted: Mon Oct 21, 2019 7:57 pm
by yodpao.b
ใช้ table คู่กับ Protect ทำงานบางอย่างไมได้ครับ
1.JPG
2.JPG
คำถาม เมื่อใส่ Protect table จะไม่ทำงานถูกต้องแล้วใช่ไหมครับพอมีวิธีแก้ไขให้ table ทำงานได้ไหมครับ

เนื่องจากในตารางบางช่องเป็นสูตรจึงทำการล็อคเชลครับ

Re: ใช้ table คู่กับ Protect ทำงานบางอย่างไมได้ครับ

Posted: Mon Oct 21, 2019 9:06 pm
by snasui
:D แก้ด้วยทำงานด้วย Code ครับ ลักษณะจะเป็นตามด้านล่างครับ

ปลด Lock > บันทึกข้อมูล > Lock

Re: ใช้ table คู่กับ Protect ทำงานบางอย่างไมได้ครับ

Posted: Mon Oct 21, 2019 9:30 pm
by yodpao.b
ขอบคุณครับ

Re: ใช้ table คู่กับ Protect ทำงานบางอย่างไมได้ครับ

Posted: Tue Oct 22, 2019 12:32 am
by yodpao.b
พอคิดออกแล้วครับ
ขั้นแรก ล็อคก่อน

ขั้น 2 ปลดล็อค

Code: Select all

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If Not Application.Intersect(Target, Range("B:B")) Is Nothing Then

            MsgBox "Finish adding"

    End If

End Sub
code ด้านบนหมายถึง เมื่อคลิกเชลใดในคอลัม B ให้ปลดล็อค


ขั้น 3 ล็อค

Code: Select all

Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Application.Intersect(Target, Range("B:B")) Is Nothing Then

            MsgBox "Finish sssssssssss adding"

    End If

End Sub
code ด้านบนหมายถึง เมื่อพิมพ์ข้อความแล้วจึงไปเลือกเซลอื่นๆ ให้ล็อค

คำถาม
ขอ เปลี่ยน code ในขั้นตอนที่ 3 เป็น เมื่อออกจากเซล B:B ให้ทำการล็อค
(หมายถึงไม่ต้องพิมพ์ก็สามารถ ล็อคได้)

Re: ใช้ table คู่กับ Protect ทำงานบางอย่างไมได้ครับ

Posted: Tue Oct 22, 2019 6:58 am
by snasui
:D ตัวอย่าง Code ครับ

Code: Select all

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Application.Intersect(Target, Range("B:B")) Is Nothing Then
            'Protect
    Else
            'Unprotect
    End If
End Sub

Re: ใช้ table คู่กับ Protect ทำงานบางอย่างไมได้ครับ

Posted: Tue Oct 22, 2019 7:44 pm
by yodpao.b
ผมลองใช้ตามอาจารย์
โดยใช้ msgbox แทนการใช้ protect

Code: Select all

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Application.Intersect(Target, Range("B:B")) Is Nothing Then
            MsgBox "Finish adding"    ' protect
    Else
            MsgBox "Finish aaaaaaaaaaaaaaaaadding"      ' un protect
    End If
End Sub
ผลที่ได้ดังนี้
เมื่อคลิกเซลใดใดที่ไม่ใช่ช่อง B จะขึ้น MsgBox "Finish aaaaaaaaaaaaaaaaadding" ตัวนี้ตลอด
ยังไม่ถูกต้องนัก

Re: ใช้ table คู่กับ Protect ทำงานบางอย่างไมได้ครับ

Posted: Tue Oct 22, 2019 7:50 pm
by yodpao.b
ผมลองใช้

Code: Select all

Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Application.Intersect(Target, Range("B:B")) Is Nothing Then

            MsgBox "Finish adding     1     'protect
            MsgBox "Finish adding     2     'Unprotect

    End If


End Sub
ได้ตามต้องการ
table ผล ออกมาให้ เป็นเส้นตาราง
เดียวขอลองดูก่อนครับว่ามีผลเสียข้างเคียงใดบ้าง

Re: ใช้ table คู่กับ Protect ทำงานบางอย่างไมได้ครับ

Posted: Tue Oct 22, 2019 8:15 pm
by snasui
yodpao.b wrote: Tue Oct 22, 2019 7:44 pm ผลที่ได้ดังนี้
เมื่อคลิกเซลใดใดที่ไม่ใช่ช่อง B จะขึ้น MsgBox "Finish aaaaaaaaaaaaaaaaadding" ตัวนี้ตลอด
ยังไม่ถูกต้องนัก
:D ขึ้นอยู่ว่าต้องการให้แสดงผลลัพธ์เป็นแบบไหน อย่างไร Code สามารถเขียนให้สลับกันได้ในส่วนของ If...Then...Else ไม่ใช่ว่าจำเป็นต้องใช้ตรงไปตรงมาตามนั้น สามารถปรับเปลี่ยนเองได้ครับ

ถ้าต้องการผลลัพธ์แบบเจาะจงก็ควรตั้งคำถามให้เจาะจง อธิบายถึงสิ่งที่ต้องการและแนบไฟล์พร้อม Code ที่ติดปัญหามาด้วยครับ

Re: ใช้ table คู่กับ Protect ทำงานบางอย่างไมได้ครับ

Posted: Tue Oct 22, 2019 8:41 pm
by yodpao.b
Private Sub Worksheet_Change(ByVal Target As Range)

If Not Application.Intersect(Target, Range("B:B")) Is Nothing Then

ActiveSheet.Unprotect

ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowFormattingCells:=True, AllowFormattingColumns:=True, _
AllowFormattingRows:=True, AllowFiltering:=True, AllowUsingPivotTables:=True

End If


End Sub
โดคที่ผมเขียนใช้ไม่ได้ครับ ตารางไม่แสดงช่องเพิ่ม


ขั้นตอนที่ต้องการคามรูปครับ
0.JPG
1.JPG
2.JPG

Re: ใช้ table คู่กับ Protect ทำงานบางอย่างไมได้ครับ

Posted: Tue Oct 22, 2019 8:42 pm
by yodpao.b
ไฟล์ครับ

Re: ใช้ table คู่กับ Protect ทำงานบางอย่างไมได้ครับ

Posted: Tue Oct 22, 2019 8:52 pm
by yodpao.b
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Application.Intersect(Target, Range("B:B")) Is Nothing Then
ActiveSheet.Unprotect
Else
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowFormattingCells:=True, AllowFormattingColumns:=True, _
AllowFormattingRows:=True, AllowFiltering:=True, AllowUsingPivotTables:=True

End If
End Sub
โตดอาจารย์ถูกต้องครับ
แต่เวลาคลิก ช่องอื่นมันจะ Protect ทุกครั้งเลย (มันทำให้เกิดปัญหาเวลาจะทำอะไรเพิ่มกับหน้านี้ไม่ได้เลยในเวลาที่เราปลด Protect เพื่อทำอพไรเพิ่มเติมที่ไม่เกียวกับในตาราง)

Re: ใช้ table คู่กับ Protect ทำงานบางอย่างไมได้ครับ

Posted: Tue Oct 22, 2019 9:00 pm
by snasui
yodpao.b wrote: Tue Oct 22, 2019 8:52 pm โตดอาจารย์ถูกต้องครับ
แต่เวลาคลิก ช่องอื่นมันจะ Protect ทุกครั้งเลย (มันทำให้เกิดปัญหาเวลาจะทำอะไรเพิ่มกับหน้านี้ไม่ได้เลยในเวลาที่เราปลด Protect เพื่อทำอพไรเพิ่มเติมที่ไม่เกียวกับในตาราง)
ค่อยๆ ถามตอบกันไปและกรุณาวาง Code ให้เป็นข้อความ Code เสมอครับ

ขั้นตอนแรกซึ่งสำคัญอย่างยิ่ง ช่วยอธิบายว่าต้องการให้ปลดการป้องด้วยกันเหตุการณ์ใด และป้องกันกลับไปใหม่ด้วยเหตุการณ์ใดครับ

การกำหนดว่า คลิกคอลัมน์ใด ๆ แล้วปลดการป้องกัน พอคลิกคอลัมน์อื่น ๆ แล้วให้ป้องกัน ลักษณะ Code แบบนี้ย่อมทำงานใดไม่ได้ ดังนั้น จะต้องกำหนดเหตุการณ์ในการปลดการป้องกันและการป้องกันไม่ให้ขัดกับการทำงานครับ

Re: ใช้ table คู่กับ Protect ทำงานบางอย่างไมได้ครับ

Posted: Tue Oct 22, 2019 10:27 pm
by yodpao.b
ปลดการป้อง เหตุการณ์ เมื่อพิมพ ในช่อง ฺB:B
ใส่การป้องกัน เหตุการณ์ เมื่อพิมพแล้วเสร็จตารางจะเกิดขึ้น

Re: ใช้ table คู่กับ Protect ทำงานบางอย่างไมได้ครับ

Posted: Tue Oct 22, 2019 10:34 pm
by snasui
:D ปกติก่อนพิมพ์จะมีการป้องกันเอาไว้ย่อมไม่สามารถพิมพ์ได้อยู่แล้ว ดังนั้นเหตุการณ์นี้ไม่ควรจะใช้กำหนดให้ปลดการป้องกันได้ครับ

Re: ใช้ table คู่กับ Protect ทำงานบางอย่างไมได้ครับ

Posted: Tue Oct 22, 2019 11:13 pm
by yodpao.b
ปลดได้ครับ เนื่องจากในช่อง ฺB:B ผมนำการป้องกันที่อยู่ในฟอรแมทเชลออก

Re: ใช้ table คู่กับ Protect ทำงานบางอย่างไมได้ครับ

Posted: Tue Oct 22, 2019 11:18 pm
by snasui
:D กรณีกำหนดให้เซลล์นั้นมีการแก้ไขได้ หากกำหนดการปลดการป้องกันเมื่อพิมพ์ ไม่สามารถทำได้

ป้องกันเมื่อพิมพ์เสร็จสามารถทำได้ครับ

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

Re: ใช้ table คู่กับ Protect ทำงานบางอย่างไมได้ครับ

Posted: Tue Oct 22, 2019 11:34 pm
by yodpao.b
อาจารย์ครับ ถ้าอย่างนั้น เปลี่ยนเป็น
ปลดการป้อง เหตุการณ์ เมื่อพิมพ ในช่อง ฺB:B
ใส่การป้องกัน เหตุการณ์ เมื่อพิมพ ในช่อง ฺC:C

Code: Select all

Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Application.Intersect(Target, Range("B:B")) Is Nothing Then
            ActiveSheet.Unprotect
'            MsgBox "Finish adding "   ' Unprotect
    End If
    
    If Not Application.Intersect(Target, Range("C:C")) Is Nothing Then
            ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
                , AllowFormattingCells:=True, AllowFormattingColumns:=True, _
                    AllowFormattingRows:=True, AllowFiltering:=True, AllowUsingPivotTables:=True
'            MsgBox "Finish adding1111111111111111 "   ' Protect
    End If
ผมใช้ code นี้ protect ทำงานได้ตามต้องการ แต่ table ไม่ทำงานครับ

Re: ใช้ table คู่กับ Protect ทำงานบางอย่างไมได้ครับ

Posted: Tue Oct 22, 2019 11:36 pm
by snasui
:D กรุณาแนบไฟล์ตัวอย่างประกอบ จะได้ช่วยทดสอบให้ได้ครับ

Re: ใช้ table คู่กับ Protect ทำงานบางอย่างไมได้ครับ

Posted: Wed Oct 23, 2019 12:24 am
by yodpao.b
แนบไฟล

Re: ใช้ table คู่กับ Protect ทำงานบางอย่างไมได้ครับ

Posted: Wed Oct 23, 2019 7:31 am
by snasui
:D ตัวอย่าง Code ครับ

Code: Select all

If Not Application.Intersect(Target, Range("B:B")) Is Nothing Then
    ActiveSheet.Unprotect
    Target.Value = Target.Value
End If