Page 1 of 1

ข้องใจ VBA สร้างบน 2013 เปิด 2010 error

Posted: Thu Oct 26, 2017 8:45 am
by yangkodza

Code: Select all

Sub ตั้งค่าเนื้อหา()
Application.ScreenUpdating = False
    Dim rng As Range
            Sheets(Array("C1T1", "C2T1", "C3T1", "C4T1", "C5T1", "C1T2", "C2T2", "C3T2", "C4T2", _
        "C5T2")).Select
        Range("E7:X57,AB8:AC57,AG8:AG57,AJ8:AK57").Select
        Set rng = Selection
        rng.Borders.LineStyle = xlContinuous
        rng.Font.Name = "Angsana New"
        rng.Font.Size = 14
        rng.HorizontalAlignment = xlCenter
        rng.Borders(xlInsideHorizontal).LineStyle = xlContinuous
            Range("A1").Select
        Application.ScreenUpdating = True
    End Sub
จาก Code ดังกล่าว
ฟ้อง rng.Borders.LineStyle = xlContinuous มีปัญหา

ซึ่งไฟล์งานเขียนบน Excel 2013 ใช้งานได้ไม่มีปัญหาอะไร
แต่พอมาเปิดใน Excel 2010 ฟ้องปัญหาดังกล่าว :flw:
01สังคม_ป1.rar
(357.96 KiB) Downloaded 12 times

Re: ข้องใจ VBA สร้างบน 2013 เปิด 2010 error

Posted: Thu Oct 26, 2017 10:21 am
by snasui
:D ยกเลิกการป้องกันเสียก่อนที่จะกำหนดค่าใด ๆ เช่นการตีเส้นในกับ Range ใน Worksheet เมื่อทำเสร็จแล้วค่อยป้องกันใหม่

หากป้องกันไว้จะไม่สามารถกำหนดค่าใด ๆ ได้ในทุก ๆ Version หากทำได้แสดงว่า Excel มีปัญหาครับ :mrgreen:

Re: ข้องใจ VBA สร้างบน 2013 เปิด 2010 error

Posted: Thu Oct 26, 2017 11:25 am
by yangkodza
snasui wrote::D ยกเลิกการป้องกันเสียก่อนที่จะกำหนดค่าใด ๆ เช่นการตีเส้นในกับ Range ใน Worksheet เมื่อทำเสร็จแล้วค่อยป้องกันใหม่

หากป้องกันไว้จะไม่สามารถกำหนดค่าใด ๆ ได้ในทุก ๆ Version หากทำได้แสดงว่า Excel มีปัญหาครับ :mrgreen:
ผมรู้สึกแปลกๆ

Code: Select all

Sub ตั้งค่าเนื้อหา()
    Call UnProtectAll2
    Application.ScreenUpdating = False
    Dim rng As Range
            Sheets(Array("C1T1", "C2T1", "C3T1", "C4T1", "C5T1", "C1T2", "C2T2", "C3T2", "C4T2", _
        "C5T2")).Select
        Range("E7:X57,AB8:AC57,AG8:AG57,AJ8:AK57").Select
        Set rng = Selection
        rng.Borders.LineStyle = xlContinuous
        rng.Font.Name = "Angsana New"
        rng.Font.Size = 14
        rng.HorizontalAlignment = xlCenter
        'rng.Borders(xlInsideHorizontal).LineStyle = xlContinuous
            Range("A1").Select
        Application.ScreenUpdating = True
        Call ProtectAll
    End Sub
สั่งแล้วก็ไม่เป็นผล ติดที่เดิมครับ

นี่่ CODE ปลด Pass ครับ

Code: Select all

Sub UnProtectAll2()
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
ws.Unprotect Password:="2500"
Next ws
End Sub
ส่วนนี่ Code Lock ครับ

Code: Select all

Sub ProtectAll()
    ActiveWorkbook.Protect Password:="2500", Structure:=True
    For Each ws In Worksheets
        ws.Protect Password:="2500"
    Next
        Range("M32:P32").Select
    ActiveCell.FormulaR1C1 = "สถานะ : ป้องกันการแก้ไข"
    Range("I5").Select
End Sub
ทดสอบปลด Lock แล้วรัน F8 ก็ติดบรรทัดเดิม
และที่แปลก พื้นที่ Selection ที่เราเลือกไว้ สั่งแบบ manual ยกเลิกเส้นตารางก็ไม่ได้ครับ :flw:

Re: ข้องใจ VBA สร้างบน 2013 เปิด 2010 error

Posted: Thu Oct 26, 2017 11:39 am
by snasui
:D ผมทดสอบแล้วไม่ติดปัญหาใดในเรื่องของการตีเส้น

ในการปลดการป้องกัน กรณีป้องกัน Workbook ก็ควรปลดการป้องกันก่อน แล้วค่อยปลดการป้องกัน Worksheet เมื่อทำการป้องกัน ให้ป้องกัน Worksheet ก่อนแล้วค่อยป้องกัน Workbook ครับ

Re: ข้องใจ VBA สร้างบน 2013 เปิด 2010 error

Posted: Thu Oct 26, 2017 12:17 pm
by yangkodza
snasui wrote::D ผมทดสอบแล้วไม่ติดปัญหาใดในเรื่องของการตีเส้น

ในการปลดการป้องกัน กรณีป้องกัน Workbook ก็ควรปลดการป้องกันก่อน แล้วค่อยปลดการป้องกัน Worksheet เมื่อทำการป้องกัน ให้ป้องกัน Worksheet ก่อนแล้วค่อยป้องกัน Workbook ครับ
ขอบคุณครับ เดี๋ยวนำไปปรับใช้ครับผม :thup:

Re: ข้องใจ VBA สร้างบน 2013 เปิด 2010 error

Posted: Thu Oct 26, 2017 7:53 pm
by yangkodza
รอดละครับ ปรับมาใช้แบบนี้แทน

Code: Select all

Sub ตั้งค่าเนื้อหา()
            Call UnProtectAll2
            Application.ScreenUpdating = False
            Dim rng As Range
            Sheets(Array("C1T1", "C2T1", "C3T1", "C4T1", "C5T1", "C1T2", "C2T2", "C3T2", "C4T2", _
            "C5T2")).Select
            Range("E7:X57,AB8:AC57,AG8:AG57,AJ8:AK57").Select
            Cells.Select
            Selection.Borders(xlInsideVertical).LineStyle = xlNone
            Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
            Range("A4:AR57").Select
            Set rng = Selection
            rng.Borders.LineStyle = xlContinuous
            rng.Font.Name = "Angsana New"
            rng.Font.Size = 14
            rng.HorizontalAlignment = xlCenter
            Range("B8:C57").Select
            Selection.Borders(xlInsideVertical).LineStyle = xlNone
            Range("B8:C57,AR8:AR57").Select
            Selection.HorizontalAlignment = xlLeft
            Range("A1").Select
            Application.ScreenUpdating = True
            Call ProtectAll
    End Sub
ถ้าไม่สั่งลบตารางทั้งแผ่นงาน มันจะเอ๋อ
เลยใช้แผนนี้ไปก่อนครับ
สามารถทำงานได้ตามปกติ :rz: