Vấn đề select lock cell trong VB excel

Liên hệ QC

Lighting

Thành viên mới
Tham gia
15/3/07
Bài viết
49
Được thích
14
Cho mình hỏi giờ mình protect sheet và ko muốn cho ng ta chọn ô bị khóa bằng vb:
Mã:
Private Sub CommandButton1_Click()
    For Each Sh In ActiveWorkbook.Worksheets
            If CommandButton1.Caption = "Lock" Then
                Sh.Protect Password:="khanh"
                Sh.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
                Sh.EnableSelection = xlUnlockedCells
            Else
                Sh.Unprotect Password:="khanh"
            End If
        End If
    Next
    CommandButton1.Caption = IIf(CommandButton1.Caption = "Lock", "Unlock", "Lock")
End If
End Sub
nhưng chỉ được 1 sheet các sheet khác vẫn chọn ô lock đc.
Sau đó khi đóng file lock lại và mở thì các ô lock ở các sheet lại chọn đc hết
Có cách nào để khóa ô và ko cho chọn ô đc không nhỉ?
cho mình hỏi thêm tag php code là thế nào nhỉ ? hj!
 
Cho mình hỏi giờ mình protect sheet và ko muốn cho ng ta chọn ô bị khóa bằng vb:
Mã:
Private Sub CommandButton1_Click()
    For Each Sh In ActiveWorkbook.Worksheets
            If CommandButton1.Caption = "Lock" Then
                Sh.Protect Password:="khanh"
                Sh.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
                Sh.EnableSelection = xlUnlockedCells
            Else
                Sh.Unprotect Password:="khanh"
            End If
        End If
    Next
    CommandButton1.Caption = IIf(CommandButton1.Caption = "Lock", "Unlock", "Lock")
End If
End Sub
nhưng chỉ được 1 sheet các sheet khác vẫn chọn ô lock đc.
Sau đó khi đóng file lock lại và mở thì các ô lock ở các sheet lại chọn đc hết
Có cách nào để khóa ô và ko cho chọn ô đc không nhỉ?
cho mình hỏi thêm tag php code là thế nào nhỉ ? hj!
Code này chắc chắn sẽ bị lỗi ---> Chỉ 1 IF mà có đến 3 END IF... chẳng hiểu sao bạn lại chạy được
Sửa lại thành vầy thử xem:
PHP:
Private Sub CommandButton1_Click()
  Dim sh As Worksheet
  For Each sh In ActiveWorkbook.Worksheets
    If CommandButton1.Caption = "Lock" Then
      sh.EnableSelection = xlUnlockedCells
      sh.Protect "khanh"
    Else
      sh.Unprotect "khanh"
    End If
  Next
  CommandButton1.Caption = IIf(CommandButton1.Caption = "Lock", "Unlock", "Lock")
End Sub
Cái thằng EnableSelection này cũng hơi kỳ lạ, đóng file rồi mở lại thì nó không có tác dụng... Vậy ta thêm 1 code trong module nữa:
PHP:
Sub Auto_Open()
  Dim sh As Worksheet
  For Each sh In ThisWorkbook.Worksheets
    If sh.ProtectContents Then
      sh.Unprotect "khanh"
      sh.EnableSelection = xlUnlockedCells
      sh.Protect "khanh"
    End If
  Next
End Sub
Tác dụng của sub này là quét qua các sheet, nếu thấy nó đang được protect thì unprotect rồi thiết lập EnableSelection = xlUnlockedCells, sau đó mới protect lại lần nữa
Nói thêm: Nguyên tắc là phải thiết lập EnableSelection = xlUnlockedCells trước, sau đó mới Protect sheet (Protect sheet trước thì câu lệnh EnableSelection = xlUnlockedCells chẳng có tác dụng gì)
 
Upvote 0
Cám ơn bạn hôm nọ online dc 1 lúc thì hỏng màn hình. Chỉ kịp nhấn nút thank. Giờ online tạm bằng blackberry.
Mình dùng end if nhiều là vì bao gồm nhiều code nữa. Khi hỏi thì mình xóa bớt code cho đỡ rối nhưng lại không xóa hết.
Sub auto_open mình ko gọi nó vẫn tự chạy mỗi khi mở excel hả bạn. Mình tự mò lên nhiều cái gà lắm!
Mình đã thử đổi tên sub auto_open nhưng không chạy cho đến khi đổi thành:

Private Sub Workbook_Open()

Vậy là sao nhỉ?
 
Lần chỉnh sửa cuối:
Upvote 0
Cám ơn bạn hôm nọ online dc 1 lúc thì hỏng màn hình. Chỉ kịp nhấn nút thank. Giờ online tạm bằng blackberry.
Mình dùng end if nhiều là vì bao gồm nhiều code nữa. Khi hỏi thì mình xóa bớt code cho đỡ rối nhưng lại không xóa hết.
Sub auto_open mình ko gọi nó vẫn tự chạy mỗi khi mở excel hả bạn. Mình tự mò lên nhiều cái gà lắm!
Mình đã thử đổi tên sub auto_open nhưng không chạy cho đến khi đổi thành:

Private Sub Workbook_Open()

Vậy là sao nhỉ?
Đó là QUY ĐỊNH
Để code tự chạy khi file khởi động, ta có 2 cách:
- Đặt code trong 1 sub có tên là Auto_Open() và sub này nằm trong 1 Module
- Đặt code trong Private Sub Workbook_Open() và code này nằm trong Workbook
 
Upvote 0
OK mình đã làm được rồi. Cám ơn bạn lần nữa!
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom