Note: The other languages of the website are Google-translated. Back to English
English English
  • เอกสาร
  • Excel
  • วิธีล็อคเซลล์ที่ระบุโดยไม่ป้องกันทั้งแผ่นงานใน Excel

วิธีล็อคเซลล์ที่ระบุโดยไม่ป้องกันทั้งแผ่นงานใน Excel

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

ล็อคเซลล์ที่ระบุโดยไม่ปกป้องทั้งแผ่นงานด้วย VBA


ล็อคเซลล์ที่ระบุโดยไม่ปกป้องทั้งแผ่นงานด้วย VBA

สมมติว่าคุณจำเป็นต้องล็อคเซลล์ A3 และ A5 ในแผ่นงานปัจจุบันรหัส VBA ต่อไปนี้จะช่วยให้คุณทำได้โดยไม่ต้องปกป้องทั้งแผ่นงาน

1. คลิกขวาที่แท็บแผ่นงานแล้วเลือก ดูรหัส จากเมนูคลิกขวา

2. จากนั้นคัดลอกและวางโค้ด VBA ด้านล่างลงในหน้าต่างรหัส ดูภาพหน้าจอ:

รหัส VBA: ล็อคเซลล์ที่ระบุโดยไม่ต้องปกป้องทั้งแผ่นงาน

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Column = 1 Then
        If Target.Row = 3 Or Target.Row = 5 Then
            Beep
            Cells(Target.Row, Target.Column).Offset(0, 1).Select
        End If
    End If
End Sub

หมายเหตุ: ในรหัส 1 คอลัมน์, แถว = 3 และ แถว = 5 ระบุเซลล์ A3 และ A5 ในแผ่นงานปัจจุบันจะถูกล็อคหลังจากเรียกใช้รหัส คุณสามารถเปลี่ยนได้ตามต้องการ

3 กด อื่น ๆ + Q พร้อมกันเพื่อปิดไฟล์ Microsoft Visual Basic สำหรับแอปพลิเคชัน หน้าต่าง

ตอนนี้เซลล์ A3 และ A5 ถูกล็อคในแผ่นงานปัจจุบัน หากคุณพยายามเลือกเซลล์ A3 หรือ A5 ในแผ่นงานปัจจุบันเคอร์เซอร์จะถูกย้ายไปยังเซลล์ที่อยู่ติดกันทางขวาโดยอัตโนมัติ


บทความที่เกี่ยวข้อง:


เครื่องมือเพิ่มประสิทธิภาพการทำงานในสำนักงานที่ดีที่สุด

Kutools สำหรับ Excel แก้ปัญหาส่วนใหญ่ของคุณและเพิ่มผลผลิตของคุณโดย
80%

  • นำมาใช้ใหม่: ใส่อย่างรวดเร็ว สูตรที่ซับซ้อนแผนภูมิ และสิ่งที่คุณเคยใช้มาก่อน เข้ารหัสเซลล์ ด้วยรหัสผ่าน; สร้างรายชื่อผู้รับจดหมาย และส่งอีเมล ...
  • ซุปเปอร์ฟอร์มูล่าบาร์ (แก้ไขข้อความและสูตรหลายบรรทัดได้อย่างง่ายดาย); การอ่านเค้าโครง (อ่านและแก้ไขเซลล์จำนวนมากได้อย่างง่ายดาย); วางลงในช่วงที่กรองแล้ว...
  • ผสานเซลล์ / แถว / คอลัมน์ โดยไม่สูญเสียข้อมูล แยกเนื้อหาของเซลล์ รวมแถว / คอลัมน์ที่ซ้ำกัน... ป้องกันเซลล์ซ้ำ; เปรียบเทียบช่วง...
  • เลือกซ้ำหรือไม่ซ้ำ แถว; เลือกแถวว่าง (เซลล์ทั้งหมดว่างเปล่า); Super Find และ Fuzzy Find ในสมุดงานจำนวนมาก สุ่มเลือก ...
  • สำเนาถูกต้อง หลายเซลล์โดยไม่เปลี่ยนการอ้างอิงสูตร สร้างการอ้างอิงอัตโนมัติ ถึงหลายแผ่น ใส่สัญลักษณ์แสดงหัวข้อย่อย, กล่องกาเครื่องหมายและอื่น ๆ ...
  • แยกข้อความ, เพิ่มข้อความ, ลบตามตำแหน่ง, ลบ Space; สร้างและพิมพ์ผลรวมย่อยของเพจ แปลงระหว่างเนื้อหาของเซลล์และความคิดเห็น...
  • ซุปเปอร์ฟิลเตอร์ (บันทึกและใช้โครงร่างตัวกรองกับแผ่นงานอื่น ๆ ); การเรียงลำดับขั้นสูง ตามเดือน / สัปดาห์ / วันความถี่และอื่น ๆ ตัวกรองพิเศษ โดยตัวหนาตัวเอียง ...
  • รวมสมุดงานและแผ่นงาน; ผสานตารางตามคอลัมน์สำคัญ แยกข้อมูลออกเป็นหลายแผ่น; Batch แปลง xls, xlsx และ PDF...
  • กว่า
    300
    คุณสมบัติอันทรงพลัง
    . รองรับ Office/Excel
    2007-2019 และ 365
    . รองรับทุกภาษา ง่ายต่อการปรับใช้ในองค์กรหรือองค์กรของคุณ คุณสมบัติครบถ้วน
    30
    วันทดลองใช้ฟรี รับประกันคืนเงินภายใน 60 วัน
kte แท็บ 201905

แท็บ Office นำอินเทอร์เฟซแบบแท็บมาที่ Office และทำให้งานของคุณง่ายขึ้นมาก

  • เปิดใช้งานการแก้ไขและอ่านแบบแท็บใน Word, Excel, PowerPoint, ผู้จัดพิมพ์, Access, Visio และโครงการ
  • เปิดและสร้างเอกสารหลายรายการในแท็บใหม่ของหน้าต่างเดียวกันแทนที่จะเป็นในหน้าต่างใหม่
  • เพิ่มผลผลิตของคุณโดย
    50%
    และลดการคลิกเมาส์หลายร้อยครั้งให้คุณทุกวัน!
ด้านล่าง officetab
จัดเรียงความคิดเห็นโดย
ความคิดเห็น (20)
ยังไม่มีการให้คะแนน เป็นคนแรกที่ให้คะแนน!
ความคิดเห็นนี้ถูกย่อให้เล็กสุดโดยผู้ดำเนินรายการบนเว็บไซต์
ฉันต้องการซ่อนสูตรในเซลล์ O1 กรุณาแจ้งเป็นสูตรเดียวกัน
ความคิดเห็นนี้ถูกย่อให้เล็กสุดโดยผู้ดำเนินรายการบนเว็บไซต์
อาเจย์ที่รัก
สำหรับการซ่อนสูตรของเซลล์ โปรดทำตามไฮเปอร์ลิงก์ด้านล่างเพื่อรับวิธีแก้ปัญหา
https://www.extendoffice.com/documents/excel/1424-excel-hide-formulas.html
ความคิดเห็นนี้ถูกย่อให้เล็กสุดโดยผู้ดำเนินรายการบนเว็บไซต์
อาเจย์ที่รัก
ถ้าคุณต้องการซ่อนสูตรในเซลล์ O1 โดยไม่ปกป้องเวิร์กชีต โปรดลองใช้สคริปต์ VBA ด้านล่าง
แผ่นงานย่อยส่วนตัว_SelectionChange(ByVal Target As Range)
Static TheFormula เป็นสตริง
ถ้า Target.Address = "$O$1" แล้ว
มีเป้าหมาย
สูตร = .Formula
.Value = .ค่า
จบด้วย
อื่น
ด้วยช่วง ("O1")
ถ้าไม่ใช่ .HasFormula แล้ว
.Formula = สูตร
End If
จบด้วย
End If
ย่อยสิ้นสุด

หลังจากใช้โค้ดแล้ว ดูเหมือนว่าสูตรของเซลล์ O1 จะเปลี่ยนเป็นผลลัพธ์ของสูตร อันที่จริง มันซ่อนสูตรด้วยการแสดงผลลัพธ์ของสูตรในแถบสูตร และสูตรจะแสดงขึ้นหากรหัสเสีย
ความคิดเห็นนี้ถูกย่อให้เล็กสุดโดยผู้ดำเนินรายการบนเว็บไซต์
ฉันจะล็อคช่วงของแถวได้อย่างไร พูด 4-46 และคอลัมน์ 8 และ 10
ความคิดเห็นนี้ถูกย่อให้เล็กสุดโดยผู้ดำเนินรายการบนเว็บไซต์
เรียนเอเจ
หากคุณต้องการล็อกช่วงของแถวและคอลัมน์ที่ระบุ โปรดลองใช้สคริปต์ VBA ด้านล่าง

แผ่นงานย่อยส่วนตัว_SelectionChange(ByVal Target As Range)
Dim xRg เป็นช่วง
Dim xRgEx เป็นช่วง
Dim xRgExEach เป็นช่วง
เกี่ยวกับข้อผิดพลาดต่อไป
Application.ScreenUpdating = เท็จ
Set xRg = Range("H:J,4:46") 'เปลี่ยนช่วงแถวและช่วงคอลัมน์ที่คุณจะล็อกโดยไม่ป้องกันเวิร์กชีต
ตั้งค่า xRgEx = Application.Intersect(xRg, Target)
ถ้า xRgEx ไม่มีอะไรให้ออกจาก Sub
เซลล์(1, 1).Select 'ระบุเซลล์ที่คุณจะเปลี่ยนไปหลังจากเลือกเซลล์ที่ถูกล็อก
Application.ScreenUpdating = จริง
ย่อยสิ้นสุด
ความคิดเห็นนี้ถูกย่อให้เล็กสุดโดยผู้ดำเนินรายการบนเว็บไซต์
นี่เป็นวิธีแก้ปัญหาที่ดี โดยเฉพาะอย่างยิ่งในเวิร์กบุ๊กที่แชร์ซึ่งไม่รองรับการเปิด/ปิดการป้องกัน ขอบคุณมาก.
ความคิดเห็นนี้ถูกย่อให้เล็กสุดโดยผู้ดำเนินรายการบนเว็บไซต์
คริสตัลที่รัก

คุณได้ให้วิธีแก้ปัญหาแก่ฉัน (ครึ่งหนึ่ง) ที่ฉันต้องดิ้นรนในช่วงสองสามสัปดาห์ที่ผ่านมา แต่ฉันต้องการคำแนะนำเพิ่มเติม

วิธีนี้ใช้ได้กับช่วงตารางเท่านั้น ไม่ใช่ทั้งเวิร์กชีตได้อย่างไร ขอบคุณล่วงหน้า.
ความคิดเห็นนี้ถูกย่อให้เล็กสุดโดยผู้ดำเนินรายการบนเว็บไซต์
ขอให้เป็นวันที่ดี,
ตามรหัส VBA ด้านล่าง โปรดเปลี่ยนช่วงที่ระบุ "H:J,4:46" เป็นช่วงตารางที่คุณต้องการล็อกในเวิร์กชีตเท่านั้น
และเซลล์(1,1) ควรเป็นเซลล์ที่อยู่นอกช่วงตาราง เมื่อคลิกที่เซลล์ใดๆ ในช่วงตาราง เคอร์เซอร์จะถูกย้ายไปยังเซลล์นั้นโดยอัตโนมัติ

แผ่นงานย่อยส่วนตัว_SelectionChange(ByVal Target As Range)
Dim xRg เป็นช่วง
Dim xRgEx เป็นช่วง
Dim xRgExEach เป็นช่วง
เกี่ยวกับข้อผิดพลาดต่อไป
Application.ScreenUpdating = เท็จ
Set xRg = Range("H:J,4:46") 'เปลี่ยนช่วงแถวและช่วงคอลัมน์ที่คุณจะล็อกโดยไม่ป้องกันเวิร์กชีต
ตั้งค่า xRgEx = Application.Intersect(xRg, Target)
ถ้า xRgEx ไม่มีอะไรให้ออกจาก Sub
เซลล์(1, 1).Select 'ระบุเซลล์ที่คุณจะเปลี่ยนไปหลังจากเลือกเซลล์ที่ถูกล็อก
Application.ScreenUpdating = จริง
ย่อยสิ้นสุด
ความคิดเห็นนี้ถูกย่อให้เล็กสุดโดยผู้ดำเนินรายการบนเว็บไซต์
คริสตัลที่รัก

มีอยู่แล้วหรือไม่ที่แมโครนี้สามารถเรียกใช้โดยอัตโนมัติเมื่อเปิดไฟล์หรือเมื่อคลิกเซลล์ใด ๆ ฉันไม่ต้องการให้ผู้คนต้องเรียกใช้มาโครด้วยตนเองเพื่อป้องกันช่วงที่ต้องการ

นอกจากนี้ ฉันจะต้องปกป้อง 12 ช่วงที่ไม่อยู่ติดกัน ตัวอย่างเช่น: I11:I20 และ K11:K20 และ M11:20 เป็นต้น... จะต้องทำอย่างไร

สุดท้ายและอันนี้อาจถามมากเกินไป แต่เป็นไปได้ไหมที่จะใช้การป้องกันกับช่วงตัวอย่างที่ฉันให้ไว้ด้านบน แต่จากนั้นขยายการป้องกันลงแถวเพิ่มเติมเมื่อมีการเพิ่มแถวใหม่ กล่าวคือ การป้องกันจะใช้กับ I11:I20 และ K11:K20 และ M11:20 แต่ผู้ใช้จะสามารถเพิ่มแถวใหม่ (แถวที่ 21) ด้วยข้อมูลใหม่ได้ แต่เมื่อเพิ่มแถวใหม่แล้ว การป้องกันจะใช้กับ I11:I21 และ K11:K21 และ M11:21 ฉันขอดวงจันทร์? :-)

ขอบคุณสำหรับทุกสิ่งที่คุณให้มา! ฉันไม่สามารถขอบคุณคุณและคนอื่น ๆ เช่นคุณมากพอที่จะแบ่งปันความรู้ของคุณ อัศจรรย์!
ความคิดเห็นนี้ถูกย่อให้เล็กสุดโดยผู้ดำเนินรายการบนเว็บไซต์
เอสติมาโด คาร์ลอส,
รหัส VBA ต่อไปนี้สามารถช่วยคุณแก้ปัญหาได้ โปรดกรอกช่วงของคุณในบรรทัดที่สี่ของโค้ดแล้วกดปุ่ม Alt + Q เพื่อกลับไปที่เวิร์กชีต จากนั้นโปรดเปลี่ยนไปใช้แผ่นงานอื่นแล้วกลับไปที่แผ่นงานปัจจุบันเพื่อเปิดใช้งานรหัส ขอบคุณสำหรับความคิดเห็นของคุณ.

Dim xRg เป็นช่วง
แผ่นงานย่อยส่วนตัว_Activate()
ถ้า xRg ไม่มีอะไรแล้ว
ตั้งค่า xRg = ยูเนี่ยน(ช่วง("I10:I20"), พิสัย("K10:K20"), พิสัย("M10:M20"), พิสัย("O10:O20"))
End If
ย่อยสิ้นสุด
Worksheet_Change ย่อยส่วนตัว (เป้าหมายเป็นช่วง ByVal)
หรี่ฉันเป็นจำนวนเต็ม
Dim xRgNew เป็นช่วง
Dim xRgLCell เป็นช่วง
เกี่ยวกับข้อผิดพลาดต่อไป
Application.EnableEvents = เท็จ
สำหรับฉัน = 1 ถึง xRg.Areas.Count
ตั้งค่า xRgLCell = xRg.Areas.Item(I)
ตั้งค่า xRgLCell = xRgLCell(xRgLCell.Count).Offset(1, 0)
ถ้า Target.Address = xRgLCell.Address แล้ว
ถ้า xRgNew ไม่มีอะไรแล้ว
ตั้งค่า xRgNew = Target
อื่น
ตั้งค่า xRgNew = ยูเนี่ยน (xRgNew เป้าหมาย)
End If
End If
ต่อไป
ตั้งค่า xRg = ยูเนี่ยน (xRg, xRgNew)
Application.EnableEvents = จริง
ย่อยสิ้นสุด
แผ่นงานย่อยส่วนตัว_SelectionChange(ByVal Target As Range)
เกิดข้อผิดพลาด GoTo Exitsub
ถ้า (ไม่ตัดกัน (xRg, เป้าหมาย) คือไม่มีอะไร) และ (Target.Count = 1) แล้ว
Target.Offset(0, 1).เลือก
End If
ทางออก:
ย่อยสิ้นสุด
ความคิดเห็นนี้ถูกย่อให้เล็กสุดโดยผู้ดำเนินรายการบนเว็บไซต์
คริสตัลที่รัก

ขอบคุณมากสำหรับเรื่องนี้! มันทำงานได้อย่างสมบูรณ์

ฉันได้ใช้รหัสในความคิดเห็นของ Carlos เพื่อเรียกใช้มาโครโดยอัตโนมัติเมื่อคุณเปิดไฟล์ ฉันสงสัยว่ามีวิธีที่มีปุ่ม "เลิกทำ" หรืออะไรทำนองนั้น ที่อนุญาตให้คุณยกเลิกรหัสนั้นและปลดล็อกช่วงที่ถูกล็อคไว้ได้

ฉันต้องการให้สิ่งเหล่านั้นถูกล็อคเป็นส่วนใหญ่ แต่ฉันต้องการปลดล็อคหากจำเป็นต้องเปลี่ยนข้อมูลใด ๆ เหตุผลเดียวที่ฉันไม่ปกป้องทั้งแผ่นงาน เพราะถ้าฉันทำ มันจะปิดการใช้งานความสามารถในการขยายบนตาราง ในทางกลับกัน ให้ขยายบนแผนภูมิเส้น

ขอบคุณมากสำหรับความช่วยเหลือ!
ความคิดเห็นนี้ถูกย่อให้เล็กสุดโดยผู้ดำเนินรายการบนเว็บไซต์
สวัสดีเอริน
คุณสามารถทำลายรหัสได้ด้วยตนเองโดยคลิกปุ่มตัวแบ่งในหน้าต่าง Microsoft Visual Basic for Applications เพื่อปลดล็อกช่วงเหล่านั้น และเรียกใช้รหัสเพื่อเปิดใช้งานอีกครั้ง ขอบคุณสำหรับความคิดเห็นของคุณ
ความคิดเห็นนี้ถูกย่อให้เล็กสุดโดยผู้ดำเนินรายการบนเว็บไซต์
สวัสดี,
ความคิดเห็นเกี่ยวกับ faire pour verrouiller de la cellule B8 à B10000?
D'avance merci de votre réponse.
Christophe
ความคิดเห็นนี้ถูกย่อให้เล็กสุดโดยผู้ดำเนินรายการบนเว็บไซต์
มีฟังก์ชั่นให้ตั้งค่าเช่นแถวที่ 2 เซลล์ 13 ถึง 900 หรือไม่? หรือฉันต้องเจาะชื่อเซลล์แต่ละเซลล์ในรหัสด้วยตนเอง?
ความคิดเห็นนี้ถูกย่อให้เล็กสุดโดยผู้ดำเนินรายการบนเว็บไซต์
สวัสดี,

ฉันใช้รหัสที่ให้ไว้กับ Carlos และมันทำในสิ่งที่ฉันต้องการ มีวิธีชดเชยช่วงบางช่วงภายใน ROW ทางด้านขวาของช่วงที่มีการป้องกัน (ตามที่โค้ด "Carlos" มีอยู่แล้ว) แต่มีช่วงอื่นๆ ที่ชดเชยภายใน COLUMN ไปยังเซลล์ที่อยู่ใต้ช่วงที่มีการป้องกันโดยตรงหรือไม่ ฉันพยายามป้อนรหัส "Carlos" สองครั้งและเปลี่ยนออฟเซ็ต แต่ได้รับข้อผิดพลาดหลายอย่าง

ขอขอบคุณ
ความคิดเห็นนี้ถูกย่อให้เล็กสุดโดยผู้ดำเนินรายการบนเว็บไซต์
สวัสดีชาร์ลี
ขอโทษที่ยังช่วยคุณไม่ได้ ขอบคุณสำหรับความคิดเห็นของคุณ.
ความคิดเห็นนี้ถูกย่อให้เล็กสุดโดยผู้ดำเนินรายการบนเว็บไซต์
สวัสดี

ฉันได้ลองใช้รหัสสำหรับช่วงที่คุณได้โพสต์ไว้ก่อนหน้านี้แล้ว แต่มันใช้งานไม่ได้ คุณช่วยแนะนำฉันได้ไหมว่าฉันควรจะรวมรหัสสำหรับช่วงที่สูงกว่าหรือต่ำกว่า


ขอบคุณ
ความคิดเห็นนี้ถูกย่อให้เล็กสุดโดยผู้ดำเนินรายการบนเว็บไซต์
ฉันพยายามไม่ได้ ซ่อนสูตรโดยไม่ป้องกัน
ความคิดเห็นนี้ถูกย่อให้เล็กสุดโดยผู้ดำเนินรายการบนเว็บไซต์
มีวิธีให้รหัส VBA นี้ทำงานโดยอัตโนมัติทุกครั้งที่มีคนเปิดไฟล์หรือไม่?
ความคิดเห็นนี้ถูกย่อให้เล็กสุดโดยผู้ดำเนินรายการบนเว็บไซต์
สวัสดีแอรอน หลังจากเพิ่มโค้ดแล้ว โปรดบันทึกเวิร์กบุ๊กเป็นเวิร์กบุ๊กที่ใช้ Excel Macro-Enabled (click เนื้อไม่มีมัน > บันทึกเป็น > ระบุโฟลเดอร์สำหรับไฟล์ > เลือก สมุดงานที่เปิดใช้งานแมโคร Excel จาก บันทึกเป็น พิมพ์รายการแบบหล่นลง > ลด). หลังจากนั้น ทุกครั้งที่คุณเปิดไฟล์ โค้ดจะทำงานโดยอัตโนมัติ
มีความคิดเห็นยังไม่มีการโพสต์ที่นี่
แสดงความคิดเห็นของคุณ
โพสต์ในฐานะแขก
×
ให้คะแนนโพสต์นี้:
0   ตัวอักษร
สถานที่แนะนำ

ช่องทางอื่นๆ

ลิขสิทธิ์© 2009 - wwwextendoffice.com | สงวนลิขสิทธิ์. ขับเคลื่อนโดย ExtendOffice. | แผนผังเว็บไซต์
Microsoft และโลโก้ Office เป็นเครื่องหมายการค้าหรือเครื่องหมายการค้าจดทะเบียนของ Microsoft Corporation ในสหรัฐอเมริกาและ / หรือประเทศอื่น ๆ
ได้รับการปกป้องโดย Sectigo SSL